在一个非常简单的任务中,我遗漏了一些东西:我必须检查传入的请求inputstream是否被gzip压缩并解压缩其内容。这不需要使用内容类型。我想到了这样的事情:
检查请求是否已gzip:
private boolean isGZIPed( HttpServletRequest request )
{
boolean isGziped = false;
try
{
PushbackInputStream pb = new PushbackInputStream( request.getInputStream(), 2 );
byte[] signature = new byte[2];
pb.read( signature );
pb.unread( signature );
int head = ( (int)signature[0] & 0xff ) | ( ( signature[1] << 8 ) & 0xff00 );
isGziped = GZIPInputStream.GZIP_MAGIC == head;
}
catch( Exception ioe )
{
logger.error(ioe);
}
return isGziped;
}
解压缩它,如果它确实是gzied:
if(isGziped(request)
{
GZIPInputStream gzis = new GZIPInputStream( request.getInputStream() );
InputStreamReader reader = new InputStreamReader( gzis );
...
}
我的问题是,新的GZIPInputStream(request.getInputStream())总是抛出“非gzip格式”异常。我错过了什么?
当您从回推输入流中读取时,您将从请求输入流中删除数据。“取消读取”字节只将它们推送到回推流,而不是底层流。
您应该使用push-back流创建gzip输入流
,以便可以重新读取您读取和推回的字节:
GZIPInputStream gzis = new GZIPInputStream( pb );
这意味着必须在适当的范围内声明回推流。
问题内容: 我刚刚在python上做了gzip的摘要。 而且我在屏幕上没有任何输出。作为python的初学者,我想知道如果要读取gzip文件中文件的内容该怎么办。谢谢。 问题答案: 尝试像这样通过gzip库压缩一些数据… …然后按照发布的代码运行… 这种方法对我有用,因为某些原因,gzip库无法读取某些文件。
问题内容: 嗨,就像标题说的那样,我正在尝试从Java Servlet读取数组。我正在尝试读取Java脚本文件中的数组。 Java Servlet代码:字符串graphData [] = dbHandler.select(attributes); //用数据库中的数据填充数组。request.setAttribute(“ graphData”,graphData); 我尝试了所有这些选项,但没有一
问题内容: 我在JBOSS中有一个客户端服务器通信方案,并且在浏览器中作为客户端( JAVA PROGRAM )。最初在建立连接时,客户端将其证书发送到服务器。服务器从证书中提取客户端的公钥,因此通信将继续。 现在我的问题是 如何将证书(.cer)从客户端发送到服务器? 如何在服务器中接收证书并提取其公钥? 问题答案: 如何将证书(.cer)从客户端发送到服务器? 客户端证书(.cer,.crt,
Vaadin dev ticket#9505说,已经添加了方法来获取当前的VaadinServlet、VaadinPortlet等等。 然而,我在类文档中没有看到任何这样的方法。例如,这两个页面: https://vaadin.com/api/com/vaadin/server/VaadinServletRequest.html https://vaadin.com/api/com/vaadin/
问题内容: 我正在将jQuery AJAX POST发布到Servlet,并且数据采用JSON字符串的形式。它已成功发布,但在Servlet端,我需要将这些键- 值对读入Session Object并将其存储。我尝试使用JSONObject类,但无法获取它。 这是代码段 在Servlet方面 问题答案: 您实际上并没有解析json。