- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有以下过滤器:
@WebFilter( filterName = "myfilter" )
public class WebCacheFilter implements Filter {
@Override
public void init( FilterConfig filterConfig ) {}
@EJB
AppExceptionLogger logger;
@Override
public void doFilter( ServletRequest req, ServletResponse res, final FilterChain chain )
throws IOException, ServletException {
final HttpServletRequest request = ( HttpServletRequest )req;
final HttpServletResponse response = ( HttpServletResponse )res;
execute( new StreamAction<ByteArrayOutputStream>() {
@Override
public void doAction( ByteArrayOutputStream stream ) throws Exception {
chain.doFilter( request, new ProxiedServletResponse( response, stream ) );
response.getOutputStream()
.write( stream.toByteArray() );
}
} );
}
@Override
public void destroy() {}
private void execute( StreamAction<ByteArrayOutputStream> action ) throws IOException {
ByteArrayOutputStream stream = new ByteArrayOutputStream();
try {
action.doAction( stream );
} catch ( Exception e ) {
logger.logInternal( e );
} finally {
stream.close();
}
}
}
在 web.xml 中映射为
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<filter-mapping>
<filter-name>myfilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
ProxiedServletResponse 类来自这里:https://github.com/FagnerMartinsBrack/Servlet-GZIP-Compression/blob/95f4bac01e5037ea403f502819d3e74f66ef1ad0/src/main/java/com/fagnerbrack/servlet/gzip/proxy/ProxiedServletResponse.java
下面是test.jsp
文件内容:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<title>Página de teste</title>
<!-- Descrição do sistema -->
<meta name="description" content="">
<!-- Ajusta o conteúdo de acordo com o tamanho da tela em aparelhos mobile -->
<meta name="viewport" content="width=device-width">
</head>
<body>
test page
</body>
</html>
当我尝试访问\webapp\test.jsp
时文件浏览器不打印任何内容。看来response.getOutputStream().write( stream.toByteArray() );
部分不工作。这是为什么?
注意:如果您尝试访问类似 /static/js/jquery.js
的 JavaScript 文件它加载正确。只有 JSP 文件没有加载。
注2:在baos.toByteArray()
中对于 JSP 文件,ByteArrayOutputStream 的部分长度为 0 (!!!)
最佳答案
JSP 写入 getWriter()
,而不是 getOutputStream()
。在 getWriter()
中,您将 ByteArrayInputStream
包装在 PrintWriter
中。 PrintWriter
有一个 8K 字符缓冲区。 JSP 显然小于 8K 字符。在获取写入的 byte[]
之前,您永远不会对 PrintWriter
的缓冲区进行 flush()
处理,因此它永远不会写入包装的 >ByteArrayInputStream
。
你需要冲洗那个母狗。替换
chain.doFilter(request, new ProxiedServletResponse(response, stream));
response.getOutputStream().write(stream.toByteArray());
由
HttpServletResponse proxiedResponse = new ProxiedServletResponse(response, stream);
chain.doFilter(request, proxiedResponse);
proxiedResponse.flushBuffer();
response.getOutputStream().write(stream.toByteArray());
关于java - 未使用过滤器和 ByteArrayOutputStream 写入响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25391418/
我需要合并两个ByteArrayOutputStream并传递给xdo api TemplateHelper.processTemplate以生成报告 编写以下代码是为了在两个 ByteArrayOu
这个问题在这里已经有了答案: Java - Is ByteArrayOutputStream safe without flush() and close()? (3 个答案) 关闭 6 年前。 有
我在将文件上传到google drive时遇到这个问题,我正在将录制的音频上传到google drive,当时出现了这个异常 用于写入文件内容的代码 Out
我有一堆ByteArrayOutputstreams,在这些流上可以根据特定工作流程的不同部分编写 pdf 报告。我使用 IText 来完成此任务。现在,最后我想将所有这些单个 ByteArrayOu
在下面的函数中,我遇到了数组越界问题。它应该将数字字符串转换为 BCD 格式,如下所示: "12345"-> 0x01 0x23 0x45 。字符串的长度未知。 public void Stringt
我正在编写一个应用程序,它有一个方法可以从我的服务器下载文本文件。该文本文件将包含约 1,000 个代理 IP。下载每 10 分钟进行一次。我需要找到最有效的方法来做到这一点。 目前,我在名为 Con
我是 MQTT 和 Android 开放附件“AOA” 的新手。在阅读教程时,我意识到,在尝试写入 ByteArrayOutputStream 类型的变量之前,应该写入 0 或 0x00首先到该变量。
可以将ByteArrayOutputStream存储到其他容器中,例如HashMap吗? 如果不是,我如何合并所有流,然后按条目压缩存档到 1 个文件中。 public class CFr { p
我正在开发一个与签名板交互的小程序。签名板 API 有一个返回 BufferedImage 的函数(假设其名为 API_CALL_TO_RETURN_BUFFERED_IMAGE())。我可以编码为
我有一个用这种方法压缩的目录: public byte[] archiveDir(File dir) { try(ByteArrayOutputStream bos = new ByteA
好的,所以我想要的是将字节写入 dataouptustream 并将该输出流发送出去。这一切我都可以做得很好。我遇到的问题是如何在字节内写入各个位,例如: 我想将LSB(0)写为1,然后剩余的1-7位
我正在编写一个简单的客户端-服务器应用程序,我希望能够获取 Header 类的属性,将它们转换为 byte[],将它们发送到其他主机,然后将它们转换回很容易解析标题。我使用 ByteArrayOutp
我有一个 XmlObject,它具有我需要的正确值。例如:1½-2Y 但是当我尝试将其转换为流字节时,我看到的结果是 1½-2Y。 示例代码: import org.apache.xmlbeans.X
我提出了一个新问题,因为这与我上一个帖子不同。我现在更确切地知道问题是什么。 我创建一个新的 bytearrayoutputstream ByteArrayOutputStream byteArray
我创建了 ByteArrayOutputStream barr = new ByteArrayOutputStream(1);,即容量为 1 个字节并写入超过 1 个字节 barr.write("12
在我从网站下载 RSS 提要数据后,我遇到了编码问题。某些字符无法正确解释。我使用 HttpResponse.getEntity() 并放入循环读取 inputStream 并写入 ByteArray
我使用了非常有用的 ByteArrayOutputStream,但是对于我的需要来说,限制太大了(即我正在处理 +-32,768 范围内的数字) 这是我要使用它的代码: ByteArrayOutput
我有: ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); encoder.encode(question, outpu
我想从进程的输出和错误流中读取并将它们合并到一个文本流中。我的程序是常规的,读起来像这样: def mergeStream = new ByteArrayOutputStream() process.
我需要将多个图像添加到输出流并在 JSF 中显示这些图像。 Ex 代码: List images = list of inputstream - each image is one input str
我是一名优秀的程序员,十分优秀!