Web应用遇到问题记录

JBoss应用遇到问题记录

 

Q1. 2012-9-3 应用部署到weblogic下(Tomcat下无问题),filter执行时报错: 

java.lang.IllegalStateException: Cannot resize buffer - 299 bytes have already been written (Servlet 2.3, sec. 5.1)
at weblogic.servlet.internal.ServletResponseImpl.setBufferSize(ServletResponseImpl.java:346)
at weblogic.servlet.jsp.PageContextImpl.initialize(PageContextImpl.java:74)
at weblogic.servlet.jsp.PageContextImpl.<init>(PageContextImpl.java:110)
at weblogic.servlet.jsp.JspFactoryImpl.getPageContext(JspFactoryImpl.java:40)
at jsp_servlet.__index._jspService(__index.java:65)

原因: 调用了response.sendRedirect()之后,再调用了filterChain.doFilter(request, response)

解决 修改代码,确保 sendRedirect 之后 return 或 doFilter 之前无 sendRedirect。

see: http://blog.csdn.net/xlhybjava/article/details/1038357

 

 

Q2. 2012-10-19 Jetty下,post 1个表单数据时报错: 

java.lang.IllegalStateException: Form too large210799>200000

 

原因: Jetty对form post data的大小有限制,默认为200000bytes

解决 修改Jetty的默认限制值。

see: Web容器对form post data大小的默认限制的修改方法

 

Q3. 2012-9 关于通过 request.getParameter(...) 获取数据的注意事项:
对于POST方式提交的数据,在首次调用 request.getParameter(...) 方法时,
会触发web容器解析数据流并将解析后的parameters置入parameterMap。
方法request.getInputStream()中会改变Using stream flag值(Jetty中这个变量名为inputState, Tomcat中为usingInputStream),
而request.getParameter(...)中会根据Using stream flag值来决定是否去解析流数据,
所以若在调用request.getParameter(...)前先调用了request.getInputStream(),
会引发BUG: POST方式提交的FORM数据无法通过request.getParameter方式得到值。
一般,处理非multipart/byteranges类型FORM提交的数据时,只需要通过容器去取即可,无需额外处理。

 

Q4. 2013-5 某APP分别部署在同一个机子weblogic的2个不同域上(即webapp的url仅ip不同),在同个客户端用同一个账号先后登录这2个APP,后登录的会把前面登录的“踢掉”,而如果登录的是同个APP,反而不会出现“踢掉”。

原因: http是无状态的协议,因此web容器若要在服务端保存状态,通常的做法是往客户端浏览器cookie中写当前会话的sessionid,其默认的cookie名字是JSESSIONID。
但是cookie的domain信息是基于IP地址的不包含端口,这会导致相同IP地址不同端口的web应用cookie被共享。
因此在登录1个APP后,服务器就往用户的浏览器里写入了一个名为JSESSIONID的cookie,该APP服务端通过该id能找到相应的session,
此时用户又登录了另1个APP,因为2个APP使用了相同的IP(或主机名称),浏览器会把JSESSIONID的这个cookie发给另1个APP的服务端,
但这个服务端是找不到该id对应的session的,因此会重新生成一个sessionid并写到浏览器cookie中,这个新的sessionid会覆盖之前由前1个APP生成的sessionid。
此时当再访问前1个APP时,因为cookie中的sessionid被改变,服务端也同样找不着之前的session信息了,这导致当前登录的信息丢失。

另外这个问题似乎是和web容器有关,据网上一些文章,weblogic下存在这个问题,而tomcat下则不存在这个问题。

更多weblogic session问题:http://liuzidong.iteye.com/blog/1132219

解决 /WEB-INF/weblogic.xml 文件中增加如下配置:

<session-descriptor>
   <cookie-name>XXX-JSESSIONID</cookie-name>
</session-descriptor>

 


Problem:  Tomcat 如何设置JVM参数

Solution

Windows: 在 catalina.bat 的最前面加上 set JAVA_OPTS=-Dxx1=yy -Dxx2=yy2

Linux: 在 catalina.sh 的最前面加上 JAVA_OPTS=-Dxx1=yy -Dxx2=yy2

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值