java - 为什么我在 try catch JSP 输出时无法包装 ServletRequest

标签 java google-app-engine jsp servlets

我正在尝试将 servlet 请求处理程序分派(dispatch)到 JSP 处理器并捕获它的内容。

我为 ServletRequest 和 ServletResponse 提供包装器实例,它们实现了相应的 HTTPServletRequest/-Response 接口(interface),因此它们应该是直接替换。当前所有方法都传递给原始 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 容器给出的原始请求。

有谁知道为什么这不适用于我的包装器?

更新: 我正在 google app engine 开发环境中尝试此操作,该环境使用 servlet 容器 IIRC 的 geronimo 实现

最佳答案

好的,找到问题了...

我已经用我自己的实现替换了与属性相关的函数。这就是 jsp 处理器返回空结果的原因(没有任何错误消息...)

因此,如果您想使用请求调度程序,那么在 ServletRequest Wrappers 中执行此操作是一个坏主意:

 private Map<String, Object> attributes = new HashMap<String, Object>();
 ...

 public Object getAttribute(String string) {
    return attributes.get(this);
  }

  public Enumeration<String> getAttributeNames() {
    return (Enumeration<String>) attributes.keySet();
  }

  public void setAttribute(String string, Object o) {
    attributes.put(string, o);
  }

  public void removeAttribute(String string) {
    attributes.remove(string);
  }

没有这些行它也可以工作。也许这对尝试类似事情的人有帮助......

关于java - 为什么我在 try catch JSP 输出时无法包装 ServletRequest,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2620799/

相关文章:

spring - 迁移到 Spring 4.2.4 后出现 AccessControlException

google-app-engine - Google App Engine 中 Sandbar 或 Ring session 的简单示例

javascript - jsp 文件的内容类型是什么?

java - 在 JTable 上禁用 CTRL+C(双击单元格后)

java - Sparql 删除语句 Jena OWL

html - 模板解析错误 - "operation not permitted"

java.sql.SQLException : [Oracle][ODBC][Ora]ORA-01008: not all variables bound

java - 如何将 "warning"消息从 Service/DAO 传递到 UI?

java - 父类和实现接口(interface)中同名的静态和非静态方法

java - 安装7BEE(java构建工具)