質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

サーブレット

サーブレット(Servlets)とはウェブやアプリケーションサーバー上に動くプログラムのことであり、ウェブブラウザや他のHTTPクライエントとデータベースやHTTPサーバー上のアプリケーションの中間層としての働きをします。

パスワード

パスワードは主に情報にアクセスする際に扱われます。主に、アクセス可能なユーザーを限定する手段として使われます。

ログイン

ログインは、ユーザーがコンピューターシステムにアクセスするプロセスの事を呼びます。

Q&A

解決済

1回答

4327閲覧

JSPから受け取ったユーザーIDとパスワードの情報をDAOに渡して検索を掛けたい

ypk

総合スコア80

JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

サーブレット

サーブレット(Servlets)とはウェブやアプリケーションサーバー上に動くプログラムのことであり、ウェブブラウザや他のHTTPクライエントとデータベースやHTTPサーバー上のアプリケーションの中間層としての働きをします。

パスワード

パスワードは主に情報にアクセスする際に扱われます。主に、アクセス可能なユーザーを限定する手段として使われます。

ログイン

ログインは、ユーザーがコンピューターシステムにアクセスするプロセスの事を呼びます。

0グッド

0クリップ

投稿2020/06/25 09:48

編集2020/06/25 10:00

初めまして。
現在Javaの学習をしているものです。

現在、ログイン機能を実装させようとしています。

しかし、JSPから受け取ったユーザーIDとパスワードの情報を、DAOに渡すためのサーブレットの記述がいまいちよく分かりません。

Servlet

1 // Servlet 初期化パラメータ情報 2 String userid = request.getParameter("loginid"); 3 String password = request.getParameter("userpassword");

にて受け取った情報をDAOに渡すためには、どのような記述を行えばよいのでしょうか。

もし何か、どのように記述をすればよいのか、ご存じの方いらっしゃいましたら、ご教授いただけたら幸いです。
自分もまだまだ学習中で、正直あまり分かっていないことがあります。そのため、質問に対する修正なども大歓迎です。
どうぞよろしくお願いいたします。

JSP

1<%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3<%@ page import="common.LoggerTester" %> 4<% request.setCharacterEncoding("UTF-8"); %> 5<% String loginErrorMessage = (String)request.getAttribute("loginErrorMessage"); %> 6 7 <html> 8 <head> 9 <meta charset="UTF-8"> 10 <title>書籍管理システム-<ログイン></title> 11 <link rel="stylesheet" href="header.css"> 12 </head> 13 14<div class="container"> 15 <header> 1617<div class="header"> 18 19<div class="header_logo_font"> 20<p>書籍管理システムログイン</p> 21</div> 22</div> 2324<hr> 25</header> 26 <body> 27 <div class="body"> 28 <div class="content"> 29 <div align="left"> 30 <table border="0"> 31 32 <div class="break"> 33 <font color="#fff">空欄作成のために使用。画面に映りません。</font> 34 </div> 35 36 <div class="break"> 37 <font color="#fff">空欄作成のために使用。画面に映りません。</font> 38 </div> 39 40 <% 41 LoggerTester lt = new LoggerTester(); 42 lt.outActionLog("login.jsp", "処理開始"); 43 %> 44 45 <% if(loginErrorMessage != null){ %> 46 <center><p><font color="red"><%= loginErrorMessage %></font></p></center> 47 <%} %> 48 49 <div class="break"> 50 <font color="#fff">空欄作成のために使用。画面に映りません。</font> 51 </div> 52 53 <form method="POST" action="Login"> 54 <p>ユーザID<br> 55 <input type="text" name="loginid" value="" size="24"> 56 57 <p>パスワード<br> 58 <input type="password" name="userpassword" value="" size="24"> 59 <br> 60 <input type="submit" value="ログイン"> 61 62 </form> 63 </table> 64 65 </div> 66 </div> 67 </body> 68 69</div> 70</html>

Servlet

1package exam; 2 3import java.io.IOException; 4 5import javax.servlet.ServletException; 6import javax.servlet.annotation.WebServlet; 7import javax.servlet.http.HttpServlet; 8import javax.servlet.http.HttpServletRequest; 9import javax.servlet.http.HttpServletResponse; 10import javax.servlet.http.HttpSession; 11 12import dao.UserDAO; 13 14@WebServlet("/Login") 15public class LoginServ extends HttpServlet { 16 17 public void doPost(HttpServletRequest request, HttpServletResponse response) 18 throws ServletException, IOException { 19 20 //getSessionメソッドによりセッションを開始 21 HttpSession session = request.getSession(); 22 23 24 //リクエストで受け取る文字列符号化方式を指定 25 request.setCharacterEncoding("UTF-8"); 26 27 LoggerTester lt = new LoggerTester(); 28 29 lt.outActionLog("Login", "処理開始"); 30 31 try { 32 33 // Servlet 初期化パラメータ情報 34 String userid = request.getParameter("loginid"); 35 String password = request.getParameter("userpassword"); 36 37 //UserDAOからログインデータの取得 38 UserDAO dao = new UserDAO(); 39 User user = dao.selectUser(loginid, userpassword); 40 41 //if (request.getParameter("username") == un){ 42 if (user != null) { 43 44 session.setAtribute("user", user); 45 getServletContext().getRequestDispatcher("/BookManagementListDisp.java").forward(request, response); 46 47 }else { 48 49 request.setAttribute("loginErrorMessage","入力内容に誤りがあります。"); 50 getServletContext().getRequestDispatcher("/login.jsp").forward(request, response); 51 52 53 } 54 55// DBエラーの場合、エラーメッセージをリクエストに登録し、ログイン画面にフォワード 56 }catch(Exception e){ 57 58 e.printStackTrace(); 59 request.setAttribute("dbConnectionError", "データベース接続にエラーが発生しました。"); 60 getServletContext().getRequestDispatcher("/errorMessage.jsp").forward(request, response); 61 62 } 63 } 64} 65

DAO

1package dao; 2 3import java.io.Serializable; 4import java.sql.SQLException; 5import java.util.ArrayList; 6 7public class UserDAO implements Serializable { 8 9 //アクセサメソッド 10 private String _loginid; 11 private String _userpassword; 12 private int _admin; 13 private String _name; 14 15 public void setloginid(String loginid) { 16 this._loginid = loginid; 17 } 18 public String getloginid() { 19 return this._loginid; 20 } 21 22 public void setuserpassword(String userpassword) { 23 this._userpassword = userpassword; 24 } 25 public String getuserpassword() { 26 return this._userpassword; 27 } 28 29 public void setadmin(int admin) { 30 this._admin = admin; 31 } 32 public int getadmin() { 33 return this._admin; 34 } 35 36 public void setname(String name) { 37 this._userpassword = name; 38 } 39 public String getname() { 40 return this._name; 41 } 42 43 44 //テーブルに登録されているデータを全件取得 45 //セットした情報を取得 46 public UserDAO selectUser(String loginid, String userpassword) 47      throws ClassNotFoundException,SQLException{ 48 49 UserDAO user = new UserDAO(); 50 51 //ユーザー情報1件 52 UserDAO info = new UserDAO(); 53 info.setloginid("000014"); 54 info.setuserpassword("aiueo"); 55 info.setadmin(0); 56 info.setname("あいうえお"); 57 58 // 戻り値の設定 59 return UserList; 60 } 61}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2020/06/25 09:54

>User user = dao.search(loginid, userpassword); UserDAO.search()の定義も何もないですが、何も書いてないのでしょうか。 SQLだけでもできてませんか?
ypk

2020/06/25 10:01

失礼いたしました。 >User user = dao.search(loginid, userpassword); は誤った記述でした。そのため訂正いたしました。 searchメソッドををselectUserメソッドに訂正し、DAO、Servlet両方に記述をしました。
momon-ga

2020/06/25 11:03 編集

> User user = dao.selectUser(loginid, userpassword); でいいのでは? >UserDAOについては、また別の人が作成することになっているため私は作成していません。 じゃなかった?
ypk

2020/06/25 11:19

> User user = dao.selectUser(loginid, userpassword); でいいのですね、よかったです。これでDAOが取得したデータとjspから送ってもらったデータを突き合わせることができるという認識で大丈夫ですか? >UserDAOについては、また別の人が作成することになっているため私は作成していません。 よく覚えていますね(笑) 自分は作成しませんよ、ただ、サーブレットの単体テストを実施する必要があるためそのスタブとしてDAOを作成しています。
momon-ga

2020/06/25 11:32

DBとの突き合わせはDAOがやるんでしょ? DAOとの突き合わせは必要ないんじゃ? DAOの使い方は、わからないけど、 > if (user != null) { でいいんじゃないの?
ypk

2020/06/25 11:44

>DBとの突き合わせはDAOがやるんでしょ? おっしゃる通りです。 >DAOとの突き合わせは必要ないんじゃ? これについては、サーブレットの単体テスト項目「ログイン成功時にセッション情報を作成できるか」 を検証するために必要になります。 そのため、私が行いたいことはユーザーID(今回は"000014")とパスワード(今回は"aiueo")をJSPのPOSTで送ってもらい、それをサーブレットで受け取ります。 それをDAOが持っている情報と突き合わせ、ユーザーIDとパスワードが一致しているのならサーブレット側でセッション情報を作成したいと考えています。 > if (user != null) { はユーザーIDとパスワード情報が一致した結果DAO側からnullが返されなかったときにセッションが作成されるための条件分岐として書いています。 しかし、私がよく分からないことは、 サーブレットがJSPから受け取った情報を「どのようなソースコードで」送るのか、突き合わせをするのか という点が分かっておらず上記の点をソースコードで表現することができず困っています。 説明が拙くて恐縮ですが、どうぞよろしくお願いいたします。 質問などございましたら教えていただけると嬉しいです。 JSPから送られてきた情報とあらかじめDAO
guest

回答1

0

ベストアンサー

あぁ。やっとわかった。

私が行いたいことはユーザーID(今回は"000014")とパスワード(今回は"aiueo")をJSPのPOSTで送ってもらい、それをサーブレットで受け取ります。

それをDAOが持っている情報と突き合わせ、ユーザーIDとパスワードが一致しているのならサーブレット側でセッション情報を作成したいと考えています。

DAOから情報を取得するのでなく、DAO側(スタブ)で情報を突き合わせてください。

java

1public UserDAO selectUser(String loginid, String userpassword) 2      throws ClassNotFoundException,SQLException{ 3 4 // idかpassが違うならnullを返す 5 if(!"000014".equals(loginid) || !"aiueo".equals(userpassword)) 6 return null; 7 8 UserDAO user = new UserDAO(); 9 10 //ユーザー情報1件 11 UserDAO info = new UserDAO(); 12 info.setloginid("000014"); 13 info.setuserpassword("aiueo"); 14 info.setadmin(0); 15 info.setname("あいうえお"); 16 17 // 戻り値の設定 18 return info;

投稿2020/06/25 11:53

momon-ga

総合スコア4820

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ypk

2020/06/25 12:02

ご丁寧にありがとうございました。 ちなみになのですが、サーブレット側のソースコードについては特に加筆・修正を行う必要はないでしょうか、、、、? というのも、現在のソースコードだと User user = dao.selectUser(loginid, userpassword); のあたりに赤波線が出てきてしまい、、、 お手数をおかけしますが、どうぞよろしくお願いいたします。 ---- package exam; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import common.LoggerTester import dao.UserDAO; @WebServlet("/Login") public class LoginServ extends HttpServlet { public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //getSessionメソッドによりセッションを開始 HttpSession session = request.getSession(); //リクエストで受け取る文字列符号化方式を指定 request.setCharacterEncoding("UTF-8"); LoggerTester lt = new LoggerTester(); lt.outActionLog("Login", "処理開始"); try { // Servlet 初期化パラメータ情報 String loginid = request.getParameter("loginid"); String userpassword = request.getParameter("userpassword"); //UserDAOからログインデータの取得 UserDAO dao = new UserDAO(); User user = dao.selectUser(loginid, userpassword); //if (request.getParameter("username") == un){ if (user != null) { session.setAtribute("user", user); getServletContext().getRequestDispatcher("/BookManagementListDisp.java").forward(request, response); }else { request.setAttribute("loginErrorMessage","入力内容に誤りがあります。"); getServletContext().getRequestDispatcher("/login.jsp").forward(request, response); } // DBエラーの場合、エラーメッセージをリクエストに登録し、エラー画面にフォワード }catch(Exception e){ e.printStackTrace(); request.setAttribute("dbConnectionError", "データベース接続にエラーが発生しました。"); getServletContext().getRequestDispatcher("/errorMessage.jsp").forward(request, response); } } }
momon-ga

2020/06/25 12:17

> public UserDAO selectUser UserDAOとUserが違うものなら、修正してください。 前の質問でもコメントしましたが、UserDAOの仕様がわからないの想像でしか回答できないです。 UserDAOの仕様を知ってるのはypkさんだけなんです。
ypk

2020/06/25 12:35

すみません、いろいろありがとうございました。 また機会があればよろしくお願いします。
momon-ga

2020/06/25 13:08

質問には答えますが、せめて質問のタイトルと内容を聞きたいことに合わせてほしいです。 タイトル:JSPから受け取ったユーザーIDとパスワードの情報をDAOに渡して検索を掛けたい 質問:DAOに渡すためのサーブレットの記述がいまいちよく分かりません。 本当の内容:サーブレットの単体テストを実施する必要があるためそのスタブの作り方
m.ts10806

2020/06/25 20:27

なるほど。これまでの質問を把握してないとアドバイスが難しいわけですね。 質問者さんへ。 質問は、背景や経緯含めて、単体で完結できるものが望ましいです。 以前の質問と関連性があるのなら、質問本文にその質問へのリンクを記載してください。 前提が多すぎると、何回もヒアリングしないといけなくなります。
ypk

2020/06/26 02:02

皆さんいろいろありがとうございます。 一つの質問のみで、今後は完結することができるようタイトルやリンクの記載などに注意を払って参ります。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問