Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 正在寻找HttpServletResponseWrapper的捕获impl_Java_Servlets - Fatal编程技术网

Java 正在寻找HttpServletResponseWrapper的捕获impl

Java 正在寻找HttpServletResponseWrapper的捕获impl,java,servlets,Java,Servlets,JavaEE API附带了HttpServletResponseWrapper,引用javadoc,“它提供了HttpServletResponse接口的一个方便实现,开发人员可以对该接口进行子类化,以适应来自Servlet的响应。”在没有子类化的情况下,该类只会将所有调用传递给包装好的响应对象。有一个类似的请求包装器 有人能告诉我提供这些类的有用子类实现的实用程序库吗?特别是,我正在寻找响应包装器的一个子类,它捕获书面响应(作为字符串、字节[],任何合适的形式),并通过API方法公开它 我自己

JavaEE API附带了HttpServletResponseWrapper,引用javadoc,“它提供了HttpServletResponse接口的一个方便实现,开发人员可以对该接口进行子类化,以适应来自Servlet的响应。”在没有子类化的情况下,该类只会将所有调用传递给包装好的响应对象。有一个类似的请求包装器

有人能告诉我提供这些类的有用子类实现的实用程序库吗?特别是,我正在寻找响应包装器的一个子类,它捕获书面响应(作为字符串、字节[],任何合适的形式),并通过API方法公开它


我自己写了一个相当不成熟的版本,但坦率地说,我不应该这样做,我宁愿扔掉它,使用现成的版本。

过去我使用的是spring框架中提供的对象。特别是,这应该是可行的:

我不知道有任何实现,即使只需将gzip示例写入ByteArrayOutputStream就可以轻松地进行修改。您还可以在以下位置查看其他响应包装器实现:

  • 也使用它
原始答案:

JavaWorld中有一篇经典文章。您可以找到包装请求和响应的示例:


代码有点旧(2001年6月!),但它很好地演示了用法。

是的,我试过了,但是MockHttpServletResponse没有扩展HttpServletResponseWrapper,对这个任务没有用。哦,对了,这有点有趣,感谢您的澄清。我已经有了一个满足我当前需求的实现,我只是在哀叹缺少一个实用程序库来为我实现它。
public class CompressionResponseWrapper extends HttpServletResponseWrapper {
  protected ServletOutputStream stream = null;
  protected PrintWriter writer = null;
  protected int threshold = 0;
  protected HttpServletResponse origResponse = null;
  public CompressionResponseWrapper(HttpServletResponse response) {
super(response);
origResponse = response;
  }
  public void setCompressionThreshold(int threshold) {
this.threshold = threshold;
  }
  public ServletOutputStream createOutputStream() throws IOException {
return (new CompressionResponseStream(origResponse));
  }
  public ServletOutputStream getOutputStream() throws IOException {
if (writer != null) {
  throw new IllegalStateException("getWriter() has already been " +
                                  "called for this response");
}
if (stream == null) {
  stream = createOutputStream();
}
((CompressionResponseStream) stream).setCommit(true);
((CompressionResponseStream) stream).setBuffer(threshold);
return stream;
  }
  public PrintWriter getWriter() throws IOException {
if (writer != null) {
  return writer;
}
if (stream != null) {
  throw new IllegalStateException("getOutputStream() has already " +
                                  "been called for this response");
}
stream = createOutputStream();
((CompressionResponseStream) stream).setCommit(true);
((CompressionResponseStream) stream).setBuffer(threshold);
writer = new PrintWriter(stream);
return writer;
  }
}
public class MultipartWrapper extends HttpServletRequestWrapper {
  MultipartRequest mreq = null;
  public MultipartWrapper(HttpServletRequest req, String dir)
                                 throws IOException {
super(req);
mreq = new MultipartRequest(req, dir);
  }
  // Methods to replace HSR methods
  public Enumeration getParameterNames() {
return mreq.getParameterNames();
  }
  public String getParameter(String name) {
return mreq.getParameter(name);
  }
  public String[] getParameterValues(String name) {
return mreq.getParameterValues(name);
  }
  public Map getParameterMap() {
Map map = new HashMap();
Enumeration enum = getParameterNames();
while (enum.hasMoreElements()) {
  String name = (String) enum.nextElement();
  map.put(name, mreq.getParameterValues(name));
}
return map;
  }
  // Methods only in MultipartRequest
  public Enumeration getFileNames() {
return mreq.getFileNames();
  }
  public String getFilesystemName(String name) {
return mreq.getFilesystemName(name);
  }
  public String getContentType(String name) {
return mreq.getContentType(name);
  }
  public File getFile(String name) {
return mreq.getFile(name);
  }
}