生产中的ServletRequestWrapper或ServletResponseWrapper?
您有没有看到在生产环境中扩展HttpServletResponseWrapper
/ HttpServletRequestWrapper
或ServletRequestWrapper
/ ServletResponseWrapper
任何有用的东西?
- 从生成的HTML中修剪空白 ,可以节省超过50%的带宽。 我有一个项目显示大表格数据(具有很好的缩进HTML源代码),响应大小从大约200KB到大约70KB只需修剪所有空格。
- 通过将多部分表单数据放回请求参数映射中来透明地处理multipart / form-data请求,以便您可以使用
request.getParameter()
并再次采用常规方式( Servlet <= 2.5示例 , Servlet> = 3.0示例 )。 - 捕获输出流,要么拥有副本 ,要么对MD5进行哈希处理。
- 禁用URL重写 。
Etcetera .. Etcetera ..所有只是为了覆盖和更改某些HttpServletRequest
/ HttpServletResponse
方法的默认行为。
我用它来“捕获”JSP的输出,这样它就可以被转发控制器转换。 这是通过重写getWriter()
/ getOutputStream()
方法完成的。
SiteMesh做了类似的事情,捕获“目标”以装饰响应。
我们用它来
-
覆盖
getRemoteAddr()
以从X-Forwarded-For
或X-Real-IP
返回值(由我们的nginx代理设置) -
过滤某些标头,例如,以避免第三方servlet中的内容协商
-
gzip响应
-
许多框架(richfaces,myfaces至少在我当前的类路径上)使用请求包装器来处理多部分请求
-
Spring有
ContextExposingHttpServletRequest
因此spring bean可以作为请求属性访问。 -
myfaces orchestra使用响应包装器重写URL以确保多窗口对话上下文
我最近才使用它来捕获传出响应头以进行调试( getHeaderNames()
和getHeader()
仅在Servlet 3.0规范的响应端添加。
我们还使用它来收集servlet上的指标,通过重写getOutputStream()
来返回一个OutputStream
实现,该实现在通过它的每个字节上增加一个计数器,这样我们就可以知道我们的高网络流量servlet是什么。