百木园-与人分享,
就是让自己快乐。

javaweb:过滤器Filter

过滤器是用来过滤浏览器中的数据,例如web服务器受到一些垃圾请求,后台可以不处理这些请求或者报错,还可以用来解决乱码问题等。

过滤器是在服务器启动的时候初始化,在服务器关闭的时候销毁。

下面我们用实例来演示:

首先建立一个过滤器类CharacterEncodingFilter.class

 1 package com.jms.filter;
 2 
 3 import java.io.IOException;
 4 
 5 import javax.servlet.Filter;
 6 import javax.servlet.FilterChain;
 7 import javax.servlet.ServletException;
 8 import javax.servlet.ServletRequest;
 9 import javax.servlet.ServletResponse;
10 
11 public class CharacterEncodingFilter implements Filter{
12 
13     @Override
14     public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
15         request.setCharacterEncoding(\"UtF-8\");
16         response.setCharacterEncoding(\"UTF-8\");
17         response.setContentType(\"text/html;charset=UTF-8\");
18         chain.doFilter(request, response);//给其他过滤器放行
19         
20     }
21 
22 }

chain.doFilter(request, response);这句话是一定要有的,因为一个网站可能会有多个过滤器,这句话是为了给其他过滤放行,如果没有这句话,执行完这个过滤器后其他过滤器无法得到执行。

接着建立一个servlet用于检验过滤器是否执行,servlet001.class

 1 package com.jms.servlet;
 2 
 3 import java.io.IOException;
 4 
 5 import javax.servlet.ServletException;
 6 import javax.servlet.http.HttpServlet;
 7 import javax.servlet.http.HttpServletRequest;
 8 import javax.servlet.http.HttpServletResponse;
 9 
10 public class servlet001 extends HttpServlet{
11 
12     /**
13      * 
14      */
15     private static final long serialVersionUID = 1L;
16 
17     @Override
18     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
19         resp.getWriter().print(\"过滤成功\");
20     }
21 
22     @Override
23     protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
24         doGet(req, resp);
25     }
26     
27     
28     
29 }

修改web.xml文件

        <servlet>
            <servlet-name>demo001</servlet-name>
            <servlet-class>com.jms.servlet.servlet001</servlet-class>
        </servlet>
        <servlet-mapping>
            <servlet-name>demo001</servlet-name>
            <url-pattern>/demo/show</url-pattern>
        </servlet-mapping>
        <servlet-mapping>
            <servlet-name>demo001</servlet-name>
            <url-pattern>/show</url-pattern>
        </servlet-mapping>
        
        <filter>
            <filter-name>filter001</filter-name>
            <filter-class>com.jms.filter.CharacterEncodingFilter</filter-class>
        </filter>
        <filter-mapping>
            <filter-name>filter001</filter-name>
            <url-pattern>/demo/*</url-pattern>
        </filter-mapping>

如上设置,过滤器会过滤/demo路径下的所有页面;servlet001有两个映射,一个是/show,不会被过滤,另一个是/demo/show,会被过滤。

我们先访问/show

 

 中文乱码,没有被过滤器过滤;

我们再访问/demo/show

 

 不再是乱码,成功被过滤。

需要注意的是,设置过滤器的时候尽量不要让过滤器过滤整个网站,而可以设置多个过滤器分工进行。

 

(本文仅作个人学习记录用,如有纰漏,敬请指正)


来源:https://www.cnblogs.com/jmsstudy/p/16536552.html
本站部分图文来源于网络,如有侵权请联系删除。

未经允许不得转载:百木园 » javaweb:过滤器Filter

相关推荐

  • 暂无文章