初识Servlet过滤器
2010-08-16 11:45
190 查看
一、 什么是web应用开发中过滤器以及他的功能 定义:过滤器其实是一个程序,它先于与之相关的servlet或JSP页面运行在服务器上。过滤器可附加到一个或多个servlet或JSP页面上,并且可以检查进入这资源的请求信息 功能:是对 Servlet 容器调用 Servlet 的过程进行拦截,从而在 Servlet 进行响应处理的前后实现一些特殊的功能 二、 工作原理 当客户端发送请求,首先经过过滤器(过滤不合法动作以及不合法文字并进行处理),在Servlet作为过滤器使用时,它可以对客户的请求进行处理。处理完成后,它会交给下一个过滤器处理,这样,客户的请求在过滤链里逐个处理,直到请求发送到目标为止。处理后可采取如下如下动作 ①以常规的方式调用资源(即,调用servlet或JSP页面)。 ②利用修改过的请求信息调用资源。 ③调用资源,但在发送响应到客户机前对其进行修改。 ④阻止该资源调用,代之以转到其他的资源,返回一个特定的状态代码或生成替换输出。 注意:在一个 web 应用程序中可以注册多个 Filter 程序,每个 Filter 程序都可以对一个或一组 Servlet 程序进行拦截。若有多个 Filter 程序对某个 Servlet 程序的访问过程进行拦截,当针对该 Servlet 的访问请求到达时,web 容器将把这多个 Filter 程序组合成一个 Filter 链(过滤器链)。Filter 链中各个 Filter 的拦截顺序与它们在应用程序的 web.xml 中映射的顺序一致 三、 如何在Web程序中实现过滤器 1.实现步骤: 在 Servlet API 中定义了三个接口类来开供开发人员编写 Filter 程序:Filter, FilterChain, FilterConfig。实现过滤器的步骤如下: 1). 编写一个Filter程序,实现Filter接口,并根据需要实现接口中过滤器生命周期的方法 2).在web.xml中注册和映射过滤器 2.Filter的生命周期() 1)init(FilterConfig filterConfig):这是Servlet过滤器的初始化方法. 在 web 应用程序启动时,web 服务器将根据 web.xml 文件中的配置信息来创建每个注册的 Filter 实例对象,并将其保存在服务器的内存中。Web容器(servlet容器)创建 Filter 对象实例后,将立即调用该 Filter 对象的 init 方法。 Init 方法在 Filter 生命周期中仅执行一次, servlet容器在调用 init 方法时,会传递一个包含 Filter 的配置和运行环境的 FilterConfig 对象(FilterConfig的用法和ServletConfig类似)。利用FilterConfig对象可以得到ServletContext对象,以及部署描述符中配置的过滤器的初始化参数。 在这个方法中,可以抛出ServletException异常,通知容器该过滤器不能正常工作。 2) destroy(): Servlet容器在卸载过滤器实例前调用该方法。该方法在Filter的生命周期中仅执行一次。在这个方法中,可以释放过滤器使用的资源. 3) doFilter(ServletRequest request,ServletResponse response, FilterChain chain)类似于Servlet接口的service()方法。当客户端请求目标资源的时候,容器就会调用与这个目标资源相关联的过滤器的doFilter()方法。 其中参数 request, response 为 web 容器或 Filter 链的上一个 Filter 传递过来的请求和相应对象; 参数 chain 为代表当前 Filter 链的对象,在特定的操作完成后,可以在当前 Filter 对象的 doFilter 方法内部需要调用 FilterChain 对象的 chain.doFilter(request,response)方法才能把请求交付给 Filter 链中的下一个 Filter 或者目标 Servlet 程序去处理,也可以直接向客户端返回响应信息,或者利用RequestDispatcher的forward()和include()方法,以及HttpServletResponse的sendRedirect()方法将请求转向到其他资源 3.过滤器对请求的过滤 1) Servlet容器创建一个过滤器实例 2) Servlet容器调用init方法,读取过滤器的初始化参数 3) Servlet容器调用doFilter方法,根据初始化参数的值,判断该请求是否合法 4) 如果该请求不合法则阻塞该请求 5) 如果该请求合法则调用chain.doFilter方法将该请求向后续传递 4.过滤器对响应的过滤 1)过滤器截获客户端的请求. 2)重新封装ServletResponse,在封装后的ServletResponse中提供用户自定义的输出流.将请求向后续传递. 3)Web组件产生响应. 4)从封装后的ServletResponse中获取用户自定义的输出流. 5)将响应内容通过用户自定义的输出流写入到缓冲流中.在缓冲流中修改响应的内容后清空缓冲流,输出响应内容. |
相关文章推荐
- 初识Servlet过滤器
- 初识Servlet过滤器
- Servlet过滤器与Struts拦截器的区别
- Servlet-过滤器
- JavaWeb学习篇之----Servlet过滤器Filter和监听器
- Servlet3.0学习总结(二)——使用注解标注过滤器(Filter)
- servlet过滤器
- 01初识Servlet
- Servlet的过滤器
- Servlet过滤器
- 初识Servlet
- Servlet过滤器介绍之原理分析
- Servlet中的过滤器Filter详解
- servlet和JSP过滤器Filter
- Servlet 2.3过滤器编程
- Servlet 过滤器详解
- Servlet 过滤器应用实例三 记录客户端主机信息的Filter
- servlet制作过滤器
- servlet过滤器和监听器
- Servlet的基础概念 监听器 过滤器等【转】