在 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() 中的这段代码将始终首先执行。