0


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 が SEVERE を呼び出します: サーブレット [jsp] の Servlet.service() がパス [/APle] のコンテキストで例外 [java.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 を返すためだと思います..しかし、なぜこれが起こっているのでしょうか? アプリケーションを再度デプロイすると、すべてが正常に実行されます!

ありがとうございました!!

4

1 に答える 1

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

ここでは、セッションから「UserBean」オブジェクトを取得し、関数を直接呼び出しています。特定の時間 Web アプリケーションを使用していない場合、セッションは期限切れになります。

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

ここで「currentUser」は null になります。その後、「currentUser」にアクセスしようとすると、NullPointerException がスローされます。したがって、オブジェクトから値を取得する前に、オブジェクトのnullポインターを確認する必要があります

<%UserBean currentUser=(UserBean)(session.getAttribute("currentSessionUser"));
if(currentUser != null){
%>
<h1><%= currentUser.getUsername() %> </h1>
<%}%>
于 2013-07-24T09:04:43.243 に答える