【问题标题】:Nullpointerexception thrown when webpage kept open for long time网页长时间保持打开时抛出Nullpointerexception
【发布时间】:2011-11-19 00:28:29
【问题描述】:

我正在开发一个使用 Apache 的 JSP 和 Servlet 的网站 - 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)

【问题讨论】:

    标签: java apache jsp tomcat servlets


    【解决方案1】:

    听起来您的会话正在超时。您需要强制用户重新登录,或者延长会话超时时间。

    您可以通过编辑 web.xml 并添加以下内容来更改会话超时:

    <session-config>
      <session-timeout>60</session-timeout>
    </session-config>
    

    这将使您的会话超时时间为 60 分钟。 -1 表示没有超时。

    【讨论】:

    • 小贴士:改成2分钟什么的,两分钟后看看有没有同样的问题。否则你将不得不等待一个小时:-)
    • Tomcat 能否透明地保持会话?
    • 最好在使用前检查会话是否仍然可用。
    • 这是一种解决方法,而不是解决方案。不活动 60 分钟后仍会出现同样的问题。
    【解决方案2】:
    java.lang.NullPointerException
        at org.apache.jsp.homepage_jsp._jspService(homepage_jsp.java:107)
    

    这种只在很长一段时间后才出现的症状确实表明会话已经超时。但是更改会话超时不是正确的解决方案。您的 JSP 中实际上有一个 错误

    因为您使用老式 JSP scriptlets &lt;% %&gt; 而不是普通的 Java 类(例如 servlets)来控制请求/响应并在 JSP 中执行业务,所以很难确定NullPointerException 的根本原因。您需要在服务器的工作目录中打开生成的homepage_jsp.java 并前往第107 行,最后将此行回溯到您的homepage.jsp 以便修复错误。

    也许您需要使用request.getSession() 而不是request.getSession(false),或者您需要在访问之前检查会话属性是否不是null,等等。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-21
      • 2018-01-23
      • 2021-05-11
      • 1970-01-01
      相关资源
      最近更新 更多