为什么使用HttpServletResponseWrapper直接扩展HttpServletResponse

时间:2010-10-10 05:51:15

标签: java servlets

我正在看装饰器HttpServletResponseWrapper,我想知道使用这个包装器对简单地扩展HttpServletResponse并覆盖你需要的东西有什么好处?使用这个中间包装器只需委托其所有方法有什么好处?

THX

3 个答案:

答案 0 :(得分:4)

如果您主要包装另一个HttpServletResponse,它可以避免实施大量样板文件。但更重要的是,这意味着当在httpServletResponse接口上使用新方法发布新版JavaEE规范时,过滤器仍然有效,而不是在运行时(和编译时)失败,因为您没有实现新界面。

答案 1 :(得分:2)

HttpServletResponse是一个接口,* Wrapper是一个实现该接口的类。

通过扩展* Wrapper,您不必实现所有锅炉板,只需要几个位。

答案 2 :(得分:2)

虽然@Cayy的回答是正确的,但这不是包装类的最重要原因。

Servlet规范说如果你在servlet / filter / JSP中转发请求或响应,那么请求和响应对象必须是容器最初传入的相同请求/响应对象,或者必须是它们周围的包装器,使用提供的包装类。

因此,对于想要覆盖所提供的请求/响应对象行为的过滤器,他们需要扩展包装器,而不是仅仅从接口创建新的请求/响应类。

请注意,某些servlet容器(例如旧版本的Tomcat)忽略了规范的这一部分。