本文共 2506 字,大约阅读时间需要 8 分钟。
FIlter:可以拦截请求和响应;实践中的使用:url访问权限控制、敏感词过滤、压缩响应信息。 Filter是一个接口,接口中的doFilter()方法是真正执行的方法; Filter需要在web.xml中配置。 ****使用步骤:类似servlet: 创建一个类继承接口,实现doFilter方法,web.xml中配置; <filter> <filter-name>testFilt</filter-name> <filter-class>实现filter接口的类名(其中包名也要带上)</filt-class> </filter><filter-mapping>
<filter-name>testFilt</filter-name>
<url-pattern>被拦截的路径(访问这个路径就被拦截) </url-attern> <filter-mapping>chain.dofilter(request,reponse);放行,向链中的下一个节点传递;
******FIlter生命周期:
*****FilterConfig作用:获取Filter的相关配置信息,和sercletConfig类似:初始化参数的获取,Filter名称的获取,servletContext对象的获取; Filter的详细配置:可以有多个Filter,filter的执行顺序由web.xml中<filter-mapping>的顺序决定,在上面的先执行;所有filter执行完成,再执行servlet等web资源; <url-pattern>的几种写法: 1.完全匹配:必须以/开始 2.*通配符:包括目录匹配:/a/*;扩展名匹配:*.do *.action 不能以/开始;过滤器Filter是servlet规范中定义的一种特殊的类,用于对servlet容器的调用过程进行拦截。有多个过滤器时依照<filrter-mapping>的先后顺序执行。
写一个Java类,实现Filter接口;在doFilter的方法中实现过滤的逻辑。
在web.xml中实现:
<filter>
<filter-name>CommentFilter2</filter-name>
<filter-class>web.CommentFilter2</filter-class>
<init-param>
<param-name>size</param-name>
<param-value>3</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CommentFilter2</filter-name>
<url-pattern>/CommentFilter2</url-pattern>
</filter-mapping>
package web;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class CommentFilter2 implements Filter { private FilterConfig config; public void destroy() { } public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws IOException, ServletException { System.out.println("Filter2 begin process..."); HttpServletRequest request = (HttpServletRequest)arg0; HttpServletResponse response = (HttpServletResponse)arg1; String name = request.getParameter("name");//获取传过来的参数 response.setContentType("text/ html;charset=utf-8"); PrintWriter out = response.getWriter(); int size = Integer.parseInt(config.getInitParameter("size"));//获取初始化配置参数 System.out.println(size); if(name.length() > size){ out.println("超过最大长度"); }else{ //调用后续的过滤器,如果没有了,则调用 web 组件// arg2.doFilter(arg0, arg1); request.getRequestDispatcher("add") .forward(request, response); } System.out.println("Filter2 process finished."); } public void init(FilterConfig arg0) throws ServletException { config = arg0; }}
转载地址:http://tmmgi.baihongyu.com/