【发布时间】:2011-02-06 22:14:43
【问题描述】:
我正在尝试将 servlet 请求处理程序分派到 JSP 处理器并捕获它的内容。
我正在为 ServletRequest 和 ServletResponse 提供包装器实例,它们实现了相应的 HTTPServletRequest/-Response 接口,因此它们应该是替代品。所有方法当前都传递给原始的 Servlet Request 对象(我计划很快修改其中的一些)。此外,我还介绍了一些新方法。 (如果想看代码:http://code.google.com/p/gloudy/source/browse/trunk/gloudyPortal/src/java/org/gloudy/gloudlet/impl/RenderResponseImpl.java)
HttpServletResponse 使用自己的输出流来捕获输出。
当我尝试打电话时
request.getRequestDispatcher("/WEB-INF/views/test.jsp").include(request, response);
使用我的请求和响应包装器,该方法返回并且没有捕获任何内容。当我尝试传递原始请求对象时,它起作用了!但从长远来看,这不是我所需要的......
request.getRequestDispatcher("/WEB-INF/views/test.jsp").include(request.getServletRequest(), response);
这行得通。 getservletRequest() 返回由 servlet 容器提供的原始请求。
有人知道为什么这不适用于我的包装器吗?
更新: 我正在谷歌应用引擎开发环境中尝试这个,它使用 geronimo 实现 servlet 容器 IIRC
【问题讨论】:
-
我很难理解/看到问题。要捕获 JSP 输出,您通常只需包装响应并覆盖其
getWriter()和getOutputStream()。您根本不需要触摸请求。还有更多的事情。你运行调试器了吗? -
我已经包装了请求,因为我正在引入(或者我正在尝试引入)类似于渲染参数的东西。我将为每个页面呈现处理一些 jsp 页面和 servlet,因此我想包装原始请求和响应对象以防止“页面片段 servlet”内的更改。调试器对我没有帮助,因为我还没有找到 google app engine servlet 容器代码的源代码... :-(
标签: java google-app-engine jsp servlets