过滤器是请求和响应之间的一种WEB组件,它驻留在服务器端,用来截取客户端与资源之间的请求,并对这些信息进行“过滤”。
Servlet容器对部署描述符中声明的每一个过滤器只会创建一个实例。与Servlet类似,容器将在同一个过滤器实例上运行多个线程来同时为多个请求服务,因此开发过滤器时要注意线程安全问题。
当Web容器接受到一个对资源的请求时,它将判断是否有过滤器与这个资源相关联,如果有那么容器将把请求交给过滤器进行处理,在过滤器中可以改变请求的内容,或重新设置请求的报头信息,然后将请求发送给目标资源,当目标资源对请求做出响应时,容器同样会将响应转发给过滤器,在过滤器中可以对响应的内容进行过滤,从上面的过程我们可以看出,客户端和目标资源不需要知道过滤器的存在,对于客户端来说是透明的。
过滤器位于javax.servlet包中,有3个主要方法:
1.init(FilterConfig config)
Web容器调用方法来初始化过滤器,容器在调用该方法时,向过滤器传递FilterConfig对象,FilterConfig用法和ServletConfig类似。利用FilterConfig对象可以得到ServletContext对象,以及在部署描述符中配置的过滤器的初始化参数。
2.doFilter(ServletRequest request,ServletResponse response,FilterChain chain)
doFilter()方法类似Servlet接口的service()方法。当客户端请求目标资源的时候,容器会调用与这个目标资源想关联的过滤器的doFilter()方法。在这个方法中,可以对请求和响应进行处理,实现过滤器的功能。在特定的操作完成后,可以调用chain.doFilter()方法将请求传给下一个过滤器(或目标资源),也可以直接向客户端返回响应信息,或利用RequestDispatcher的forward()和include()方法,以及sendRedirect()方法转发。
但是要注意,这个方法的请求响应参数的类型是ServletRequest和ServletResponse,也就是说过滤器的使用不依赖具体的协议。
3.destroy()
Web容器调用该方法只是过滤器的声明周期结束。
下面看下过滤器在Web.xml中的声明:
<filter>
<filter-name>setEncoding</filter-name>
<filter-class>com.test.CharFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>setEncoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
Filter的声明和Servlet的类似,从上面的简单的配置中就可以看到,不做过多说明,主要说下<url-pattern>元素中的参数:
1.REQUEST,当用户直接访问页面时,Web容器将会调用过滤器,如果目标资源是通过RequestDispatcher的includ()或forward()方法访问时,那么不会调用这个过滤器。
2.FORWARD,如果目标资源是通过RequestDispatcher的forward()方法访问时,那么该过滤器将被调用,除此之外过滤器不会被调用。
3.INCLUDE,如果目标资源是通过RequestDispatcher的include()方法访问时,调用过滤器,其他不会调用。
4.ERROR,如果目标资源是通过声明式异常处理机制调用时,那么该过滤器将被调用,除此之外不会被调用。
5./*,所有请求都会调用。
过滤器应用的很广,特别是在Spring中,AOP,Acegi都应用到了过滤器的技术,所以,我们可以看出,只有很好的掌握了Servlet的各种技术,我们在后期的学习中才能更加的得心应手。在这里,我只是简单的介绍了过滤器基础的东西,更加高级的,希望与大家一起学习讨论。
分享到:
相关推荐
servlet,filter,过滤器技术servlet,filter,过滤器技术
servlet 过滤器做的简单登陆demo 初学者的简单例子。
比较好也比较常见的方法是用专门的servlet过滤器进行过滤。java中有个Filter类专门从事这类工作,下面以一个简单的实例进行演示: 实例说明:假设有一个web应用软件,如果是正常途径登录,我们会在其session中放入...
servlet过滤器实例经典过滤器,手把手交你配置过滤器,五大常用过滤器源码,走过路过的同事们注意了!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1、Filter接口:所有的Servlet过滤器类都必须实现javax.servlet.Filter接口 a、init(FilterConfig): 这是Servlet过滤器的初始化方法,Servlet容器创建Servlet过滤器实例后将调用这个方法。在这个方法中可以读取...
Servlet配置过滤器 Filter
servlet 过滤器例子 filterservlet 过滤器例子 filterservlet 过滤器例子 filter 如果是action 则需要改动url patten
sevlet里设置过滤器,利用索引过滤不符合自己想要的url,达到重定向的目的
tomcat、struts2、servlet Filter(过滤器) 工作原理 学习servlet的好资料,懂得工作原理,更容易理解问题.
jsp servlet中的过滤器Filter配置总结 1。如果要映射过滤应用程序中所有资源: <filter> <filter-name>loggerfilter</filter-name> <filter-class>myfilter.LoggerFilter</filter-class> </filter> <filter-...
servlet过滤器Filter入门,Servle过滤器的使用是Servlet中的重要内容,此文档就是针对此内容编写的。
Servlet3.0使用注解标注过滤器 Servlet3.0使用注解标注过滤器
servlet四个有用的过滤器,包括中文转码,缓存过滤等等
很有用的几个过滤器编程的例子,验证非法文字、验证登录和统一编码
JavaWeb Servlet中Filter过滤器的详解 1.简述 Filter过滤器,对web服务器所有web资源进行过滤,从而实现一些特殊的功能(权限访问控制、过滤敏感词汇、压缩响应信息)。Filter能够对Servlet容器的请求和响应进行检查...
jsp中servlet的过滤器详解,在网上找了很久,这个是最清楚最简单的,容易入门,也能明白他的概念
目录 ...CSS总结 JavaScript总结 DOM总结 tomcat服务器 ...Servlet Filter 过滤器 HTTP 协议 文件上传和下载 Servlet事件监听器 JavaMail开发 (案例)Estore电子商城 软件国际化 Java基础加强 JQuery Ajax JSON
配置Filter过滤器处理JSP中文乱码 参考Tomcat服务器目录webapps的examples示例 简单配置步骤: 1.在项目web.xml文件添加过滤器标记<filter>和<filter-mapping>; 2.实现过滤器代码; 3.对Tomcat服务器conf目录里的...
如果用户没有登陆,直接通过url访问其它页面则返回到登陆页面。 用servlet的过滤器实现,不会影响到其它模块的功能。
基于Servlet Filter的访问控制过滤器插件,汪克炎,龙毅宏,对于部署在互联网上的J2EE Web应用系统,用户的安全访问是至关重要的。本文介绍使用Servlet Filter技术设计一种可插入的、可扩展的、对��