如何在Filter中对ServletInputStream处理后(例如解Gzip压缩)让后续Servlet能够getParameter得到参数?

weaveph 2009-10-26 05:32:47
很简单的应用:客户端将XML报文用GZIP压缩后通过两个Parameter发送到服务器,用的POST方法,一个Parameter是“head”一个是“body”。我写了一个Filter来对request中的InputStream做解压动作。但是在Filter里面调用了request.getInputStream()方法后,接下来将request送给Servlet以后,request.getParameter("head")就取不到值了,但是request.getInputStream()能够取到解压后的InputStream。怎样才能让后续Servlet能够request.getParameter("head")取到值呢?

	public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
req = getServletRequest(req);
chain.doFilter(req, response);
}

private HttpServletRequest getServletRequest(
final HttpServletRequest pRequest) {

return new HttpServletRequestWrapper(pRequest) {

public int getContentLength() {
return -1;
}

public ServletInputStream getInputStream() throws IOException {
final InputStream in = new GZIPInputStream(pRequest
.getInputStream());

return new ServletInputStream() {
public int read() throws IOException {
return in.read();
}

public void close() throws IOException {
in.close();
}
};
}

public BufferedReader getReader() throws IOException {
return new BufferedReader(new InputStreamReader(
getInputStream(), "UTF-8"));
}
};
}
...全文
117 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
lylsias 2011-12-13
  • 打赏
  • 举报
回复
帮忙顶一下 我也碰见这样的需求了
a47313198 2009-11-26
  • 打赏
  • 举报
回复
帮顶
weaveph 2009-10-28
  • 打赏
  • 举报
回复
顶一下

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧