首页 > 代码库 > Servlet基础梳理(五)----Filter

Servlet基础梳理(五)----Filter

       和Servlet类似,Filter也是一个实现特殊接口的普通java类,仅仅只是实现了Filter接口。须要实现该接口的一些过滤方法,实现了对一些请求信息的拦截。首先,我们确定一下它拦截的对象:在浏览器调用Servlet之前,在server返回非浏览器之前即可过滤它能够拦截jsp,Servlet。静态图片和静态HTML文件。

相当于server的门卫。对client发来的请求和对client做出的响应进行过滤。

    那么对于这么一个类,怎样让他工作?

    首先,这个类须要实现Filter接口,将该接口的方法实现,然后在web.xml中注冊和映射拦截的路径即可了。这样一说跟Servlet的工作方式基本上一致,仅仅只是Servlet配置的是能够訪问的路径,这里是拦截的路径。

事实上实现接口的方法都非常类似,都是一个init方法。这种方法附带一个配置參数。利用这个配置參数能够获取配置的各种信息,甚至包含ServletContext的配置信息。另一个destroy方法,不用管;还有就是一个基本的每次用到的方法。仅仅只是名字一个是service方法一个是doFilter方法,反正都是每次都用它工作就对了。

   这里我们说一下它的配置(当然在Servlet3.0规范中能够使用注解。不用配置,可是学习时还是自己动手配一下加深学习比較好)。

  <filter>
  <filter-name>filterTest1</filter-name>
  <filter-class>Filter.FilterTest1</filter-class>
  </filter>
  <filter-mapping>
  <filter-name>filterTest1</filter-name>
  <url-pattern>/filter/test1.jsp</url-pattern>
  <dispatcher>REQUEST</dispatcher>
  <dispatcher>FORWARD</dispatcher>
  </filter-mapping>
能够看到这里的配置方式跟Servlet基本一致。后面dispatcher是设置拦截方式,一般默认是REQUEST。表示对请求进行拦截,当然这个也是用的最多的,其次是Forward方式,表示对转发进行拦截。

Filter是相互链式的工作的。就是说一个Filter放行后会自己主动转给还有一个Filter来处理的。这里他们工作的顺序是依据web.xml中<filter-mapping>的顺序来决定的。

   对于Filter,其经典的应用是处理用户登录问题,非常多页面,用户没有登录则不给于显示。其原理就是在Filter中推断用户的session状态。假设登陆了就放行。利用Filter还能够解决乱码问题,设置页面请求的编码。设置页面是否缓存等:这里给两个简单的代码:

                //使浏览器不缓存
	        response.setDateHeader("Expires",-1);
		response.setHeader("Cache-Control","no-cache");
		response.setHeader("Pragma","no-cache");
能够在web.xml中设置编码方式。在Filter中进行设置:

  

                 //解决乱码:
                HttpServletRequest req=(HttpServletRequest) request;
		HttpServletResponse res=(HttpServletResponse) response;
		String encoding= fConfig.getServletContext().getInitParameter("encoding");//通过配置參数获取web.xml中设置的编码方式
		req.setCharacterEncoding(encoding);//设置编码方式
		chain.doFilter(request, response);

OK。Filter就复习这么多吧

Servlet基础梳理(五)----Filter