一般的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
分享到:
相关推荐
在Filter的`doFilter()`方法中,我们通常会调用`chain.doFilter(request, response)`来将请求传递给下一个Filter或目标Servlet。这样,一个Filter链可以按照定义的顺序依次处理请求。 回到主题,"简单的servlet+...
本篇我们将深入探讨如何使用`filter`来修改JSP(JavaServer Pages)和servlet生成的`response`内容。 首先,让我们理解`filter`的基本概念。根据Java Servlet规范,`Filter`接口定义了一系列方法,如`doFilter()`,...
2. 过滤(doFilter):每次请求匹配到Filter配置时,都会调用`doFilter(ServletRequest request, ServletResponse response, FilterChain chain)`方法。在这里,我们可以获取并处理Response信息。 3. 销毁(destroy...
- `Servlet`: 这是所有Servlet的基类,定义了Servlet的基本行为,如初始化、服务和销毁方法。 - `GenericServlet`: 一个抽象Servlet类,实现了Servlet和ServletConfig接口,提供了一种通用的方法来处理多种协议。 ...
在“servlet_filter.rar”中,描述提到的“重写了servlet”,实际上可能是指开发者自定义了一个Filter类,覆盖了默认的行为。这通常是为了实现特定的功能,比如解决乱码问题。在处理乱码时,Filter可以在请求进入...
Servlet是Java提供的一个用于扩展服务器功能的接口,而Filter则是一种动态web资源过滤机制,它允许我们在数据处理流程中进行预处理和后处理,比如登录验证、日志记录、GZIP压缩等。本篇文章将深入探讨如何使用Filter...
5. **禁用默认Servlet**:为了防止用户绕过Filter直接访问资源,需要确保默认Servlet不会暴露未经过滤的资源。 #### 五、示例代码片段 ```java import javax.servlet.*; import javax.servlet....
在Servlet规范中,Filter通过实现`javax.servlet.Filter`接口来创建。这个接口定义了三个方法:`init()`, `doFilter()`, 和 `destroy()`。`init()`方法在Filter实例被创建并添加到Filter链中时调用,用于初始化...
多个Filter可以串联起来形成Filter链,每个Filter的`doFilter()`方法会调用`chain.doFilter(request, response)`将请求传递给下一个Filter,直到最后一个Filter将请求转发给目标Servlet。 5. **应用场景** - **...
标题“使用HttpServletRequestWrapper在filter修改request参数”揭示了主要知识点,即如何在过滤器中通过自定义`HttpServletRequestWrapper` 子类来动态改变请求参数。这通常用于处理如数据验证、安全过滤、参数转换...
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest req = (HttpServletRequest) request; ...
Filter可以通过`chain.doFilter(request, response)`来将请求传递给下一个Filter或目标资源。 ### 应用场景 - **JSP**:主要用于视图层,展示动态内容,减轻控制器(如Servlet)的压力。 - **Servlet**:作为控制...
本教程将详细解释如何使用Servlet Filter来实现权限拦截。 ### 1. Filter的基本概念 Filter是Servlet API的一部分,定义在`javax.servlet.Filter`接口中。它允许开发者在请求处理链中插入自定义逻辑,如身份验证、...
本文将详细探讨如何使用Servlet和Filter来实现用户登录认证。 Servlet是一种Java编程语言编写的服务器端程序,它扩展了Web服务器的功能,处理来自客户端(如浏览器)的请求,并向客户端发送响应。在登录认证场景中...
总结来说,Servlet和Filter是JavaWeb开发中不可或缺的组成部分,它们帮助我们构建灵活、可扩展的Web应用程序。通过理解并熟练掌握这两种技术,我们可以更好地设计和实现高效的Web服务。在这个实例中,`MVC01`项目为...
在处理完后,通过调用`chain.doFilter(request, response)`将请求传递给下一个过滤器或目标Servlet。 2. `init(FilterConfig config)`: 过滤器初始化时调用,用于设置过滤器的初始化参数。这些参数可以在web.xml中...
通过Servlet、Filter和Listener,开发者可以构建高度定制化的Web应用程序,实现更精细的控制和扩展性。它们共同构成了Java Web应用的基石,帮助开发者实现诸如会话管理、安全性、性能优化等功能。
在`doFilter()`方法中,我们可以添加逻辑来处理请求,然后通过`chain.doFilter(request, response)`将请求传递给下一个Filter或目标Servlet。这就是Filter的基本工作流程。 接下来,我们要实现过滤多个Servlet。在...
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过滤器(Filter)来处理这类问题成为了一种更加优雅的解决方案。 #### 实例目标 本实例的目标是设计并实现一个简单的Servlet过滤器,用于检查用户的登录状态。具体来说,当用户通过正常的登录...