生产中的ServletRequestWrapper或ServletResponseWrapper?

时间:2010-02-17 08:13:40

标签: java servlets

您是否看到在生产环境中延伸HttpServletResponseWrapper / HttpServletRequestWrapperServletRequestWrapper / ServletResponseWrapper非常有用的内容?

5 个答案:

答案 0 :(得分:3)

我用它来“捕获”JSP的输出,以便转发控制器可以对其进行转换。这是通过覆盖getWriter() / getOutputStream()方法完成的。

SiteMesh执行类似的操作,捕获“目标”以装饰响应。

答案 1 :(得分:3)

    来自生成的HTML的
  • Trim whitespace可以节省超过50%的带宽。我有一个显示大表格数据的项目(包含很好的缩进HTML源代码),只需修剪所有空格,响应大小从大约200KB到大约70KB。
  • 通过将多部分表单数据放回请求参数映射中来透明地处理多部分/表单数据请求,以便您可以使用request.getParameter()并再次采用常规方式(Servlet <=2.5 exampleServlet >=3.0 example
  • 捕获输出流,要么拥有copy,要么MD5-hash
  • Disabling URL rewriting

Etcetera .. Etcetera ..只是为了覆盖和更改某些HttpServletRequest / HttpServletResponse方法的默认行为。

答案 2 :(得分:2)

我们用它来

  • 覆盖getRemoteAddr()以返回X-Forwarded-ForX-Real-IP的值(由我们的nginx代理设置)

  • 过滤某些标题,例如避免第三方servlet中的内容协商

  • gzip回复

答案 3 :(得分:2)

  • 许多框架(richfaces,myfaces至少在我当前的类路径上)使用请求包装器来处理多部分请求

  • Spring有ContextExposingHttpServletRequest,因此可以将spring bean作为请求属性访问。

  • myfaces orchestra使用响应包装器重写URL以确保多窗口对话上下文

答案 4 :(得分:2)

我最近才使用它来捕获传出响应头以进行调试(getHeaderNames()getHeader()仅在Servlet 3.0规范的响应端添加。

我们还使用它来收集我们的servlet上的指标,方法是重写getOutputStream()以返回OutputStream实现,这会在每个通过它的字节上增加一个计数器,这样我们就可以知道我们的高点了-network-traffic servlets是。