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

       和Servlet类似,Filter也是一个实现特殊接口的普通java类,只不过实现了Filter接口,需要实现该接口的一些过滤方法,实现了对一些请求信息的拦截。首先,我们确定一下它拦截的对象:在浏览器调用Servlet之前,在服务器返回非浏览器之前就行过滤它可以拦截jsp,Servlet,静态图片和静态HTML文件。相当于服务器的门卫,对客户端发来的请求和对客户端做出的响应进行过滤。

    那么对于这么一个类,如何让他工作?

    首先,这个类需要实现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就复习这么多吧

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值