我正在看装饰器HttpServletResponseWrapper,我想知道使用这个包装器对简单地扩展HttpServletResponse并覆盖你需要的东西有什么好处?使用这个中间包装器只需委托其所有方法有什么好处?
THX
答案 0 :(得分:4)
如果您主要包装另一个HttpServletResponse
,它可以避免实施大量样板文件。但更重要的是,这意味着当在httpServletResponse
接口上使用新方法发布新版JavaEE规范时,过滤器仍然有效,而不是在运行时(和编译时)失败,因为您没有实现新界面。
答案 1 :(得分:2)
HttpServletResponse是一个接口,* Wrapper是一个实现该接口的类。
通过扩展* Wrapper,您不必实现所有锅炉板,只需要几个位。
答案 2 :(得分:2)
虽然@Cayy的回答是正确的,但这不是包装类的最重要原因。
Servlet规范说如果你在servlet / filter / JSP中转发请求或响应,那么请求和响应对象必须是容器最初传入的相同请求/响应对象,或者必须是它们周围的包装器,使用提供的包装类。
因此,对于想要覆盖所提供的请求/响应对象行为的过滤器,他们需要扩展包装器,而不是仅仅从接口创建新的请求/响应类。
请注意,某些servlet容器(例如旧版本的Tomcat)忽略了规范的这一部分。