`
weaveph
  • 浏览: 2291 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

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

 
阅读更多
很简单的应用:客户端将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"));
			}
		};
	}
分享到:
评论

相关推荐

    原理讲解-ServletInputStream.readLine(byte[] b, int off, int len) 方法

    需要注意的是,由于 `readLine()` 方法默认是以换行符(通常是 `\n` 或 `\r\n`)作为一行的分隔,所以在处理跨平台文件上传时,可能需要考虑到不同操作系统对换行符的不同处理方式。 在给定的测试案例中,上传的...

    springboot 解决InputStream只能读取一次的问题

    `ServletRequestWrapper`是Spring对Servlet规范中的`HttpServletRequest`接口的包装类,它允许我们对原始请求进行包装,以便于扩展和修改其行为。我们可以创建一个自定义的`HttpServletRequestWrapper`子类,重写`...

    java filter打印请求返回参数

    3. **配置Filter**:在`web.xml`中配置自定义的Filter,确保其在请求处理链中执行。 4. **解决乱码问题**:通过设置响应输出流的字符集编码来避免乱码。 #### 三、具体实现细节 ##### 1. 封装`HttpServletRequest...

    调用GZip解压缩操作

    ### GZip解压缩操作知识点详解 #### 一、GZip简介 GZip是一种广泛使用的文件压缩格式,基于GNU项目发布,适用于数据传输和存储时的数据压缩处理。它使用了Deflate算法来压缩数据,该算法结合了哈夫曼编码与LZ77算法...

    JAVA文件压缩与解压缩实践(源代码+论文)

    在Java编程语言中,文件的压缩与解压缩是常见的数据处理操作,特别是在数据传输、存储优化和备份场景中。本实践项目围绕这个主题展开,包括源代码和相关的论文,为学习者提供了深入理解和应用Java压缩库的机会。以下...

    GZip,BZip2,Zip对DataTable,DataSet压缩转换XML

    在实际应用中,可能还需要考虑错误处理、性能优化(如使用缓冲区)和文件持久化(将压缩后的数据写入磁盘文件)。例如,你可以创建一个通用的方法,接受一个XML字符串、压缩算法和输出文件路径作为参数,以实现完整...

    基于Java的实例源码-用GZIP压缩解压文件.zip

    在Java编程语言中,GZIP是一种常用的文件压缩格式,它基于DEFLATE算法,能够有效地减少文件大小,便于存储和传输。本实例源码着重展示了如何使用Java API进行GZIP压缩和解压缩文件操作。接下来,我们将深入探讨相关...

    J2ME GZIP压缩开源包

    在平时的开发中,我们会碰到数据量过大的问题,为了解决这个问题,我们可以用GZIP处理方式,J2ME本身没有提供GZIP压缩,但可以利用一些开源包。 上面此句用于解压GZIP,至是否要转换成DataInputStream还是...

    c# Sharp 压缩与解压缩 _Dll

    在IT行业中,C# Sharp是一种常用的编程语言,其强大的功能和简洁的语法使得开发者能够创建高效的应用程序。本文将深入探讨C# Sharp中关于压缩与解压缩的实现,特别是通过DLL(动态链接库)文件来增强这方面的功能。 ...

    java-servlet-api.doc

    Servlet引擎载入Servlet后,Servlet引擎必须对Servlet进行初始化,在这一过程中,你可以读取一些固定存储的数据、初始化JDBC的连接以及建立与其他资源的连接。 在初始化过程中,javax.servlet.Servlet接口的init()...

    Jsp_Servlet_中文API档

    ServletException是所有Servlet相关异常的基类,表示在Servlet处理过程中发生的错误。 **十二、UnavailableException类** UnavailableException表明Servlet无法提供服务,可能是因为缺少资源或初始化失败。 **第二...

    c#动态解压缩方法

    在C#编程环境中,动态解压缩文件是一项常见的需求,特别是在Unity这样的跨平台开发环境中。本文将详细介绍如何使用C#和开源库SharpZipLib来实现动态解压缩功能。 SharpZipLib是一个强大的C#库,它提供了对ZIP、GZip...

    JAVA文件压缩与解压缩实践的实现.rar

    Java文件压缩与解压缩实践是指利用Java编程语言实现对文件或文件夹进行压缩和解压缩操作。以下是该实践的描述: 技术概述: Java文件压缩与解压缩是指将一个或多个文件或文件夹打包成一个压缩文件,或者将压缩文件...

    javax.servlet.jar下载

    Files contained in javax.servlet.jar: META-INF/MANIFEST.MF javax/servlet/http/LocalStrings.properties javax.servlet.http.HttpSessionBindingListener.class javax.servlet....

    j2me zip 压缩及解压,不支持gzip格式

    本文将深入探讨如何在J2ME环境中利用ZIP格式进行文件的压缩和解压缩,同时会强调J2ME对gzip格式的不支持。 首先,我们需要了解ZIP和GZIP两种文件压缩格式的基本差异。ZIP是一种广泛使用的文件存档格式,可以包含一...

    C#实现文件的压缩和解压缩

    - GZIP是一种速度较快但压缩率相对较低的算法,它常用于需要快速压缩和解压缩的情况,例如在网络传输中。 - 在SharpZipLib中,GZIP相关的类位于`ICSharpCode.SharpZipLib.GZip`命名空间内。通过创建`...

    GZip文件打包RAR

    总的来说,`GZip.cs`文件很可能是实现GZip压缩和解压缩功能的代码,它为开发者提供了一个简单易用的接口,用于在C#应用程序中处理GZip格式的压缩文件。通过理解和利用这样的工具,开发者可以在各种场景下有效地管理...

    基于JAVA的文件压缩与解压缩工具设计与实现

    在Java编程语言中,设计和实现一个文件压缩与解压缩工具涉及到多个核心概念和技术。首先,我们需要理解文件I/O操作,这是任何文件处理程序的基础。Java提供了`java.io`包,其中包含各种类用于读写文件,如`File`, `...

    servlet-api-2.4.jar.zip

    javax.servlet.Filter javax.servlet.Servlet javax.servlet.FilterChain javax.servlet.http.Cookie javax.servlet.FilterConfig javax.servlet.ServletConfig javax.servlet.GenericServlet javax.servlet....

    Servlet中文2API.docx

    - `ServletException`和`UnavailableException`是Servlet相关的异常类型,前者通常表示Servlet在执行过程中遇到的问题,后者则表示Servlet无法提供服务,可能是由于缺少资源或配置错误。 在实际开发中,Servlet ...

Global site tag (gtag.js) - Google Analytics