首页 > 代码库 > 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