`
yourenyouyu2008
  • 浏览: 287589 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

通过filter 来扩展request 、response,改变servlet的默认行为

阅读更多

一般的servlet应用直接使用request\response,使用它们的默认行为,特殊情况下需要改变它们的默认行为,在很多框架级代码中广泛使用。servlet规范提供了HttpServletResponseWrapper  HttpServletRequsetWrapper 包装类,定义它们的子类包装原始request或response,扩展它们的默认行为。

 

问题是如何让servlet容器使用自定义的包装类呢?

可以通过filter在请求开始前封装原始request或response,filter将包装类传递给后面的filter及servlet,jsp,这样它们就都使用到封装的request或response了。

 

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException

   {

      chain.doFilter( request, wrapResponse( (HttpServletResponse) response));

   }

 

private static ServletResponse wrapResponse(HttpServletResponse response)

   {

      return new HttpServletResponseWrapper(response)

      {

要重写的方法

。。。}

 

seam使用该机制实现了重定向的对话支持,即重定向后也能获取对话的对象了。

@Scope(APPLICATION)

@Name("org.jboss.seam.web.redirectFilter")

@Install(precedence = BUILT_IN, classDependencies="javax.faces.context.FacesContext")

@BypassInterceptors

@Filter(within="org.jboss.seam.web.ajax4jsfFilter")

public class RedirectFilter extends AbstractFilter

 public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException

   {

      chain.doFilter( request, wrapResponse( (HttpServletResponse) response));

   }

private static ServletResponse wrapResponse(HttpServletResponse response)

   {

      return new HttpServletResponseWrapper(response)

      {

        @Override

         public void sendRedirect(String url) throws IOException

          {。。。。。。。。}

       }

}

 

 

 

下面是典型使用示例

http://ch-space.iteye.com/blog/479603

 

http://blog.chenlb.com/2009/07/use-httpservletresponsewrapper-implement-etag-filter.html

 

http://www.mzone.cc/article/260.html

 

分享到:
评论

相关推荐

    简单的servlet+Filter的例子

    在Filter的`doFilter()`方法中,我们通常会调用`chain.doFilter(request, response)`来将请求传递给下一个Filter或目标Servlet。这样,一个Filter链可以按照定义的顺序依次处理请求。 回到主题,"简单的servlet+...

    filter 修改jsp servlet response返回的内容

    本篇我们将深入探讨如何使用`filter`来修改JSP(JavaServer Pages)和servlet生成的`response`内容。 首先,让我们理解`filter`的基本概念。根据Java Servlet规范,`Filter`接口定义了一系列方法,如`doFilter()`,...

    response in servlet

    2. 过滤(doFilter):每次请求匹配到Filter配置时,都会调用`doFilter(ServletRequest request, ServletResponse response, FilterChain chain)`方法。在这里,我们可以获取并处理Response信息。 3. 销毁(destroy...

    javax.servlet jar包---解决找不到javax.servlet.*等问题

    - `Servlet`: 这是所有Servlet的基类,定义了Servlet的基本行为,如初始化、服务和销毁方法。 - `GenericServlet`: 一个抽象Servlet类,实现了Servlet和ServletConfig接口,提供了一种通用的方法来处理多种协议。 ...

    servlet_filter.rar_Servlet filter_重写filter

    在“servlet_filter.rar”中,描述提到的“重写了servlet”,实际上可能是指开发者自定义了一个Filter类,覆盖了默认的行为。这通常是为了实现特定的功能,比如解决乱码问题。在处理乱码时,Filter可以在请求进入...

    servlet之Filter使用范例--登陆验证

    Servlet是Java提供的一个用于扩展服务器功能的接口,而Filter则是一种动态web资源过滤机制,它允许我们在数据处理流程中进行预处理和后处理,比如登录验证、日志记录、GZIP压缩等。本篇文章将深入探讨如何使用Filter...

    Servlet与jsp与Filter的使用

    5. **禁用默认Servlet**:为了防止用户绕过Filter直接访问资源,需要确保默认Servlet不会暴露未经过滤的资源。 #### 五、示例代码片段 ```java import javax.servlet.*; import javax.servlet....

    servlet filter

    在Servlet规范中,Filter通过实现`javax.servlet.Filter`接口来创建。这个接口定义了三个方法:`init()`, `doFilter()`, 和 `destroy()`。`init()`方法在Filter实例被创建并添加到Filter链中时调用,用于初始化...

    Servlet之Filter深入讲解及实例研究

    多个Filter可以串联起来形成Filter链,每个Filter的`doFilter()`方法会调用`chain.doFilter(request, response)`将请求传递给下一个Filter,直到最后一个Filter将请求转发给目标Servlet。 5. **应用场景** - **...

    使用HttpServletRequestWrapper在filter修改request参数

    标题“使用HttpServletRequestWrapper在filter修改request参数”揭示了主要知识点,即如何在过滤器中通过自定义`HttpServletRequestWrapper` 子类来动态改变请求参数。这通常用于处理如数据验证、安全过滤、参数转换...

    servlet系列之Filter

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest req = (HttpServletRequest) request; ...

    jsp,servlet,filter温故知新

    Filter可以通过`chain.doFilter(request, response)`来将请求传递给下一个Filter或目标资源。 ### 应用场景 - **JSP**:主要用于视图层,展示动态内容,减轻控制器(如Servlet)的压力。 - **Servlet**:作为控制...

    Servlet Filter 实现权限拦截

    本教程将详细解释如何使用Servlet Filter来实现权限拦截。 ### 1. Filter的基本概念 Filter是Servlet API的一部分,定义在`javax.servlet.Filter`接口中。它允许开发者在请求处理链中插入自定义逻辑,如身份验证、...

    servlet与filter实现登录认证

    本文将详细探讨如何使用Servlet和Filter来实现用户登录认证。 Servlet是一种Java编程语言编写的服务器端程序,它扩展了Web服务器的功能,处理来自客户端(如浏览器)的请求,并向客户端发送响应。在登录认证场景中...

    javaweb servlet(两种方式)和 filter的最简单实例

    总结来说,Servlet和Filter是JavaWeb开发中不可或缺的组成部分,它们帮助我们构建灵活、可扩展的Web应用程序。通过理解并熟练掌握这两种技术,我们可以更好地设计和实现高效的Web服务。在这个实例中,`MVC01`项目为...

    servlet 过滤器例子 filter

    在处理完后,通过调用`chain.doFilter(request, response)`将请求传递给下一个过滤器或目标Servlet。 2. `init(FilterConfig config)`: 过滤器初始化时调用,用于设置过滤器的初始化参数。这些参数可以在web.xml中...

    Servlet、Filter、Listener深入理解.docx

    通过Servlet、Filter和Listener,开发者可以构建高度定制化的Web应用程序,实现更精细的控制和扩展性。它们共同构成了Java Web应用的基石,帮助开发者实现诸如会话管理、安全性、性能优化等功能。

    过滤多个servlet

    在`doFilter()`方法中,我们可以添加逻辑来处理请求,然后通过`chain.doFilter(request, response)`将请求传递给下一个Filter或目标Servlet。这就是Filter的基本工作流程。 接下来,我们要实现过滤多个Servlet。在...

    servlet2.4doc

    A filter is an object that performs filtering tasks on either the request to a resource (a servlet or static content), or on the response from a resource, or both. Filters perform filtering in the ...

    Servlet过滤器小实例

    因此,使用Servlet过滤器(Filter)来处理这类问题成为了一种更加优雅的解决方案。 #### 实例目标 本实例的目标是设计并实现一个简单的Servlet过滤器,用于检查用户的登录状态。具体来说,当用户通过正常的登录...

Global site tag (gtag.js) - Google Analytics