BEA weblogic 处理请求出现错误:Cannot parse POST parameters of request

当将Tomcat6应用迁移到BEAWeblogic10时,遇到无法解析POST参数的异常。分析原因发现是页面中JS代码重复请求同一URL,导致请求未完全解析即被后续请求中断。本文提供了解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[java]  view plain copy
  1. weblogic.utils.NestedRuntimeException: Cannot parse POST parameters of request: '/doSth.action'  
  2.         at weblogic.servlet.internal.ServletRequestImpl$RequestParameters.mergePostParams(ServletRequestImpl.java:1816)  
  3.         at weblogic.servlet.internal.ServletRequestImpl$RequestParameters.parseQueryParams(ServletRequestImpl.java:1703)  
  4.         at weblogic.servlet.internal.ServletRequestImpl$RequestParameters.getQueryParams(ServletRequestImpl.java:1656)  
  5.         at weblogic.servlet.internal.ServletRequestImpl.getParameter(ServletRequestImpl.java:756)  
  6.         at org.apache.struts2.dispatcher.Dispatcher.prepare(Dispatcher.java:669)  
  7.         at org.apache.struts2.dispatcher.FilterDispatcher.prepareDispatcherAndWrapRequest(FilterDispatcher.java:319)  
  8.         at org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:367)  
  9.         at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:42)  
  10.         at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:96)  
  11.         at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)  
  12.         at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:42)  
  13.         at org.apache.struts2.dispatcher.ActionContextCleanUp.doFilter(ActionContextCleanUp.java:102)  
  14.         at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:42)  
  15.         at com.gisecur.webapp.intercepter.SessionFilter.doFilter(SessionFilter.java:71)  
  16.         at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:42)  
  17.         at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3393)  
  18.         at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)  
  19.         at weblogic.security.service.SecurityManager.runAs(Unknown Source)  
  20.         at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2140)  
  21.         at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2046)  
  22.         at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1366)  
  23.         at weblogic.work.ExecuteThread.execute(ExecuteThread.java:200)  
  24.         at weblogic.work.ExecuteThread.run(ExecuteThread.java:172)  
  25. Caused by: java.net.ProtocolException: EOF after reading only: '0' of: '68' promised bytes, out of which at least: '0' were already buffered  
  26.         at weblogic.servlet.internal.PostInputStream.complain(PostInputStream.java:93)  
  27.         at weblogic.servlet.internal.PostInputStream.read(PostInputStream.java:179)  
  28.         at weblogic.servlet.internal.ServletInputStreamImpl.read(ServletInputStreamImpl.java:222)  
  29.         at weblogic.servlet.internal.ServletRequestImpl$RequestParameters.mergePostParams(ServletRequestImpl.java:1791)  
  30.         ... 22 more  

 

工程在Tomcat6中运行正常,移到BEA Weblogic 10中如果访问其中的一个页面就出现Cannot parse POST parameters of request的异常。分析页面之后原来是因为页面中的js代码在初始化开始的时候请求了"doSth.action",然后在js结束的地方又重新请求了一次"doSth.action",这样会出现第一次的请求没有解析完,第二次请求又到了,这个时候http隧道被第二次占用了,导致第一次的请求非正常关闭,导致WebLogic服务器解析的第一次请求的参数无法读取请求结束符的错误:"EOF after reading only: '0' of: '68' promised bytes, out of which at least: '0' were already buffered".

 

Reference:

"If the client is getting the reset exception it will be the server that is doing the reset. There are several possible reasons for this:

a. It calls Socket.setSoLinger() before closing. Don't.
b. It closes the socket without reading all the data you have sent.
c. An intermediate firewall is misbehaving.
d. The server is using the WINSOCK API and is not calling WSAShutdown() or shutdown() before closing. Some MS products do this."

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值