質問編集履歴

1

書式、コードブロックの修正

2019/05/16 01:41

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -8,35 +8,35 @@
8
8
 
9
9
  「スッキリわかるサーブレット&JSP」という書籍を参考に、
10
10
 
11
- **eclipseで、WEBアプリケーションの設計を練習するための動的プロジェクト、"sukkiliShop"のログイン部分**を作成中です。
11
+ eclipseで、WEBアプリケーションの設計を練習するための動的プロジェクト、"sukkiliShop"のログイン部分を作成中です。
12
12
 
13
13
 
14
14
 
15
15
  書籍の設定では、  
16
16
 
17
- **・ サーブレットからフォーワードされたJSPの画面にある「ログイン」をクリックすると、当該サーブレットにリンクされていて、一度こちらにリクエストしてからdoGetメソッドでログイン画面にフォーワードされる。**
17
+ ・ サーブレットからフォーワードされたJSPの画面にある「ログイン」をクリックすると、当該サーブレットにリンクされていて、一度こちらにリクエストしてからdoGetメソッドでログイン画面にフォーワードされる。
18
-
19
-
20
-
18
+
19
+
20
+
21
- **・ ログイン画面でuser_id と password を入力し、その情報が DB に保存されたものと相違がなければ、結果画面に遷移する、**
21
+ ・ ログイン画面でuser_id と password を入力し、その情報が DB に保存されたものと相違がなければ、結果画面に遷移する、
22
22
 
23
23
  という流れになっています。
24
24
 
25
25
 
26
26
 
27
- 設計手法として、まず**「BO と DAO に当たるクラスと、そのテストを行うクラス(入力情報ではなく、テストクラスに直接値を代入する静的なテスト)のサーブレットを作成、実行して、この段階で誤りがないか確認する」** とあるのですが、
27
+ 設計手法として、まず「BO と DAO に当たるクラスと、そのテストを行うクラス(入力情報ではなく、テストクラスに直接値を代入する静的なテスト)のサーブレットを作成、実行して、この段階で誤りがないか確認する」 とあるのですが、
28
-
28
+
29
- **①テストクラスのサーブレット AccountDAOTest を右「クリック -> アプリケーションで実行」すると、接続に失敗します。**
29
+ ①テストクラスのサーブレット AccountDAOTest を右「クリック -> アプリケーションで実行」すると、接続に失敗します。
30
30
 
31
31
  (例外処理の表示によりドライバクラスは見つかっているようです)
32
32
 
33
33
 
34
34
 
35
- そこで、**「試したこと」⑶ の状態**にあって、行き詰まってしまいました。
35
+ そこで、「試したこと」⑶ の状態にあって、行き詰まってしまいました。
36
-
37
-
38
-
36
+
37
+
38
+
39
- **書籍ではOSは Windows、データベースはH2 DBの使用を前提**としているのですが、私は** Mac **を使用していて、ネット上に H2DB + mac の情報が少なく、接続等が上手くいかなかったので、情報量が多かった** mySql を使用**しています。
39
+ 書籍ではOSは Windows、データベースはH2 DBの使用を前提としているのですが、私はMac を使用していて、ネット上に H2DB + mac の情報が少なく、接続等が上手くいかなかったので、情報量が多かった mySql を使用しています。
40
40
 
41
41
 
42
42
 
@@ -140,242 +140,244 @@
140
140
 
141
141
  ```Java
142
142
 
143
+
144
+
145
+ package dao;
146
+
147
+
148
+
149
+ import java.sql.Connection;
150
+
151
+ import java.sql.DriverManager;
152
+
153
+ import java.sql.PreparedStatement;
154
+
155
+ import java.sql.ResultSet;
156
+
157
+ import java.sql.SQLException;
158
+
159
+
160
+
161
+ import model.Account;
162
+
163
+ import model.Login;
164
+
165
+
166
+
167
+ public class AccountDAO{
168
+
169
+ private final String DRIVER_NAME = "com.mysql.jdbc.Driver";
170
+
171
+ //private final String JDBC_URL="jdbc:mysql://localhost/sukkiliShop?autoReconnect=true&useSSL=false";
172
+
173
+ private final String JDBC_URL="jdbc:mysql://localhost/sukkiliShop";
174
+
175
+ private final String DB_USER = "root";
176
+
177
+ private final String DB_PASS = " ";
178
+
179
+
180
+
181
+ public Account findByLogin(Login login) {
182
+
183
+ Connection conn = null;
184
+
185
+ Account account =null;
186
+
187
+ try {
188
+
189
+ Class.forName(DRIVER_NAME).newInstance();
190
+
191
+ conn = DriverManager.getConnection(JDBC_URL, DB_USER, DB_PASS);
192
+
193
+ String sql="SELECT user_id,pass,mail,name,age FROM ACCOUNT WHERE user_id = ? AND pass = ?";
194
+
195
+ PreparedStatement pStmt = conn.prepareStatement(sql);
196
+
197
+ pStmt.setString(1,login.getUserId());
198
+
199
+ pStmt.setString(2,login.getPass());
200
+
201
+ ResultSet rs = pStmt.executeQuery();
202
+
203
+ if(rs.next()) {
204
+
205
+ String userId = rs.getString("user_id");
206
+
207
+ String pass = rs.getString("pass");
208
+
209
+ String mail = rs.getString("mail");
210
+
211
+ String name = rs.getString("name");
212
+
213
+ int age = rs.getInt("age");
214
+
215
+
216
+
217
+ account = new Account(userId,pass,mail,name,age);
218
+
219
+ }
220
+
221
+ }catch(SQLException e) {
222
+
223
+ e.printStackTrace();
224
+
225
+ System.out.println("接続に失敗しました");
226
+
227
+ return null;
228
+
229
+ }catch(ClassNotFoundException e) {
230
+
231
+ e.printStackTrace();
232
+
233
+ System.out.println("ドライバが見つかりません");
234
+
235
+ return null;
236
+
237
+ }catch(Exception e) {
238
+
239
+ e.printStackTrace();
240
+
241
+ System.out.println("接続に失敗しました");
242
+
243
+ return null;
244
+
245
+ }finally {
246
+
247
+ if(conn != null) {
248
+
249
+ try {
250
+
251
+ conn.close();
252
+
253
+ } catch (SQLException e) {
254
+
255
+ // TODO 自動生成された catch ブロック
256
+
257
+ e.printStackTrace();
258
+
259
+ return null;
260
+
261
+ }
262
+
263
+ }
264
+
265
+ }return account;
266
+
267
+ }
268
+
269
+ }
270
+
271
+
272
+
273
+
274
+
275
+ package test;
276
+
277
+
278
+
279
+ import dao.AccountDAO;
280
+
281
+ import model.Account;
282
+
283
+ import model.Login;
284
+
285
+
286
+
287
+ public class AccountDAOTest{
288
+
289
+ public static void main(String[] args) {
290
+
291
+ testFindByLogin1();
292
+
293
+ testFindByLogin2();
294
+
295
+ }
296
+
297
+ public static void testFindByLogin1() {
298
+
299
+ Login login = new Login("minato","1234");
300
+
301
+ AccountDAO dao = new AccountDAO();
302
+
303
+ Account result = dao.findByLogin(login);
304
+
305
+ if(result!=null && result.getUserId().equals("minato")
306
+
307
+ && result.getPass().equals("1234")
308
+
309
+ && result.getMail().equals("minato@sukili.com")
310
+
311
+ && result.getName().equals("湊 雄輔")
312
+
313
+ && result.getAge()==23) {
314
+
315
+ System.out.println("testFindByLogin1:succsess");
316
+
317
+ }else {
318
+
319
+ System.out.println("testFindByLogin1:failed");
320
+
321
+ }
322
+
323
+ }
324
+
325
+ public static void testFindByLogin2() {
326
+
327
+ Login login = new Login("minato","12345");
328
+
329
+ AccountDAO dao =new AccountDAO();
330
+
331
+ Account result=dao.findByLogin(login);
332
+
333
+ if(result == null) {
334
+
335
+ System.out.println("testFindByLogin2:succsess");
336
+
337
+ }else {
338
+
339
+ System.out.println("testFindByLogin2:failed");
340
+
341
+ }
342
+
343
+ }
344
+
345
+ }
346
+
347
+ ```
348
+
349
+
350
+
351
+ ### 試したこと
352
+
353
+
354
+
355
+ ⑴接続先 DB の名前,テーブル名などの確認
356
+
357
+ ⑵結局分からず中断しましたが、**SSLを使用して接続しようとしてみましたが、関係あるのでしょうか??**
358
+
359
+
360
+
361
+
362
+
363
+ **⑶同じワークスペースで作った別の動的プロジェクト(DB使用)**は完成していて、**「プロジェクト名右クリック -> サーバで実行」で最後の処理まで問題なく表示できます。**
364
+
365
+ そこで試しに、**残りのビューやコントローラのサーブレット・JSPを作成し、プロジェクト名から実行できる様に、WEB-INF直下に最初の画面を表示するindex.jspを作成**しましたが、**今度は 404 NotFound が表示**されてしまいます。
366
+
367
+
368
+
369
+ ※DB名は sukkiliShop にして、ログイン情報をテーブル ACCOUNT に保存しています。JDBCのURL、ユーザーネーム、パスワードは当該別プロジェクトと同じmのを使用しています。
370
+
371
+
372
+
373
+
374
+
375
+ ### 補足情報(FW/ツールのバージョンなど)
376
+
143
377
  ※「該当のソースコード」は全てではありませんが、多くなるので、とりあえず接続部分とテストのコードを記載します。
144
378
 
145
379
 
146
380
 
147
- package dao;
148
-
149
-
150
-
151
- import java.sql.Connection;
152
-
153
- import java.sql.DriverManager;
154
-
155
- import java.sql.PreparedStatement;
156
-
157
- import java.sql.ResultSet;
158
-
159
- import java.sql.SQLException;
160
-
161
-
162
-
163
- import model.Account;
164
-
165
- import model.Login;
166
-
167
-
168
-
169
- public class AccountDAO{
170
-
171
- private final String DRIVER_NAME = "com.mysql.jdbc.Driver";
172
-
173
- //private final String JDBC_URL="jdbc:mysql://localhost/sukkiliShop?autoReconnect=true&useSSL=false";
174
-
175
- private final String JDBC_URL="jdbc:mysql://localhost/sukkiliShop";
176
-
177
- private final String DB_USER = "root";
178
-
179
- private final String DB_PASS = " ";
180
-
181
-
182
-
183
- public Account findByLogin(Login login) {
184
-
185
- Connection conn = null;
186
-
187
- Account account =null;
188
-
189
- try {
190
-
191
- Class.forName(DRIVER_NAME).newInstance();
192
-
193
- conn = DriverManager.getConnection(JDBC_URL, DB_USER, DB_PASS);
194
-
195
- String sql="SELECT user_id,pass,mail,name,age FROM ACCOUNT WHERE user_id = ? AND pass = ?";
196
-
197
- PreparedStatement pStmt = conn.prepareStatement(sql);
198
-
199
- pStmt.setString(1,login.getUserId());
200
-
201
- pStmt.setString(2,login.getPass());
202
-
203
- ResultSet rs = pStmt.executeQuery();//SELECT文の結果格納
204
-
205
- if(rs.next()) {
206
-
207
- String userId = rs.getString("user_id");
208
-
209
- String pass = rs.getString("pass");
210
-
211
- String mail = rs.getString("mail");
212
-
213
- String name = rs.getString("name");
214
-
215
- int age = rs.getInt("age");
216
-
217
-
218
-
219
- account = new Account(userId,pass,mail,name,age);
220
-
221
- }
222
-
223
- }catch(SQLException e) {
224
-
225
- e.printStackTrace();
226
-
227
- System.out.println("接続に失敗しました");
228
-
229
- return null;
230
-
231
- }catch(ClassNotFoundException e) {
232
-
233
- e.printStackTrace();
234
-
235
- System.out.println("ドライバが見つかりません");
236
-
237
- return null;
238
-
239
- }catch(Exception e) {
240
-
241
- e.printStackTrace();
242
-
243
- System.out.println("接続に失敗しました");
244
-
245
- return null;
246
-
247
- }finally {
248
-
249
- if(conn != null) {
250
-
251
- try {
252
-
253
- conn.close();
254
-
255
- } catch (SQLException e) {
256
-
257
- // TODO 自動生成された catch ブロック
258
-
259
- e.printStackTrace();
260
-
261
- return null;
262
-
263
- }
264
-
265
- }
266
-
267
- }return account;
268
-
269
- }
270
-
271
- }
272
-
273
-
274
-
275
-
276
-
277
- package test;
278
-
279
-
280
-
281
- import dao.AccountDAO;
282
-
283
- import model.Account;
284
-
285
- import model.Login;
286
-
287
-
288
-
289
- public class AccountDAOTest{
290
-
291
- public static void main(String[] args) {
292
-
293
- testFindByLogin1();
294
-
295
- testFindByLogin2();
296
-
297
- }
298
-
299
- public static void testFindByLogin1() {
300
-
301
- Login login = new Login("minato","1234");
302
-
303
- AccountDAO dao = new AccountDAO();
304
-
305
- Account result = dao.findByLogin(login);
306
-
307
- if(result!=null && result.getUserId().equals("minato")
308
-
309
- && result.getPass().equals("1234")
310
-
311
- && result.getMail().equals("minato@sukili.com")
312
-
313
- && result.getName().equals("湊 雄輔")
314
-
315
- && result.getAge()==23) {
316
-
317
- System.out.println("testFindByLogin1:succsess");
318
-
319
- }else {
320
-
321
- System.out.println("testFindByLogin1:failed");
322
-
323
- }
324
-
325
- }
326
-
327
- public static void testFindByLogin2() {
328
-
329
- Login login = new Login("minato","12345");
330
-
331
- AccountDAO dao =new AccountDAO();
332
-
333
- Account result=dao.findByLogin(login);
334
-
335
- if(result == null) {
336
-
337
- System.out.println("testFindByLogin2:succsess");
338
-
339
- }else {
340
-
341
- System.out.println("testFindByLogin2:failed");
342
-
343
- }
344
-
345
- }
346
-
347
- }
348
-
349
- ```
350
-
351
-
352
-
353
- ### 試したこと
354
-
355
-
356
-
357
- ⑴接続先 DB の名前,テーブル名などの確認
358
-
359
- ⑵結局分からず中断しましたが、**SSLを使用して接続しようとしてみましたが、関係あるのでしょうか??**
360
-
361
-
362
-
363
-
364
-
365
- **⑶同じワークスペースで作った別の動的プロジェクト(DB使用)**は完成していて、**「プロジェクト名右クリック -> サーバで実行」で最後の処理まで問題なく表示できます。**
366
-
367
- そこで試しに、**残りのビューやコントローラのサーブレット・JSPを作成し、プロジェクト名から実行できる様に、WEB-INF直下に最初の画面を表示するindex.jspを作成**しましたが、**今度は 404 NotFound が表示**されてしまいます。
368
-
369
-
370
-
371
- ※DB名は sukkiliShop にして、ログイン情報をテーブル ACCOUNT に保存しています。JDBCのURL、ユーザーネーム、パスワードは当該別プロジェクトと同じmのを使用しています。
372
-
373
-
374
-
375
-
376
-
377
- ### 補足情報(FW/ツールのバージョンなど)
378
-
379
381
 
380
382
 
381
383
  Server version: Apache Tomcat/7.0.91