刘建和的blog

技术与管理

BlogJava 首页 联系 聚合 管理
  0 Posts :: 5 Stories :: 1 Comments :: 0 Trackbacks
系统为RH linux9+jdk1.5+Apache2+JK1.2+Tomcat5.5.9

应用程序采用jsp编写,在程序中用到Session,如果在客户端把用户的IE隐私设置为最高,那么系统的Session ID就会丢失,从而在相关的程序中无法获取到session信息,在服务器段出现如下错误异常。

2005-11-10 15:16:21,399 - org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/aaa].[jsp] -879253 [TP-Processor9] ERROR org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/aaa].[jsp]  - Servlet.service() for servlet jsp threw exception

java.lang.NullPointerException

       at org.apache.jsp.loginIcc_jsp._jspService(org.apache.jsp.loginIcc_jsp:85)

       at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)

       at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

       at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:322)

       at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:291)

       at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241)

       at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

       at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)

       at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)

       at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)

       at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)

       at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)

       at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)

       at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)

       at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)

       at org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:307)

       at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:385)

       at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:748)

       at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:678)

       at org.apache.jk.common.SocketConnection.runIt(ChannelSocket.java:871)

       at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)

       at java.lang.Thread.run(Thread.java:595)

该异常不会影响Tomcat服务器的正常运行,也不影响别的用户的使用,但是该客户的应用程序无法使用,该问题可以解决。可以在jsp页面连接的地方采用页面重发的机制,可以解决掉客户端关闭cookie而引起的session ID丢失的问题。
具体如下:
   

原理是客户端页面会判断本地是否开放cookie,如果开放的话,系统就会把session idcookie的形式保存;如果本地拒绝保存cookie(用户为了安全考虑,把本地cookie功能关闭),那么页面将通过参数形式传递session id,从而保证sessin 不丢失,这样可以解决关闭cookie的那些用户的问题。

如果要解决该问题需要每个页面添加重发功能。

具体代码如下:

<%@ page session="true" %>

 

<%

String url =response.encodeURL("连接页面.jsp");
%>

<a href='<%=url%>'>连接页面</a>

 

如果重定向,则采用如下方法:

response.encodeRedirectURL ()


         如果采用struts框架开发的系统,只要把XXX.do当作一个jsp页面同样来处理就可以。
posted on 2005-11-11 17:21 jeanlius 阅读(524) 评论(0)  编辑  收藏 所属分类: web

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


网站导航: