Filter学习总结

来源:互联网 发布:java多线程异步处理 编辑:程序博客网 时间:2024/06/08 14:14

Filter接口

FilterChain接口


Filter的三个方法 

  init(FilterConfig config)  

doFilter(ServletRequest request,ServletResponse response,FilterChain chain) ; chain为过滤链  

destory();


在web.xml中的配置

<filter>
<filter-name>myfilter</filter-name> 
<filter-class>com.bai.Filter</filter-class>
</filter>
<filter-mapping>
<filter-name>myfilter</filter-name>
<url-pattern>/*</url-pattern>
<filter-mapping>

此处的url表示过滤所有的资源

  <filter>
  <filter-name>sf</filter-name>
  <filter-class>com.bai.filter.SessionFilter</filter-class>
  </filter>
  <filter-mapping>
  <filter-name>sf</filter-name>
  <url-pattern>/pages/*</url-pattern>
  </filter-mapping>

此处的url表示过滤pages下面的资源


使用filter,只需要建一个java类,使其实现flilter接口,重写dofilter方法,并在web.xml中配置

filter是自动执行,不用调用,当你访问url-pattern下的资源时,filter将起作用


在一个项目中,我们可以设置一个Filter来设置编码,减少了每个页面或者servlet的编码设置

public void doFilter(ServletRequest req, ServletResponse res,

FilterChain chain) throws IOException, ServletException {

req.setCharacterEncoding("utf-8");

res.setCharacterEncoding("utf-8");

chain.doFilter(req, res);

}


还可以使用Filter来验证用户是否登录


使用filter之后,在dofilter方法内必须写上chain.doFilter(requset,response);

该语句的作用是使代码继续执行下去


如果使用Httpservlet,那么在dofilter方法中,需要对request和response进行强制类型转换

如: HttpServletRequest req = (HttpServletRequest)request;


public void doFilter(ServletRequest arg0, ServletResponse arg1,

FilterChain chain) throws IOException, ServletException {

HttpServletRequest request = (HttpServletRequest) arg0;

HttpServletResponse response = (HttpServletResponse) arg1;

HttpSession session = request.getSession();

String name = (String) session.getAttribute("1");

if(name!=null&&!name.equals("")){

System.out.println("in firlter if lanuage");

chain.doFilter(request, response);

}else{

System.out.println("in firlter esle lanuage");

request.setAttribute("msg", "你还没有登录!!");

request.getRequestDispatcher("/login.jsp").forward(request, response);

}

}






原创粉丝点击