自己启动jetty所遇到的 session reset 问题

在eclipse 当中启动的 jetty 时,由于要根据 extension point 来找到
相应的 servlet 定义和 mapping,因此自己取得一个 context,然后往里面
addHandler。开始只有一个 servlet ,没有问题,后来又有两个plugin,其中
也有servlet/mapping的定义,然后就总是出现 session reset 的问题。

开始还以为是自己做的classloader 的问题,因为担心自己做的 loader 会产生
不好的影响。后来把日志级别调高之后,发现如果连续只访问一个servlet, 就不会
有 session reset 问题,如果这时候再访问另一个 servlet,它就会赋予另外一个
session id。再仔细看了一下增加 servlet mapping 的代码:
for (ExtensionBean bean : servletMappingBeans) {
  ServletHandler handler = new ServletHandler();
  handler.addServlet( bean.getProperty( "mapping"), bean.getClassName());
  context.addHandler( handler);
}


这样,相当于在 context 里面增加了多个 servlet handler,每个handler有一个自己的
session manager,由此导致访问不同的 servlet,使用不同的session id 的问题,从而
导致客户端认为 session reset 了。因此,稍微修改一下就解决了这个问题:

ServletHandler handler = new ServletHandler();
for (ExtensionBean bean : servletMappingBeans) {
  handler.addServlet( bean.getProperty( "mapping"), bean.getClassName());
}
context.addHandler( handler);


教训:一开始就觉得这个问题不是个大问题,但是由于在后台老是没有异常,日志文件中也
没有提供足够的信息,因此一开始花了很长时间进行调试和单步跟踪(虽然不喜欢,但是当时
也没有想出其他办法)。后来把日志级别提高了,把jetty的debug enable之后,发现访问
不同的servlet将造成session id 的变化,从而很快的定位到问题并且解决问题。

也就是说,碰到问题,还是应该冷静,尽量用日志去定位问题,而不是用debug去定位问题。

主站: http://blogsite.3322.org/jspwiki/
posted on 2005-11-29 15:53 SimonLei 阅读(1302) 评论(2)  编辑  收藏
评论
  • # re: 自己启动jetty所遇到的 session reset 问题
    cowrie
    Posted @ 2006-05-31 14:59

    请问,如何处理JETTY 编译JSP后,session_id变化的问题?  回复  更多评论   
  • # re: 自己启动jetty所遇到的 session reset 问题
    SimonLei
    Posted @ 2006-05-31 15:08
    sorry, 这个问题没碰到过。
      回复  更多评论   

只有注册用户登录后才能发表评论。


网站导航:
 

统计