我的数据库在一段时间后断开连接 - JSP页面和MySQL

时间:2013-07-24 08:44:43

标签: jsp nullpointerexception


我在Netbeans中有一个Web应用程序,我创建了一些jsp页面,他们使用方法(我的方法)从类中获取一些数据,例如用户名,标题等。

此外,我已使用MySQL将用户存储在表中。为了获取用户名(在用户登录后),我使用方法getUsername()。

在我的jsp页面中,我有这段代码:

<%UserBean currentUser=(UserBean)(session.getAttribute("currentSessionUser"));%> <h1><%= currentUser.getUsername() %> </h1>

其中userBean是一个类等。一切运行顺利,但有些时候(我注意到这种情况发生在我不使用浏览器的应用程序一段时间(15-20分钟?我不知道)我收到错误状态

  

HTTP状态500 - java.lang.NullPointerException

并且Tomcat中的日志文件打印

  

org.apache.catalina.core.StandardWrapperValve调用   严重:servlet [jsp]的Servlet.service()与路径[/ APle]的上下文   使用root causejava.lang.NullPointerException抛出异常[java.lang.NullPointerException]

at org.apache.jsp.welcome_jsp._jspService(welcome_jsp.java:96)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:724)

我去检查第96行中的文件welcome_jsp.java,这是我获取用户名的方法。

      out.print( currentUser.getUsername() );

我想我得到错误的原因是该方法返回Null ..但为什么会发生这种情况?如果我再次部署应用程序,一切都会正常运行!

谢谢!

1 个答案:

答案 0 :(得分:1)

<%UserBean currentUser=(UserBean)(session.getAttribute("currentSessionUser"));%> 
<h1><%= currentUser.getUsername() %> </h1>

这里你从会话中获取'UserBean'对象并直接调用function。如果你在特定时间没有使用你的webapplication,你的会话将会过期,如果你打电话

<%UserBean currentUser=(UserBean)(session.getAttribute("currentSessionUser"));%> 

此处'currentUser'将为null。因此,在您尝试访问'currentUser'之后,这将抛出NullPointerException。因此,在从

获取值之前,请先检查对象的空指针
<%UserBean currentUser=(UserBean)(session.getAttribute("currentSessionUser"));
if(currentUser != null){
%>
<h1><%= currentUser.getUsername() %> </h1>
<%}%>