在 Java 服务器页面中使用过滤器
Using Filter in Java Server Page
我应该如何在 JSP 中使用过滤器?
过滤输入用户使用哪个过滤器?
我应该如何为过滤器输入实现它?
@WebFilter("/*")
public class MyFilter implements Filter {
public void doFilter(ServletRequest request,
ServletResponse response, FilterChain chain)
throws IOException, ServletException {
// before pass filter
chain.doFilter(request, response);
// after pass filter
}
}
过滤器用于在某些网页之前或之后执行任务。您在 web.xml 中定义过滤器,并定义 URL 模式将通过此过滤器。当然,您也可以像 case.For 示例中那样使用 WebFilter 注释,您可以在 web.xml 中定义一个 CharsetFilter,如下所示:
<filter>
<filter-name>CharsetFilter</filter-name>
<filter-class>net.tangs.business.common.filter.CharsetFilter</filter-class>
<init-param>
<param-name>requestEncoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharsetFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
这里我定义了一个CharsetFilter,由class CharsetFilter.java实现(带有完整包名),参数requestEncoding初始化为UTF-8。我还使用 <filter-mapping>
并指定所有网页 (/*) 都将通过此过滤器。
现在你需要的是如上所示在包中创建CharsetFilter.java并实现java.servlet.Filter
接口。
public class CharsetFilter implements Filter {
private String encoding;
@Override
public void init(FilterConfig config) throws ServletException {
encoding = config.getInitParameter("requestEncoding");
if (encoding == null)
encoding = "UTF-8";
}
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain next) throws IOException, ServletException {
// Respect the client-specified character encoding
// (see HTTP specification section 3.4.1)
if (null == request.getCharacterEncoding())
request.setCharacterEncoding(encoding);
/**
* Set the default response content type and encoding
*/
response.setContentType("text/html; charset=UTF-8");
response.setCharacterEncoding("UTF-8");
next.doFilter(request, response);
}
@Override
public void destroy() {
}
}
您必须覆盖 3 个方法:用于初始化的 init()、用于执行实际过滤任务的 doFilter() 和用于任何清理的 destroy()。请注意,在 doFilter() 方法中,您可以访问请求和响应。对于这个例子,我所做的只是将请求内容类型和字符编码设置为 UTF-8。现在,当您在应用程序中请求任何网页时,doFilter() 中的这段代码将始终首先执行。
我应该如何在 JSP 中使用过滤器?
过滤输入用户使用哪个过滤器?
我应该如何为过滤器输入实现它?
@WebFilter("/*")
public class MyFilter implements Filter {
public void doFilter(ServletRequest request,
ServletResponse response, FilterChain chain)
throws IOException, ServletException {
// before pass filter
chain.doFilter(request, response);
// after pass filter
}
}
过滤器用于在某些网页之前或之后执行任务。您在 web.xml 中定义过滤器,并定义 URL 模式将通过此过滤器。当然,您也可以像 case.For 示例中那样使用 WebFilter 注释,您可以在 web.xml 中定义一个 CharsetFilter,如下所示:
<filter>
<filter-name>CharsetFilter</filter-name>
<filter-class>net.tangs.business.common.filter.CharsetFilter</filter-class>
<init-param>
<param-name>requestEncoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharsetFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
这里我定义了一个CharsetFilter,由class CharsetFilter.java实现(带有完整包名),参数requestEncoding初始化为UTF-8。我还使用 <filter-mapping>
并指定所有网页 (/*) 都将通过此过滤器。
现在你需要的是如上所示在包中创建CharsetFilter.java并实现java.servlet.Filter
接口。
public class CharsetFilter implements Filter {
private String encoding;
@Override
public void init(FilterConfig config) throws ServletException {
encoding = config.getInitParameter("requestEncoding");
if (encoding == null)
encoding = "UTF-8";
}
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain next) throws IOException, ServletException {
// Respect the client-specified character encoding
// (see HTTP specification section 3.4.1)
if (null == request.getCharacterEncoding())
request.setCharacterEncoding(encoding);
/**
* Set the default response content type and encoding
*/
response.setContentType("text/html; charset=UTF-8");
response.setCharacterEncoding("UTF-8");
next.doFilter(request, response);
}
@Override
public void destroy() {
}
}
您必须覆盖 3 个方法:用于初始化的 init()、用于执行实际过滤任务的 doFilter() 和用于任何清理的 destroy()。请注意,在 doFilter() 方法中,您可以访问请求和响应。对于这个例子,我所做的只是将请求内容类型和字符编码设置为 UTF-8。现在,当您在应用程序中请求任何网页时,doFilter() 中的这段代码将始终首先执行。