Filter总结

来源:互联网 发布:mac word 大小写转换 编辑:程序博客网 时间:2024/06/03 22:06

Filter可用于处理中文乱码等问题。

1.Filter(过滤器)

用于对用户访问一个web资源前对请求做预处理。常应用于非法登录、权限管理等。Filter可认为是Servlet的一种“变种”,它主要用于对用户请求进行预处理,也可以对HttpServletResponse进行后处理,是个典型的处理链。

FilterServlet的区别:

它与Servlet的区别在于:它不能直接向用户生成响应。完整的流程是:Filter对用户请求进行预处理,接着将请求交给Servlet进行处理并生成响应,最后Filter再对服务器响应进行后处理。

 

2.如何写Filter:

方式1implements Filter

方式2Do  it

 

3.Fc:FilterChain 过滤链

Fc.doFilter(req,res)访问下一个资源

 

4.Filter实现防止非法登录:

//MyFilter.java

public class MyFilter implements Filter {

 

    public void destroy() {

    }

 

    public void doFilter(ServletRequest req, ServletResponse res,

           FilterChain fc) throws IOException, ServletException {

      

       HttpServletRequest request = (HttpServletRequest) req;

       HttpServletResponse response = (HttpServletResponse) res;

      

       HttpSession session = request.getSession();

       if((String)session.getAttribute("userName")==null){

          

           response.sendRedirect("/servlet_session_project/index.jsp");

 

    }

       fc.doFilter(req, res);

    }

 

    public void init(FilterConfig arg0) throws ServletException {

      

 

    }

}

//web.xml

<filter>

    <filter-name>myfilter</filter-name>

    <filter-class>com.cqit.edu.common.MyFilter</filter-class>

</filter>

<filter-mapping>

    <filter-name>myfilter</filter-name>

    <url-pattern>/jsp/*</url-pattern>

</filter-mapping>

 

/* 表示对jsp文件夹的文件全部过滤,采用Filter防止非法登录可以实现对大量的文件进行过滤。而如果在跳转的页面里实现,则需要每个页面都要设置。

 

5.Filter实现中文乱码处理

//FilterChar.java

public class FilterChar extends HttpServlet implements Filter {

 

    public void doFilter(ServletRequest req, ServletResponse res,

           FilterChain fc) throws IOException, ServletException {

       req.setCharacterEncoding("GBK");

       res.setCharacterEncoding("GBK");

       fc.doFilter(req, res);

    }

    public void init(FilterConfig arg0) throws ServletException {

      

    }

}

//web.xml

<filter>

    <filter-name>filter1</filter-name>

    <filter-class>com.cqit.edu.common.FilterChar</filter-class>

</filter>

 

<filter-mapping>

    <filter-name>filter1</filter-name>

    <url-pattern>/*</url-pattern>

</filter-mapping>

 

req.setCharacterEncoding("GBK");是解决后台中读取文乱码问题

res.setCharacterEncoding("GBK");是解决前台响应中文乱码问题

原创粉丝点击