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

質問編集履歴

8

誤字

2019/03/30 03:21

投稿

Chandler_Bing
Chandler_Bing

スコア673

title CHANGED
File without changes
body CHANGED
@@ -204,4 +204,100 @@
204
204
 
205
205
  }
206
206
  ```
207
- 1行づつブレークポイントを設定すると、JavaQuizDAO jqd = new JavaQuizDAO();のところで上記に書いたエラーがでます。e.printStackTrace();には何も表示されません。
207
+ 1行づつブレークポイントを設定すると、JavaQuizDAO jqd = new JavaQuizDAO();のところで上記に書いたエラーがでます。e.printStackTrace();には何も表示されません。
208
+
209
+ これがインスタンス化しているクラスJavaQuizDAOクラスです
210
+
211
+ ```Java
212
+ package dao;
213
+
214
+ import java.sql.Connection;
215
+ import java.sql.DriverManager;
216
+ import java.sql.PreparedStatement;
217
+ import java.sql.ResultSet;
218
+ import java.sql.SQLException;
219
+ import java.util.ArrayList;
220
+ import java.util.List;
221
+
222
+ import com.fasterxml.jackson.core.JsonProcessingException;
223
+ import com.fasterxml.jackson.databind.ObjectMapper;
224
+ import com.fasterxml.jackson.databind.SerializationFeature;
225
+
226
+ import model.Quiz;
227
+
228
+ public class JavaQuizDAO {
229
+
230
+ public List<Quiz> getgetQuizzes() {
231
+ Connection conn = null;
232
+ List<Quiz> quizzes = new ArrayList<>();
233
+
234
+ try {
235
+ // JDBCドライバを読み込む
236
+ Class.forName("com.mysql.cj.jdbc.Driver");
237
+ // データベースに接続
238
+ conn = DriverManager.getConnection("jdbc:mysql://localhost:8889/JavaQuiz", "tennisuser", "password");
239
+
240
+ // SELECT文を準備
241
+ String sql = "SELECT * FROM quizzes ORDER BY RAND() LIMIT 4";
242
+ PreparedStatement pStmt = conn.prepareStatement(sql);
243
+
244
+ // SELECTを実行し、結果表を取得
245
+ ResultSet rs = pStmt.executeQuery();
246
+
247
+ while (rs.next()) {
248
+ int question_id = rs.getInt("question_id");
249
+ String question = rs.getString("question");
250
+ String answer1 = rs.getString("answer1");
251
+ String answer2 = rs.getString("answer2");
252
+ String answer3 = rs.getString("answer3");
253
+ String answer4 = rs.getString("answer4");
254
+ String correct_answer = rs.getString("correct_answer");
255
+ Quiz quiz = new Quiz(question_id, question, answer1, answer2, answer3, answer4, correct_answer);
256
+ quizzes.add(quiz);
257
+ }
258
+
259
+ } catch (SQLException e) {
260
+ e.printStackTrace();
261
+ quizzes.clear();
262
+ return quizzes;
263
+ } catch (ClassNotFoundException e) {
264
+ e.printStackTrace();
265
+ quizzes.clear();
266
+ return quizzes;
267
+ } finally {
268
+ // データベースを切断
269
+ if (conn != null) {
270
+ try {
271
+ conn.close();
272
+ } catch (SQLException e) {
273
+ e.printStackTrace();
274
+ quizzes.clear();
275
+ return quizzes;
276
+ }
277
+ }
278
+ }
279
+ return quizzes;
280
+ }
281
+
282
+ public String getQuizzesJson() {
283
+ String script = null;
284
+ ObjectMapper mapper = new ObjectMapper();
285
+ mapper.enable(SerializationFeature.INDENT_OUTPUT);
286
+ try {
287
+ script = mapper.writeValueAsString(getgetQuizzes());
288
+ } catch (JsonProcessingException e) {
289
+ e.printStackTrace();
290
+ }
291
+
292
+ return script;
293
+ }
294
+ }
295
+ ```
296
+
297
+ ちなみに何も弄っていませんが現在このクラスのメソッドをmainで実行すると以下の形式(上記に書いたJSONとは少し違う形)でJSONが表示されます。
298
+
299
+ ```JSON
300
+ "[ {\n \"question_id\" : 4,\n \"question\" : \"She is so much more ___ than me.\",\n \"answer1\" : \"funnier\",\n \"answer2\" : \"cooler\",\n \"answer3\" : \"fun\",\n \"answer4\" : \"good\",\n \"correct_answer\" : \"fun\"\n}, {\n \"question_id\" : 6,\n \"question\" : \"I don't want you to feel ___ to come with me.\",\n \"answer1\" : \"forced\",\n \"answer2\" : \"be \",\n \"answer3\" : \"be sad\",\n \"answer4\" : \"been forced\",\n \"correct_answer\" : \"forced\"\n}, {\n \"question_id\" : 3,\n \"question\" : \"I'd ___ honored if you named me as the best man\",\n \"answer1\" : \"rather\",\n \"answer2\" : \"be\",\n \"answer3\" : \"woud\",\n \"answer4\" : \"been\",\n \"correct_answer\" : \"be\"\n}, {\n \"question_id\" : 5,\n \"question\" : \"Don't be ___ in the classroom.\",\n \"answer1\" : \"running\",\n \"answer2\" : \"play game\",\n \"answer3\" : \"happier\",\n \"answer4\" : \"can\",\n \"correct_answer\" : \"running\"\n} ]"
301
+ ```
302
+
303
+ これをそのままコピーしてサーブレットでStringに入れ他のクラスなどを生成しなければ動きます。ですので問題はやはりJavaQuizDAO jqd = new JavaQuizDAO();の部分のはずなのですが、何がおかしいのでしょうか。

7

コード変更。

2019/03/30 03:21

投稿

Chandler_Bing
Chandler_Bing

スコア673

title CHANGED
File without changes
body CHANGED
@@ -158,35 +158,9 @@
158
158
  重大: Servlet.service() for servlet [servlet.AjaxController] in context with path [/JavaQuiz] threw exception [サーブレットの実行により例外を投げました] with root cause [金 3 22 22:58:43 JST 2019]
159
159
  ```
160
160
 
161
- 追記
161
+ 追記
162
- JSP内の以下の部分にブレークポイントを置き、実行しました。
163
- ```JSP
164
- <%@ page language="java" contentType="text/html; charset=UTF-8"
165
- pageEncoding="UTF-8"%>
166
- <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
167
-
168
- <!DOCTYPE html>
169
- <html lang="en" dir="ltr">
170
-
171
- <head>
172
- <meta charset="utf-8">
173
- <title>QuizSample</title>
174
- <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
175
- </head>
176
-
177
- <body>
178
- <h2>何も表示しません</h2>
179
- </body>
180
- <script src="${pageContext.request.contextPath}/js/sample.js"></script>//ここにブレークポイント
181
- </html>
182
- ```
183
-
184
- 以下の様に色々と大量に情報が出すがどこに原因があるのでしょうか。どこを調べれば原因のかわかりません
162
+ ブレークポイントを置いても止まりませんでし、適当に弄っとブレークポイントでと止まる様になりました
185
- ![イメージ説明](9313ad1969caa4afafc7eb694a5d2776.png)
186
-
187
- エラーがコンソールに表示される様にtry catch で全てのエラーが出る様にしましたがダメです。どうすれば良いでしょうか。
188
- どうすればエラを特定きまか。
163
+ 以下が変更後のサブレットです
189
-
190
164
  ```Java
191
165
  package servlet;
192
166
 
@@ -201,7 +175,7 @@
201
175
 
202
176
  import com.fasterxml.jackson.databind.ObjectMapper;
203
177
 
204
- import model.Quiz;
178
+ import dao.JavaQuizDAO;
205
179
 
206
180
  /**
207
181
  * Servlet implementation class AjaxController
@@ -214,22 +188,20 @@
214
188
  protected void doPost(HttpServletRequest request, HttpServletResponse response)
215
189
  throws ServletException, IOException {
216
190
  try {
217
- ObjectMapper mapper = new ObjectMapper();
218
- Quiz quiz1 = new Quiz(1, "How are you?", "Good!", "Yes!", "Hi!", "Love!", "Good!");
219
- mapper.writeValueAsString(quiz1);
220
-
221
191
  response.setContentType("application/json; charset=UTF-8");
222
192
 
223
193
  PrintWriter out = response.getWriter();
194
+ JavaQuizDAO jqd = new JavaQuizDAO();
224
195
 
196
+ ObjectMapper mapper = new ObjectMapper();
225
- String script = "{ \"name\":\"Taro Tanaka\", \"age\":30}";
197
+ out.println(mapper.writeValueAsString(jqd.getQuizzesJson()));
226
- out.println(script);
198
+
227
- out.flush();
228
- out.close();
229
199
  } catch (Exception e) {
230
200
  e.printStackTrace();
231
201
  }
232
202
 
233
203
  }
234
204
 
205
+ }
235
- ```
206
+ ```
207
+ 1行づつブレークポイントを設定すると、JavaQuizDAO jqd = new JavaQuizDAO();のところで上記に書いたエラーがでます。e.printStackTrace();には何も表示されません。

6

編集

2019/03/30 03:06

投稿

Chandler_Bing
Chandler_Bing

スコア673

title CHANGED
File without changes
body CHANGED
@@ -184,103 +184,52 @@
184
184
  以下の様に色々と大量に情報が出ますが、どこに原因があるのでしょうか。どこを調べれば原因が出てくるのかわかりません。
185
185
  ![イメージ説明](9313ad1969caa4afafc7eb694a5d2776.png)
186
186
 
187
- 色々JSONYouTube等みましたが、分かりません。しか
187
+ エラーがコンソールに表示される様にtry catch で全てエラーが出る様にしましたがダメですどうすれば良いでょう
188
- servletで以下のコドだとJS受け取れます。
188
+ どうすればエラを特定ます
189
189
 
190
- ```java
191
- String script = "{ \"name\":\"Taro Tanaka\", \"age\":30}";
192
- out.println(script);
193
- ```
194
- サーブレットの中でクラスを生成するとエラーになっている様な気がします。上であげた成功例はクラスの生成はしてません。
195
-
196
- 追記
197
- ある程度原因が特定できたと思います。現在必ずエラーがでる状況としてはサーブレットで以下のクラスのインスタンス化を行なった場合です。メソッド等を使用しなくても質問に書いたエラーを投げます。インスタンス化しているのはdoPostの中です。
198
190
  ```Java
199
- package dao;
191
+ package servlet;
200
192
 
201
- import java.sql.Connection;
202
- import java.sql.DriverManager;
203
- import java.sql.PreparedStatement;
204
- import java.sql.ResultSet;
205
- import java.sql.SQLException;
193
+ import java.io.IOException;
206
- import java.util.ArrayList;
194
+ import java.io.PrintWriter;
207
- import java.util.List;
208
195
 
209
- import com.fasterxml.jackson.core.JsonProcessingException;
196
+ import javax.servlet.ServletException;
197
+ import javax.servlet.annotation.WebServlet;
198
+ import javax.servlet.http.HttpServlet;
199
+ import javax.servlet.http.HttpServletRequest;
200
+ import javax.servlet.http.HttpServletResponse;
201
+
210
202
  import com.fasterxml.jackson.databind.ObjectMapper;
211
- import com.fasterxml.jackson.databind.SerializationFeature;
212
203
 
213
204
  import model.Quiz;
214
205
 
206
+ /**
207
+ * Servlet implementation class AjaxController
208
+ */
209
+ @WebServlet("/AjaxController")
215
- public class JavaQuizDAO {
210
+ public class AjaxController extends HttpServlet {
216
211
 
217
- public List<Quiz> getgetQuizzes() {
218
- Connection conn = null;
219
- List<Quiz> quizzes = new ArrayList<>();
212
+ private static final long serialVersionUID = 1L;
220
213
 
214
+ protected void doPost(HttpServletRequest request, HttpServletResponse response)
215
+ throws ServletException, IOException {
221
216
  try {
222
- // JDBCドライバを読み込む
223
- Class.forName("com.mysql.cj.jdbc.Driver");
217
+ ObjectMapper mapper = new ObjectMapper();
224
- // データベースに接続
225
- conn = DriverManager.getConnection("jdbc:mysql://localhost:8889/JavaQuiz", "tennisuser", "password");
218
+ Quiz quiz1 = new Quiz(1, "How are you?", "Good!", "Yes!", "Hi!", "Love!", "Good!");
219
+ mapper.writeValueAsString(quiz1);
226
220
 
227
- // SELECT文を準備
228
- String sql = "SELECT * FROM quizzes ORDER BY RAND() LIMIT 4";
221
+ response.setContentType("application/json; charset=UTF-8");
229
- PreparedStatement pStmt = conn.prepareStatement(sql);
230
222
 
231
- // SELECTを実行し、結果表を取得
232
- ResultSet rs = pStmt.executeQuery();
223
+ PrintWriter out = response.getWriter();
233
224
 
234
- while (rs.next()) {
235
- int question_id = rs.getInt("question_id");
236
- String question = rs.getString("question");
237
- String answer1 = rs.getString("answer1");
238
- String answer2 = rs.getString("answer2");
239
- String answer3 = rs.getString("answer3");
240
- String answer4 = rs.getString("answer4");
241
- String correct_answer = rs.getString("correct_answer");
225
+ String script = "{ \"name\":\"Taro Tanaka\", \"age\":30}";
242
- Quiz quiz = new Quiz(question_id, question, answer1, answer2, answer3, answer4, correct_answer);
243
- quizzes.add(quiz);
226
+ out.println(script);
244
- }
227
+ out.flush();
245
-
228
+ out.close();
246
- } catch (SQLException e) {
229
+ } catch (Exception e) {
247
230
  e.printStackTrace();
248
- quizzes.clear();
249
- return quizzes;
250
- } catch (ClassNotFoundException e) {
251
- e.printStackTrace();
252
- quizzes.clear();
253
- return quizzes;
254
- } finally {
255
- // データベースを切断
256
- if (conn != null) {
257
- try {
258
- conn.close();
259
- } catch (SQLException e) {
260
- e.printStackTrace();
261
- quizzes.clear();
262
- return quizzes;
263
- }
264
- }
265
231
  }
266
- return quizzes;
267
- }
268
232
 
269
- public String getQuizzesJson() {
270
- String script = null;
271
- ObjectMapper mapper = new ObjectMapper();
272
- mapper.enable(SerializationFeature.INDENT_OUTPUT);
273
- try {
274
- script = mapper.writeValueAsString(getgetQuizzes());
275
- } catch (JsonProcessingException e) {
276
- e.printStackTrace();
277
- }
278
-
279
- return script;
280
233
  }
281
234
 
282
-
283
- }
235
+ ```
284
-
285
- この左上にある同期が取れていません。というのが原因なのでしょうか。Quiz.javaは56行で終了していますので、69行目はありません。
286
- ```![イ![イメージ説明](212b4c30baf8507ef82884d50194013a.png)(13048370f36875a66c327dca7578ab36.png)

5

コード変更

2019/03/29 10:26

投稿

Chandler_Bing
Chandler_Bing

スコア673

title CHANGED
File without changes
body CHANGED
@@ -281,4 +281,6 @@
281
281
 
282
282
 
283
283
  }
284
+
285
+ この左上にある同期が取れていません。というのが原因なのでしょうか。Quiz.javaは56行で終了していますので、69行目はありません。
284
- ```
286
+ ```![イ![イメージ説明](212b4c30baf8507ef82884d50194013a.png)(13048370f36875a66c327dca7578ab36.png)

4

コード変更

2019/03/25 08:20

投稿

Chandler_Bing
Chandler_Bing

スコア673

title CHANGED
File without changes
body CHANGED
@@ -191,4 +191,94 @@
191
191
  String script = "{ \"name\":\"Taro Tanaka\", \"age\":30}";
192
192
  out.println(script);
193
193
  ```
194
- サーブレットの中でクラスを生成するとエラーになっている様な気がします。上であげた成功例はクラスの生成はしてません。
194
+ サーブレットの中でクラスを生成するとエラーになっている様な気がします。上であげた成功例はクラスの生成はしてません。
195
+
196
+ 追記
197
+ ある程度原因が特定できたと思います。現在必ずエラーがでる状況としてはサーブレットで以下のクラスのインスタンス化を行なった場合です。メソッド等を使用しなくても質問に書いたエラーを投げます。インスタンス化しているのはdoPostの中です。
198
+ ```Java
199
+ package dao;
200
+
201
+ import java.sql.Connection;
202
+ import java.sql.DriverManager;
203
+ import java.sql.PreparedStatement;
204
+ import java.sql.ResultSet;
205
+ import java.sql.SQLException;
206
+ import java.util.ArrayList;
207
+ import java.util.List;
208
+
209
+ import com.fasterxml.jackson.core.JsonProcessingException;
210
+ import com.fasterxml.jackson.databind.ObjectMapper;
211
+ import com.fasterxml.jackson.databind.SerializationFeature;
212
+
213
+ import model.Quiz;
214
+
215
+ public class JavaQuizDAO {
216
+
217
+ public List<Quiz> getgetQuizzes() {
218
+ Connection conn = null;
219
+ List<Quiz> quizzes = new ArrayList<>();
220
+
221
+ try {
222
+ // JDBCドライバを読み込む
223
+ Class.forName("com.mysql.cj.jdbc.Driver");
224
+ // データベースに接続
225
+ conn = DriverManager.getConnection("jdbc:mysql://localhost:8889/JavaQuiz", "tennisuser", "password");
226
+
227
+ // SELECT文を準備
228
+ String sql = "SELECT * FROM quizzes ORDER BY RAND() LIMIT 4";
229
+ PreparedStatement pStmt = conn.prepareStatement(sql);
230
+
231
+ // SELECTを実行し、結果表を取得
232
+ ResultSet rs = pStmt.executeQuery();
233
+
234
+ while (rs.next()) {
235
+ int question_id = rs.getInt("question_id");
236
+ String question = rs.getString("question");
237
+ String answer1 = rs.getString("answer1");
238
+ String answer2 = rs.getString("answer2");
239
+ String answer3 = rs.getString("answer3");
240
+ String answer4 = rs.getString("answer4");
241
+ String correct_answer = rs.getString("correct_answer");
242
+ Quiz quiz = new Quiz(question_id, question, answer1, answer2, answer3, answer4, correct_answer);
243
+ quizzes.add(quiz);
244
+ }
245
+
246
+ } catch (SQLException e) {
247
+ e.printStackTrace();
248
+ quizzes.clear();
249
+ return quizzes;
250
+ } catch (ClassNotFoundException e) {
251
+ e.printStackTrace();
252
+ quizzes.clear();
253
+ return quizzes;
254
+ } finally {
255
+ // データベースを切断
256
+ if (conn != null) {
257
+ try {
258
+ conn.close();
259
+ } catch (SQLException e) {
260
+ e.printStackTrace();
261
+ quizzes.clear();
262
+ return quizzes;
263
+ }
264
+ }
265
+ }
266
+ return quizzes;
267
+ }
268
+
269
+ public String getQuizzesJson() {
270
+ String script = null;
271
+ ObjectMapper mapper = new ObjectMapper();
272
+ mapper.enable(SerializationFeature.INDENT_OUTPUT);
273
+ try {
274
+ script = mapper.writeValueAsString(getgetQuizzes());
275
+ } catch (JsonProcessingException e) {
276
+ e.printStackTrace();
277
+ }
278
+
279
+ return script;
280
+ }
281
+
282
+
283
+ }
284
+ ```

3

コード変更。

2019/03/24 11:51

投稿

Chandler_Bing
Chandler_Bing

スコア673

title CHANGED
File without changes
body CHANGED
@@ -190,4 +190,5 @@
190
190
  ```java
191
191
  String script = "{ \"name\":\"Taro Tanaka\", \"age\":30}";
192
192
  out.println(script);
193
- ```
193
+ ```
194
+ サーブレットの中でクラスを生成するとエラーになっている様な気がします。上であげた成功例はクラスの生成はしてません。

2

コード変更

2019/03/24 11:37

投稿

Chandler_Bing
Chandler_Bing

スコア673

title CHANGED
File without changes
body CHANGED
@@ -182,4 +182,12 @@
182
182
  ```
183
183
 
184
184
  以下の様に色々と大量に情報が出ますが、どこに原因があるのでしょうか。どこを調べれば原因が出てくるのかわかりません。
185
- ![イメージ説明](9313ad1969caa4afafc7eb694a5d2776.png)
185
+ ![イメージ説明](9313ad1969caa4afafc7eb694a5d2776.png)
186
+
187
+ 色々JSONのYouTube等みましたが、分かりません。しかし
188
+ servletで以下のコードだとJSで受け取れます。
189
+
190
+ ```java
191
+ String script = "{ \"name\":\"Taro Tanaka\", \"age\":30}";
192
+ out.println(script);
193
+ ```

1

コード変更。

2019/03/24 11:03

投稿

Chandler_Bing
Chandler_Bing

スコア673

title CHANGED
File without changes
body CHANGED
@@ -156,4 +156,30 @@
156
156
  これを実行すると以下のエラーが出ますがどうすればいいかわかりません。解決策をお願いします。
157
157
  ```ここに言語を入力
158
158
  重大: Servlet.service() for servlet [servlet.AjaxController] in context with path [/JavaQuiz] threw exception [サーブレットの実行により例外を投げました] with root cause [金 3 22 22:58:43 JST 2019]
159
- ```
159
+ ```
160
+
161
+ 追記
162
+ JSP内の以下の部分にブレークポイントを置き、実行しました。
163
+ ```JSP
164
+ <%@ page language="java" contentType="text/html; charset=UTF-8"
165
+ pageEncoding="UTF-8"%>
166
+ <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
167
+
168
+ <!DOCTYPE html>
169
+ <html lang="en" dir="ltr">
170
+
171
+ <head>
172
+ <meta charset="utf-8">
173
+ <title>QuizSample</title>
174
+ <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
175
+ </head>
176
+
177
+ <body>
178
+ <h2>何も表示しません</h2>
179
+ </body>
180
+ <script src="${pageContext.request.contextPath}/js/sample.js"></script>//ここにブレークポイント
181
+ </html>
182
+ ```
183
+
184
+ 以下の様に色々と大量に情報が出ますが、どこに原因があるのでしょうか。どこを調べれば原因が出てくるのかわかりません。
185
+ ![イメージ説明](9313ad1969caa4afafc7eb694a5d2776.png)