我正在使用Apache开发一个使用JSP和Servlets的网站 - tomcat 5.5作为服务器。 我的应用运行良好。但是每当我打开任何网页并在30分钟后返回它并点击任何按钮或图标时,它会抛出错误说 -
Sep 16, 2011 2:11:33 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet jsp threw exception
java.lang.NullPointerException
at org.apache.jsp.homepage_jsp._jspService(homepage_jsp.java:107)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:369)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:308)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:259)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:172)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:879)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
at java.lang.Thread.run(Unknown Source)
答案 0 :(得分:3)
听起来你的会话超时了。您需要强制用户再次登录,或延长会话超时。
您可以通过编辑web.xml并添加:
来更改会话超时<session-config>
<session-timeout>60</session-timeout>
</session-config>
这将为您提供60分钟的会话超时。 -1表示没有超时。
答案 1 :(得分:1)
java.lang.NullPointerException at org.apache.jsp.homepage_jsp._jspService(homepage_jsp.java:107)
这种情况仅在很长一段时间后才会发生,这确实表明会话已经超时。但是更改会话超时不是正确的解决方案。你的JSP中实际上有一个 bug 。
因为您使用旧式JSP scriptlet <% %>
而不是普通的Java类(如servlets)来控制请求/响应并在JSP中执行业务,导致NullPointerException
的根本原因更难实现。您需要在服务器的工作目录中打开生成的homepage_jsp.java
并前往第107行,最后将此行追溯到您的homepage.jsp
,以便您可以修复该错误。
也许你需要做一个request.getSession()
而不是request.getSession(false)
,或者你需要在访问它之前检查一个会话属性是否null
,等等。