------------------------------------------------------------------------------------------------------------------------------------
什么是过滤器?
与Servlet相似,过滤器是一些web应用程序组件,可以绑定到一个web应用程序档案中。但是与其他web应用程序组件不同的是,过滤器是"链"在容器的处理过程中的。这就意味着它们会在servlet处理器之前访问一个进入的请求,并且在外发响应信息返回到客户前访问这些响应信息。这种访问使得过滤器可以检查并修改请求和响应的内容。
--------------------------------------------------------------------------------------------------------------------------------------
过滤器适用于那些地方?
1.为一个web应用程序的新功能建立模型(可被添加到web应用程序中或者从web应用程序中删除而不需要重写基层应用程序代码);
2.向过去的代码添加新功能。
--------------------------------------------------------------------------------------------------------------------------------------
过滤器放在容器结构的什么位置?
过滤器放在web资源之前,可以在请求抵达它所应用的web资源(可以是一个Servlet、一个Jsp页面,甚至是一个HTML页面)之前截获进入的请求,并且在它返回到客户之前截获输出请求。
--------------------------------------------------------------------------------------------------------------------------------------
Filter:用来拦截请求,处于客户端与被请求资源之间,目的是重用代码。Filter链,在web.xml中哪个先配置,哪个就先调用。在filter中也可以配置一些初始化参数。
Filter的使用步骤
1.写Filter类
implements javax.servlet.Filter接口重写Filter接口中的方法init(FilterConfig),doFilter(ServletRequest req,ServletResponse res,FilterChain filter),destroy()
2.在web.xml中进行配置
<filter>
<filter-name>filterName</filter-name>
<filter-class>filterClass</filter-class>
</filter>
<filter-mapping>
<filter-name>filterName<filter-name>
<url-pattern>url</url-pattern>
</filter-mapping>
----------------------------------------------------------------------------------------------------------------------------------
Filter的生命周期:过滤器的四个阶段(与Servlet类似):
1.实例化
2.初始化(调用init()方法);---->init(FilterConfig)由容器调用,并且只调用一次
3过滤(调用doFilter()方法)---->doFilter(ServletRequest req,ServletResponse res,FilterChain filter)访问限定资源时被调用,会被调用多次,注意考虑多线程问题,处理方式和Servlet中的一样。
4.销毁(调用destroy()方法);--->destroy()由容器调用,并且只调用一次。
filter.doFilter(req,res):可以被认为是处理请求和响应的分界线,在filter.doFilter(...)前处理请求,在filter.doFilter(...)后处理响应。
主要:一旦写了Filter一定要在Filter.doFilter(...)中调用FilterChain.doFilter()方法,将请求皆有其他资源继续处理。
--------------------------------------------------------------------------------------------------------------------------------------