文档详情

jsp程序设计入门沈泽刚、秦玉平主编的javaweb第二版第08章Servlet高级应用概要.ppt

发布:2017-03-04约1.36万字共84页下载文档
文本预览下载声明
8.2.1 什么是过滤器 过滤器(Filter)是Web服务器上的组件,它拦截客户对某个资源的请求和响应,对其进行过滤。图8-3说明了过滤器的一般概念,其中F1是一个过滤器。它显示了请求经过滤器F1到达Servlet,Servlet产生响应再经过滤器F1到达客户。这样,过滤器就可以在请求和响应到达目的地之前对它们进行监视。 8.2.1 什么是过滤器 可以在客户和资源之间建立多个过滤器,从而形成过滤器链(filter chain)。在过滤器链中每个过滤器都对请求处理,然后将请求发送给链中的下一个过滤器(如果它是链中的最后一个,将发送给实际的资源)。类似地,在响应到达客户之前,每个过滤器以相反的顺序对响应处理。图8-4说明了这个过程。 这里,请求是按下列顺序 处理的:过滤器F1、过滤 器F2、过滤器F3,而响应 的处理顺序是过滤器F3、 过滤器F2、过滤器F1。 1. 过滤器是如何工作的 当容器接收到对某个资源的请求时,它首先检查是否有过滤器与该资源关联。如果有过滤器与该资源关联,容器先把该请求发送给过滤器,而不是直接发送给资源。在过滤器处理完请求后,它将做下面三件事: (1)将请求发送到目标资源。 (2)如果有过滤器链,它将把请求(修改过或没有修改过)发送给下一个过滤器。 (3)直接产生响应并将其返回给客户。 当请求返回到客户时,它将以相反的方向经过同一组过滤器。过滤器链中的每个过滤器都可能修改响应。 2. 过滤器的用途 Servlet规范中提到的过滤器的一些常见应用包括: 验证过滤器 登录和审计过滤器 数据压缩过滤器 加密过滤器 XSLT过滤器 8.2.2 过滤器API 表8-4描述了javax.servlet包中与过滤器有关的三个接口。 1. Filter接口 Filter接口是过滤器API的核心,所有的过滤器都必须实现该接口。该接口声明了三个方法,分别是init()、doFilter()和destroy(),它们是过滤器的生命周期方法。 init()是过滤器初始化方法。在过滤器的生命周期中,init()仅被调用一次。在该方法结束之前,容器并不向过滤器转发请求。该方法的声明格式为:   public void init(FilterConfig filterConfig) 参数FilterConfig是过滤器配置对象,通常将FilterConfig参数保存起来以备用。该方法抛出ServletException异常。 doFilter()是实现过滤的方法。如果客户请求的资源与该过滤器关联,容器将调用该方法,格式如下: public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException; 该方法执行过滤功能,对请求进行处理或者将请求转发到下一个组件或者直接向客户返回响应。注意,request和response参数被分别声明为ServletRequest和ServletResponse的类型。 1. Filter接口 过滤器并不只限于处理HTTP请求。但如果过滤器用在使用HTTP协议的Web应用程序中,这些变量就分别指HttpServletRequest和HttpServletResponse类型的对象。在使用它们之前应把这些参数转换为相应的HTTP类型。 destroy()是容器在过滤器对象上调用的最后一个方法,声明格式为:   public void destroy(); 该方法给过滤器对象一个释放其所获得资源的机会,在结束服务之前执行一些清理工作。 1. Filter接口 2. FilterConfig接口 FilterConfig对象是过滤器配置对象,通过该对象可以获得过滤器名、过滤器运行的上下文对象以及过滤器的初始化参数。它声明了如下4个方法: public String getFilterName() public ServletContext getServletContext() public String getInitParameter(String name) public Enumeration getInitParameterNames() 容器提供了FilterConfig接口的一个具体实现类,容器创建该类的一个实例、使用初始化参数值对它初始化
显示全部
相似文档