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

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

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

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

JSP

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

Java

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

servlet

Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。

Q&A

解決済

2回答

4751閲覧

修正DBから抽出したデータをjspで表示したい

EmaS

総合スコア2

Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

JSP

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

Java

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

servlet

Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。

0グッド

0クリップ

投稿2020/08/01 04:58

編集2020/08/03 08:11

Login機能を作っているのですが、DBから抽出したデータを画面で表示ができません。
どなたか、お知恵をおかし頂けないでしょうか?問題解決が出来なくて困っています。。
###前提・実現

・前提:
1:AP:Tomcat
2: JSP and Servletを使用
3:Account And Password の入力check
4:以下のSQLを使用してデータの抽出をすること
"Select NAME , ID from USER where ACCOUNT =? And PASWORD =? And DELETE_FLAG=0 "
5:検索処理エラーの場合、"error has occured in login-process"と表示
6:検索結果が0件の場合、"UserName or PW is wrong"と表示

・実現:
DBから抽出した値をlogin_home.jsp画面で表示したい。

できないこと
1:DBからデータの抽出データUserdtoクラスの各フィールド(name and userid)に値を保持していて、その値を取得してlogin_home画面で表示

###わからないこと
1:debugしてname and userid field にそれぞれdbから抽出したデータが入っていることを確認済みなのですが、何故か結果が表示されるないのかがわからない
見直しても上手く動いてくれません。
###SQL(Create and Insert )

SQL

1Create Table 2=============== 3 4CREATE TABLE USER ( 5 ID NUMBER(3,0) 6 ,ACCOUNT VARCHAR2(50) not null 7 ,NAME VARCHAR2(60) 8 ,PASSWORD VARCHAR2(50) 9 ,ADMIN_FLAG char(1) 10 ,DELETE_FLAG char(1) 11 ,REGIST_DATE date DEFAULT SYSDATE 12 ,UPDATE_DATE date 13 ,CONSTRAINT MST_USER_PK PRIMARY KEY(ID) 14 ,CONSTRAINT MST_USER_UK UNIQUE (ACCOUNT)); 15 16==============================================--- 17Insert: 18INSERT INTO USER(ID, ACCOUNT,NAME,PASSWORD,ADMIN_FLAG,DELETE_FLAG) VALUES (003,'jsp123@gmail.com','Grace','Grace12334567', '0','0'); 19

###Jsp

<%@ page contentType="text/html;charset=UTF-8"%> <!DOCTYPE html> <html> <head> <meta http-equiv="Context-Type" content="text/html;charset=UTF-8"> <title>ログインホーム画面</title> <link rel="stylesheet" href="../css/login_home.css"> </head> <body> <form name="Logout" method="post" action="/Login/jsp/login.jsp"> <label><span class="login_home">Login-HOME</span> </label><br> <p> <% String id = (String)session.getAttribute("UserID"); %> </p> <p> <%=id %> </p> <p> <% String name= (String) session.getAttribute("NAME"); %> </p> <p> <%=name %> </p> <table class="form_area"> <tr> <td>ユーザーID</td> </tr> <tr> <td>ユーザー名</td> </tr> </table> <br /> <div class="button_area"> <input class="logout " type="submit" value="Logout" /> <%if(session.getAttribute("userInfo")!=null){ %> <%session.invalidate(); %> <% }%> </div> </form> </body> </html>

###Dto

java

1 2public class UserDto { 3 /* UserAccount */ 4 private String account; 5 /* UserID */ 6 private int userid; 7 /* Password */ 8 private String password; 9 /* UserName */ 10 private String name; 11 12 /* getter */ 13 14 15 16 public String getACCOUNT() { 17 return account; 18 } 19 20 public int getUserID() { 21 return userid; 22 } 23 24 public String getPASSWORD() { 25 return password; 26 } 27 28 public String getUserName() { 29 return name; 30 } 31 /* setter */ 32 33 public void setACCOUNT(String account) { 34 this.account = account; 35 } 36 37 public void setUserID(int userid) { 38 this.userid = userid; 39 } 40 41 42 public void setPASSWORD(String password) { 43 this.password = password; 44 } 45 46 public void setUserName(String name) { 47 this.name = name; 48 } 49

###Dao

Java

1 2 3import java.sql.Connection; 4 5import java.sql.DriverManager; 6import java.sql.PreparedStatement; 7import java.sql.ResultSet; 8import java.sql.SQLException; 9 10import LoginCheckServlet; 11import userDto.UserDto; 12 13 14public class LoginDao { 15 // DB connection 16 private static final String HOSTNAME = "0.0.0.0"; 17 private static final String USERNAME = "*****"; 18 private static final String PW = "********"; 19 private static final String SID = "XE"; 20 private static final String URL = "jdbc:oracle:thin:@"; 21 22 private static final String SQL = "Select NAME , ID from USER where ACCOUNT =? And PASSWORD =? And DELETE_FLAG=0 "; 23 24 25 26 27 public UserDto Search(String userAcc, String pw) throws SQLException, Exception { 28 29 30 ResultSet rs; 31 UserDto userDto = null; 32 try (Connection con = this.getConnection(); PreparedStatement ps = con.prepareStatement(SQL)) { 33 ps.setString(1, userAcc); 34 ps.setString(2, pw); 35 36 rs = ps.executeQuery(); 37 while (rs.next()) { 38 39 userDto = new UserDto(); 40 userDto.setUserID(rs.getInt("ID")); 41 userDto.setUserName(rs.getString("NAME")); 42 43 44 } 45 } catch (SQLException e) { 46 e.printStackTrace(); 47 48 } catch (Exception e) { 49 System.exit(1); 50 } 51 52 return userDto; 53 } 54 55 56 57 58 private Connection getConnection() throws SQLException, ClassNotFoundException { 59 60 Class.forName("oracle.jdbc.driver.OracleDriver"); 61 62 Connection con = DriverManager.getConnection(URL + HOSTNAME + ":1521:" + SID, USERNAME, PW); 63 return con; 64 65 } 66 67 public static void main(String args[]) { 68 69 } 70 71}

###Servlet

@WebServlet("/LoginServlet") public class LoginCheckServlet extends HttpServlet { private static final long serialVersionUID = 1L; private static final byte MAX = 50; /** * @see HttpServlet#HttpServlet() */ public LoginServlet() { super(); } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse * response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse * response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // Start session HttpSession session = request.getSession(); String userAcc = request.getParameter("UserAcc"); String pw = request.getParameter("PW"); if (!(checkUser(userAcc) && checkPW(pw))) { request.setAttribute("ErrorMessage", errorMessage); // login.jspに遷移 RequestDispatcher dispatcher = request.getRequestDispatcher("/jsp/login.jsp"); dispatcher.forward(request, response); return; } LoginDao dao = new LoginDao(); try {  UserDto dto= dao.Search(userAcc, pw);               String name = dto.getUserName();//Return Null int userid = dto.getUserID();//return 0 if (name != null) { session.setAttribute("Name", name); session.setAttribute("UserID", userid); RequestDispatcher dispatcher = request.getRequestDispatcher("/jsp/login_home.jsp"); dispatcher.forward(request, response); } else { request.setAttribute("ErrorMessage", "UserAcc or PW is wrong"); RequestDispatcher dispatcher = request.getRequestDispatcher("/jsp/login.jsp"); dispatcher.forward(request, response); return; } } catch (Exception e) { e.printStackTrace(); } } String errorMessage; public boolean checkUser(String userAcc) { if (userAcc == null || userAcc.isEmpty()) { this.errorMessage = "Please type in your UserAcc"; return false; } if (userAcc.getBytes().length > MAX) { this.errorMessage = "UserAcc should be typed in less than 50 bytes"; return false; } return true; } public boolean checkPW(String pw) { if (pw == null || pw.isEmpty()) { this.errorMessage = "Please type in your PW"; return false; } if (pw.getBytes().length > MAX) { this.errorMessage = "Please type in your PW less than 50 byte"; return false; } return true; } }

###解決したいこと
・Login_home.jspに遷移してDBから抽出したデータを表示したい......Done
・UserDtoクラスの各フィールドにDBから抽出した値を取得.......Done
・Error回避

###試したこと
以下のコードで値を取得して各変数に入れようとしていますが、上手く行きませんでした。(dbから抽出した値を取得できなかった)
UserDto dto = new UserDto();

String name = dto.getUserName();
int userid = dto.getUserID();

###追記
Debugした結果
各フィールドに値を保持していますが、やっぱりNull and 0がかえります。
userid
name
###追記2 Error
java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Stringが発生してしまいました。

Login_home.jsp

JSP

113: <p> 214: <% 315: String id = (String)session.getAttribute("UserID");//ここでError 416: %> 517: </p> 618: <p>

###期待結果
login_home画面
ユーザID 3
ユーザ名 Grace

###補足情報
Oracle 18c
Java 1.8
Tomcat_version_9
Eclipse を使用

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

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

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

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

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

guest

回答2

0

ベストアンサー

追記の画面キャプチャを見た限りでは、nullや0になっておらず、値が取得できているようです。

値が取れているとして、サーブレットにて

java

1String name = dto.getUserName(); 2int userid = dto.getUserID(); 3 4if (name != null) { 5 session.setAttribute("Name", name); 6 session.setAttribute("UserID", userid);

JSPでこれらの値をセッションから取得するには、型をあわせること、名前(大文字小文字も判定される)を合わせなければなりません。プリミティブ型を使った場合は、そのラッパークラスを指定します。

html

1Integer id = (Integer)session.getAttribute("UserID"); 2 3String name= (String)session.getAttribute("Name");

投稿2020/08/03 09:05

A-pZ

総合スコア12011

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

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

0

LoginServletについて、コード全部が提示されていないので推測ですが、

Java

1...LoginServletより一部引用 2LoginDao dao = new LoginDao(); 3 4try { 5 dao.Search(userAcc, pw); 6 7 String name = dto.getUserName();//Return Null 8 int userid = dto.getUserID();//return 0 9... 10

となっています。変数daoは、LoginDaoのインスタンスオブジェクトで、UserDto LoginDao#Search()メソッドから、UserDtoのインスタンスオブジェクトを返すはずです。ですが、上記の引用コード中、dao.Searchメソッドは実行しっぱなしでdtoにセットしていません。これでは恐らく空のままのはずです。

※上記とは違う部分がNGだと分かっているのであれば、その場所を明示してください。

投稿2020/08/01 05:49

dodox86

総合スコア9183

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

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

EmaS

2020/08/03 02:16 編集

返信が遅くなり申し訳ありません。 お忙しいところ対応して頂きありがとうございます。 また、Login Servlet classにvalidation check のコードを追記致しました。 "dao.Searchメソッドは実行しっぱなしでdtoにセットしていません。"に対してUserDto Dao=dao.Search()と修正すれば良いということですか?
dodox86

2020/08/03 02:38

ん? その部分はご自分で書いたコードではないのですか? Search()メソッドで正しいログインユーザーかどうか検索しているのだと思っているのですが、それで得られたユーザーのインスタンスオブジェクトを、ご自分でどう取りまわしているか、と言う問題です。UserDto Dao=dao.Search(); だけのコードで動くかどうかは、全体のコードに関係するので分かりません。 その直後のコードを見ると、String name = dto.getUserName();//Return Null となっていて、dtoを既に使っています。コンパイルエラーが無かったのであれば、dtoのフィールドが既に存在しているはずです。
EmaS

2020/08/03 08:09 編集

"Search()メソッドで正しいログインユーザーかどうか検索しているのだと思っているのですが、"自分で書いたコードです。 すみません。UserDto dto = new UserDto();を削除して UserDto dto = dao.Search (userAcc, pw);に書き換えたら問題解決しました。 ありがとうございました。
EmaS

2020/08/03 08:02

あとは、login_home.jsp側でparameterを受けっと出力させたいのですが、その時にClassCastExceptionが発生してしまいました。恐らく、Login_home.jspでSting型で値(IntegerのID)を受け取ってそれをキャストしようとしたからだとおもうのですが。。。 Error に関しましては追記致しますね。
dodox86

2020/08/03 08:10

一番最初に指摘させてもらった時点のコードとは変わっているので、私の回答、コメントと少々かみ合わないないものになっていますね。いずれにせよSearchメソッドの結果を正しく利用していないのがまずひとつの原因だった、と言うわけです。
dodox86

2020/08/03 08:18

追記2 Errorを見て: DTOで、UserIDはint型なのですから、 String id = String.valueOf((int)session.getAttribute("UserID")); ではないですかね。int型からString型へ変換しなければいけません。
dodox86

2020/08/03 08:23

session.getAttribute()が返すのはObject型だから、Integerでないとダメかもしれません。その辺りも意識して改修してみてください。
EmaS

2020/08/04 01:18

はい。Integerに変更したら解決しました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問