teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

1

タイトルなど大まかに変更

2024/03/01 05:21

投稿

heat
heat

スコア44

title CHANGED
@@ -1,1 +1,1 @@
1
- java.lang.NullPointerException: Cannot invoke "" because "siteEV" is nullというエラーが解決できない
1
+ 本に書てあるコードを丸写ししたが何かが違らしく例外になる。本のコドと手打ちのコードの何違うか分からない
body CHANGED
@@ -2,9 +2,10 @@
2
2
 
3
3
  スッキリ分かるサーブレット&jsp入門第三版という本を見ながら,アプリを作ろうと本に書いてある通りにソースコードを書いていますが(フォワードが上手く行かなかったのでサーブレットにのみ一部コードを追加しています)サーブレットを実行すると例外が発生してしまいます。
4
4
  作る内容としては、アプリケーションスコープを使いjavabeansにインスタンスを保存し、jsp画面で「いいね」「よくないね」をクリックした回数を数え回数を表示させるというものになります。
5
- エラーの内容を見ると上手くインスタンスが保存されずnullになっているようなのですが本通りにしているため、何が原因か分かりません。どなたかお助け下さい。
5
+ エラーの内容を見ると上手くインスタンスが保存されずnullになっているようなのですが本通りにしているため、何が原因か分かりません。
6
+ その後、本を出版している公式サイトより模範ソースコードをダウンロードしてeclipseに貼り付けると正常に動作しましたが、自分の手打ちのコードと何が違うのか分かりません。どなたか教えてください。
6
7
 
7
- ### 発生している問題・エラーメッセージ
8
+ ### 手打ちコードで発生している問題・エラーメッセージ
8
9
 
9
10
  ```
10
11
  タイプ 例外報告
@@ -55,9 +56,9 @@
55
56
  注意 原因のすべてのスタックトレースは、サーバのログに記録されています。
56
57
  ```
57
58
 
58
- ### 該当のソースコード
59
+ ###MinatoIndex.java
59
60
 
60
- ```MinatoIndex.java
61
+ ```公式サイトよりダウンロードしたコードに自分で一部追記したサーブレット
61
62
  package Servlet;
62
63
 
63
64
  import java.io.IOException;
@@ -73,6 +74,71 @@
73
74
  import model.SiteEV;
74
75
  import model.SiteEVLogic;
75
76
 
77
+ @WebServlet("/MinatoIndex")
78
+ public class MinatoIndex extends HttpServlet {
79
+ private static final long serialVersionUID = 1L;
80
+
81
+ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
82
+ response.setCharacterEncoding("UTF-8");
83
+ response.setContentType("UTF-8");
84
+
85
+ response.getWriter().append("Served at: ").append(request.getContextPath());
86
+
87
+ // アプリケーションスコープに保存されたサイト評価を取得
88
+ ServletContext application = this.getServletContext();
89
+ SiteEV siteEV = (SiteEV) application.getAttribute("siteEV");
90
+
91
+ // サイト評価の初期化(初回リクエスト時実行)
92
+ if (siteEV == null) {
93
+ siteEV = new SiteEV();
94
+ }
95
+
96
+ // リクエストパラメータの取得
97
+ request.setCharacterEncoding("UTF-8");
98
+ String action = request.getParameter("action");
99
+
100
+ // サイトの評価処理(初回リクエスト時は実行しない)
101
+ SiteEVLogic siteEVLogic = new SiteEVLogic();
102
+ if (action != null && action.equals("like")) {
103
+ siteEVLogic.like(siteEV);
104
+ } else if (action != null && action.equals("dislike")) {
105
+ siteEVLogic.dislike(siteEV);
106
+ }
107
+
108
+ // アプリケーションスコープにサイト評価を保存
109
+ application.setAttribute("siteEV", siteEV);
110
+
111
+ // フォワード
112
+ // RequestDispatcher dispatcher = request.getRequestDispatcher("WEB-INF/jsp/minatoIndex.jsp");
113
+ // dispatcher.forward(request, response);
114
+
115
+ response.setContentType("text/html;charset=UTF-8");
116
+ response.getWriter().append("Served at: ").append(request.getContextPath());
117
+
118
+ RequestDispatcher dispatcher=
119
+ request.getRequestDispatcher("WEB-INF/jsp/minatoIndex.jsp");
120
+ // request.getRequestDispatcher("WEB-INF/jsp/forward.jsp");
121
+ dispatcher.forward(request,response);
122
+ }
123
+ }
124
+ ```
125
+
126
+ ```MinatoIndex.java(手打ちしてエラーになるサーブレットクラス)
127
+ package Servlet;
128
+
129
+ import java.io.IOException;
130
+
131
+ import javax.servlet.RequestDispatcher;
132
+ import javax.servlet.ServletContext;
133
+ import javax.servlet.ServletException;
134
+ import javax.servlet.annotation.WebServlet;
135
+ import javax.servlet.http.HttpServlet;
136
+ import javax.servlet.http.HttpServletRequest;
137
+ import javax.servlet.http.HttpServletResponse;
138
+
139
+ import model.SiteEV;
140
+ import model.SiteEVLogic;
141
+
76
142
  /**
77
143
  * Servlet implementation class MinatoIndex
78
144
  */