前提・実現したいこと
ここに質問の内容を詳しく書いてください。
Weblistenerを試してみたくテストしている時にエラーが発生しました。
ServletCotextListenerインターフェースでアプリケーション開始時にアプリケーションスコープに初期値を保存し、サーブレットで呼び出してビューに表示させるという簡単な物になります。
発生している問題・エラーメッセージ
アプリケーションスコープを取得する際、NullPointerExceptionのエラーが発生します。
contextInitialized()メソッドは問題なく動いているかと思います。
サーブレットでアプリケーションスコープを取得する際にエラーになります。
エラーメッセージ HTTPステータス 500 – Internal Server Error
該当のソースコード
Java ソースコード package sample; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.Servlet; import javax.servlet.ServletConfig; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet("/CounterServlet") public class CounterServlet extends HttpServlet { private static final long serialVersionUID = 1L; public void init(ServletConfig config) throws ServletException { } public void destroy() { } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //アプリケーションスコープに保存された訪問回数を増加 System.out.println("test"); ServletContext application = this.getServletContext(); Integer count = (Integer) application.getAttribute("count"); count++; application.setAttribute("count", count); //HTMLを出力 response.setContentType("text/html; charset=UTF-8"); PrintWriter out = response.getWriter(); out.println("<html>"); out.println("<head>"); out.println("<title>訪問回数</title>"); out.println("</head>"); out.println("<body>"); out.println("<p>訪問回数:"+ count +"</p>"); out.println("<a href=/example2/CounterServlet>更新</a>"); out.println("</body>"); out.println("</html>"); } }
Java コード package listener; import javax.servlet.ServletContext; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import javax.servlet.annotation.WebListener; @WebListener public class ListenerSample2 implements ServletContextListener { public ListenerSample2() { // TODO Auto-generated constructor stub } //Webアプリケーションが終了する時に実行されるイベント public void contextDestroyed(ServletContextEvent sce) { System.out.println("contextDestroyedシステムが実行しました"); } //Webアプリケーションが開始する時に実行されるイベント public void contextInitialized(ServletContextEvent sce) { //訪問回数を表すIntegerインスタンスを生成し、アプリケーションスコープに保存 Integer count = 0; ServletContext application = sce.getServletContext(); application.setAttribute("count", count); System.out.println(count); System.out.println("contextInitialized()が実行されました"); } }
試したこと
ここに問題に対して試したことを記載してください。
contextInitialized()メソッド内にprintlnを追加し、動作していることをコンソール上で確認
補足情報(FW/ツールのバージョンなど)
初学者で分かりにくい点や説明不足の部分があるかと思います。。
申し訳ありません。。
eclipse
Apache Tomcat/9.0.33
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/10 07:29
2020/05/10 07:39