Java Servlet中的Filter

      1.概念:

       Filter 技术是Servlet 2.3 新增加的功能,Servlet2.3是sun公司与2000年10月发布的,Filter能够对Servlet容器的请求和响应对象进行检查和修改。

       Filter本身并不产生请求和响应对象,它只能提供过滤作用。在Servlet被调用之前检查Request对象,修改Request Header和Request内容;在Servlet被调用之后检查Response对象,修改Response Header和Response内容。

       Filter负责过滤的Web组件可以是Servlet、JSP或者HTML文件。 

 

      2.特点:

      Filter可以检查和修改ServletRequest和ServletResponse对象
      Filter可以被指定和特定的URL关联,只有当客户请求访问该URL时,才会触发过滤器
      Filter可以被串联在一起,形成管道效应,协同修改请求和响应对象

 

      3.Filter的适用场合:

      登录过滤,编码过滤,URL过滤,加密过滤等。

 

      4.Filter接口的构成:

      所有的Filter类都必须实现javax.servlet.Filter接口。这个接口含有3个过滤器类必须实现的方法:

        a.init(FilterConfig):

           这是Filter的初始化方法,Servlet容器创建Filter实例后将调用这个方法。在这个方法中可以读取web.xml文件中Filter的初始化参数

        b.doFilter(ServletRequest,ServletResponse,FilterChain):
           这个方法完成实际的过滤操作,当客户请求访问于Filter关联的URL时,Servlet容器将先调用Filter的doFilter方法。FilterChain参数用于访问后续Filters

        c.destroy():
           Servlet容器在销毁Filter实例前调用该方法,这个方法中可以释放Filter占用的资源

 

       5.配置Filter

 

	<filter>
		<filter-name>enconfigFilter</filter-name>
		<filter-class>com.filter.EnconfigFilter</filter-class>
		<init-param>
			<param-name>enconfig</param-name>
			<param-value>UTF-8</param-value>
		</init-param>
	</filter>
	<filter-mapping>
		<filter-name>enconfigFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
 

       这是一个字符编码的过滤器,其中:   

        filter-name   指定过滤器的名字
        filter-class    指定过滤器的类名
        init-param    为过滤器实例提供初始化参数,可以有多个
        url-pattern   指定和过滤器关联的URL,为”/*”表示所有URL

 

       6.注意事项

       a.由于Filter、FilterConfig、FilterChain都是位于javax.servlet包下,并非HTTP包所特有的,所以其中所用到 的请求、响应对象ServletRequest、ServletResponse在使用前都必须先转换成HttpServletRequest、 HttpServletResponse再进行下一步操作。

       b.在web.xml中配置Servlet和Servlet过滤器,应该先声明过滤器元素,再声明Servlet元素

 

你可能感兴趣的:(java,jsp,Web,xml,servlet)