修改 HTML 和 JSP
Posted
技术标签:
【中文标题】修改 HTML 和 JSP【英文标题】:Modifying HTML and JSP 【发布时间】:2017-05-30 12:19:39 【问题描述】:如何在每个 html 和 JSP 页面上添加 HTML 注释?
我尝试使用过滤器对其进行修改,但它只能修改 JSP 页面,而不能修改 HTML 页面。
我使用了这样的过滤器:
package com.app.server.filter;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletResponseWrapper;
import java.io.CharArrayWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
public class WaterMarkFilter implements Filter
private List<String> extensionsToFilter = new ArrayList<>();
@Override
public void init(FilterConfig filterConfig) throws ServletException
String[] extensions = filterConfig.getInitParameter("extensionsToFilter").split(",");
for (String extension : extensions)
extensionsToFilter.add(extension.trim());
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException
chain.doFilter(request, response);
postFilter(request, response);
@Override
public void destroy()
private void postFilter(ServletRequest request, ServletResponse response) throws IOException, ServletException
String path = ((HttpServletRequest) request).getRequestURI();
if (canIntercept(path))
response.getWriter().write("modified");
response.getWriter().close();
private boolean canIntercept(String path)
if (path.equals("/"))
return true;
for (String extension : extensionsToFilter)
if (path.endsWith("." + extension))
return true;
return false;
这是 Web.xml 文件:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<servlet>
<servlet-name>com.app.configuration ShoppingCartService</servlet-name>
<servlet-class>com.app.server.servlet.ShoppingCartServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>com.app.configuration ShoppingCartService</servlet-name>
<url-pattern>/application/ShoppingCartServlet</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>test</servlet-name>
<servlet-class>com.app.server.servlet.TestServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>test</servlet-name>
<url-pattern>/application/test</url-pattern>
</servlet-mapping>
<listener>
<listener-class>com.app.server.ApplicationInitializer</listener-class>
</listener>
<filter>
<filter-name>WaterMarkFilter</filter-name>
<filter-class>com.app.server.filter.WaterMarkFilter</filter-class>
<init-param>
<param-name>extensionsToFilter</param-name>
<param-value>jsp, html</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>WaterMarkFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
【问题讨论】:
请编辑并发布您的过滤器的完整代码,您的 web.xml(如果在此处声明了过滤器)。 @RC。补充,希望你能找到一些东西 我认为问题在于你在做事之前“链接”到下一个过滤器 @user2997204 检查我的答案。我测试了它。它工作正常。如果它也适合你,别忘了点赞并接受我的回答 很高兴这有效。您是否也考虑过像 Tiles 这样的模板系统,然后将其添加到那里?可能有意义,具体取决于您尝试分离关注点的方式。 【参考方案1】:实际的问题是如何使用过滤器操作 ServletResponse。My detailed answer with full code example and many links is here
短: 在 doFilter 实现中:
-
在
chain.doFilter
调用之前,准备一个HttpServletResponseWrapper 和一个PrintWriter
调用后,在 PrintWriter 中写入包装响应的副本 +“您想要的文本”
下面是代码更改,以便过滤器也可以与 HTML 一起使用:
public class WaterMarkFilter implements Filter
private ServletRequest request;
private PrintWriter out;
private CharResponseWrapper wrapper;
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException
this.request = request;
out = response.getWriter();
wrapper = new CharResponseWrapper((HttpServletResponse) response);
chain.doFilter(request, wrapper);
postFilter();
out.close();
private void postFilter() throws IOException, ServletException
String path = ((HttpServletRequest) request).getRequestURI();
if (canIntercept(path))
out.write(wrapper.toString() + "modified");
else
out.write(wrapper.toString());
CharResponseWrapper 与 my detailed answer here 中的相同。
还有一个更好的示例如何将文本包含到已创建的 html 中。
仅在末尾添加文本仅适用于纯文本文件。
对于 HTML - 最好在 HTML 中插入文本。这里的示例带有<head>
标签,但它可以适应插入到<body>
标签。
【讨论】:
以上是关于修改 HTML 和 JSP的主要内容,如果未能解决你的问题,请参考以下文章