WebLogic“超出规定的内容长度"错误 [英] WebLogic "Exceeded stated content length" Error

查看:49
本文介绍了WebLogic“超出规定的内容长度"错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个 servlet 过滤器,它在 WebLogic 10.0 中生成超出规定的内容长度"错误.我将不胜感激任何解决此问题的建议.详情如下.

I have a servlet filter that is generating "Exceeded stated content length" errors in WebLogic 10.0. I would appreciate any suggestions to fix this issue please. Details as follows.

servlet 过滤器调整图像大小.发生此错误,然后将 FileInputStream(从磁盘)写入 response.getOutputStream() 的内容:

The servlet filter resizes images. This error is occurring then writing the contents a FileInputStream (from disk) to response.getOutputStream() :

java.net.ProtocolException:超出规定的内容长度 2228在 weblogic.servlet.internal.ChunkOutput.writeStream(ChunkOutput.java:411)

查看此消息的末尾以获取完整的堆栈跟踪.

See the end of this message for the full stack trace.

我们的环境是带有 Java 1.5 的 WebLogic 10.0(在 Windows XP 上).但是,我们已经在 Tomcat 6、Java 1.6 上使用这个相同的 servlet 过滤器一年多了,所以没有任何问题.此外,我们确实使用 WebLogic 8.1 成功测试了该 servlet 过滤器的先前版本.

Our environment is WebLogic 10.0 with Java 1.5 (on Windows XP). However, we have been using this same servlet filter on Tomcat 6, Java 1.6 for over a year so without any problems. Also, we did successfully test a previous version of this servlet filter with WebLogic 8.1.

堆栈跟踪错误中说明的内容长度确实与磁盘上源文件的大小准确匹配.所以,我不知道内容长度怎么变得太大了.

The content lengths stated in the stack trace errors do accurately match the sizes of the source files on disk. So, I don't know how the content length is getting too large.

加载 6 个图像后出现错误,每个图像大小约为 2kB.所以,我确实想知道这个问题是否与我收集的 WebLogic 响应缓冲区大小有关,我收集的大约为 12 kB.

The errors occur after loading 6 images each about 2kB in size. So, I did wonder if the issue might be related to the WebLogic response buffer size which I gather is about 12 kB.

我尝试使用 response.setBufferSize() 方法增加响应缓冲区大小.但是,WebLogic 不会接受该命令,因为响应已经开始.有谁知道在 WebLogic 中配置默认​​响应缓冲区大小的方法?

I attempted to increase the response buffer size using the response.setBufferSize() method. However, WebLogic would not accept that command because the response had already started. Does anyone know of a way to configure the default response buffer size in WebLogic?

以下是代码的简化版本.我确实尝试添加 out.flush(),但无济于事.是否缺少会导致 WebLogic 出现问题但 Tomcat 不会出现问题的内容?

Below is a simplified version of the code. I did try adding out.flush(), but to no avail. Is there something missing that would cause a problem with WebLogic but not Tomcat?

//----

File file = new File(mFileName);
int fileLength = file.length();
response.setContentLength(fileLength);
response.setContentType(contentType);

OutputStream out = response.getOutputStream();

FileInputStream in = new FileInputStream(mFileName);

byte[] buf = new byte[1024];
int count = 0;

while ((count = in.read(buf)) >= 0) {

    out.write(buf, 0, count);
}

in.close();

out.close();

//----

谢谢.

问候

布雷特 S

完整的堆栈跟踪是:

####<3/11/2009 09:52:20 AM EST> <Error> <HTTP> <nmi02> <cgServer> <[ACTIVE] ExecuteThread: '1' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <> <1257202340094> <BEA-101019> <[weblogic.servlet.internal.WebAppServletContext@8615a2 - appName: '_workshop_auto_generated_ear_', name: '/', context-path: ''] Servlet failed with IOException
java.net.ProtocolException: Exceeded stated content length of 2228
 at weblogic.servlet.internal.ChunkOutput.writeStream(ChunkOutput.java:411)
 at weblogic.servlet.internal.ChunkOutputWrapper.writeStream(ChunkOutputWrapper.java:168)
 at weblogic.servlet.internal.ServletOutputStreamImpl.writeStream(ServletOutputStreamImpl.java:498)
 at weblogic.servlet.internal.ServletOutputStreamImpl.writeStream(ServletOutputStreamImpl.java:486)
 at weblogic.servlet.FileServlet.sendFile(FileServlet.java:407)
 at weblogic.servlet.FileServlet.doGetHeadPost(FileServlet.java:231)
 at weblogic.servlet.FileServlet.service(FileServlet.java:170)
 at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
 at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:226)
 at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:124)
 at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:283)
 at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:26)
 at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:42)
 at com.nminnovation.nmf.images.ConverterFilter.doFilter(ConverterFilter.java:98)
 at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:42)
 at com.nminnovation.nmf.util.CacheControlFilter.doFilter(CacheControlFilter.java:50)
 at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:42)
 at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3368)
 at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
 at weblogic.security.service.SecurityManager.runAs(Lweblogic.security.acl.internal.AuthenticatedSubject;Lweblogic.security.acl.internal.AuthenticatedSubject;Ljava.security.PrivilegedAction;)Ljava.lang.Object;(Unknown Source)
 at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2117)
 at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2023)
 at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1359)
 at weblogic.work.ExecuteThread.execute(ExecuteThread.java:200)
 at weblogic.work.ExecuteThread.run(ExecuteThread.java:172)

推荐答案

感谢 Jim 的回复.

Thanks for your reply Jim.

解决方案是删除 response.setContentLength() 然后添加 response.flushBuffer()

The solution was to remove response.setContentLength() then add response.flushBuffer()

File file = new File(mFileName);
int fileLength = file.length();
//removed this line:
//response.setContentLength(fileLength);
response.setContentType(contentType);

OutputStream out = response.getOutputStream();

FileInputStream in = new FileInputStream(mFileName);            
byte[] buf = new byte[ fileLength ];
int count = 0;
while ((count = in.read(buf)) >= 0) {
    out.write(buf, 0, count);
}
in.close();
out.close();
//and added this line:
response.flushBuffer();

再次感谢.

问候布雷特 S

这篇关于WebLogic“超出规定的内容长度"错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆