🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Java

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

Q&A

解決済

1回答

1220閲覧

ログイン処理が上手くできません。

ggakusei

総合スコア0

Java

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

0グッド

0クリップ

投稿2021/03/30 07:13

編集2021/03/30 11:16

前提・実現したいこと

ここに質問の内容を詳しく書いてください。
javaを学習中の初心者です。javaでログイン機能を作っています。MVCモデルを一応意識して作りたいと考えています。

発生している問題・エラーメッセージ

eclips上で目立ったエラーメッセージは無いのですが、上手くログイン処理ができていない状態です。
具体的には、TopPage.jspを表示するところまではできています。そこからデータベースにあらかじめ登録しておいた情報を入力してもResult.jspには移動せず、TopPage.jspのままになります。URLはtoppageからLoginServletに変わっています。eclipsのコンソールを見ましたが異常はなかったと思います。
<トップページ>
イメージ説明
<情報入力後>
イメージ説明

該当のソースコード

java

1package model; 2 3public class LoginBean { 4 5 private int id; 6 private String name; 7 private String password; 8 9 public int getId() { 10 return id; 11 } 12 public void setId(int id) { 13 this.id = id; 14 } 15 public String getName() { 16 return name; 17 } 18 public void setName(String name) { 19 this.name = name; 20 } 21 public String getPassword() { 22 return password; 23 } 24 public void setPassword(String password) { 25 this.password = password; 26 } 27}

java

1package model; 2 3import java.sql.Connection; 4import java.sql.DriverManager; 5import java.sql.PreparedStatement; 6import java.sql.ResultSet; 7import java.sql.SQLException; 8 9public class LoginDBdao { 10 private Connection con = null; 11 private ResultSet rs = null; 12 private PreparedStatement ps = null; 13 14 private String url = "jdbc:mysql://localhost:3306/loginmaster?characterEncoding=UTF-8&serverTimezone=JST&autoReconnect=true&useSSL=false"; 15 private String user = "user"; 16 private String pass = "password"; 17 18 public LoginBean select() throws SQLException { 19 LoginBean bean = new LoginBean(); 20 21 try { 22 //JDBCドライバ 23 Class.forName("com.mysql.jdbc.Driver"); 24 25 //DB接続 26 con = DriverManager.getConnection(url, user, pass); 27 28 //SQL文 29 ps = con.prepareStatement("select * from loginmaster"); 30 31 //SQL文の実行 32 rs = ps.executeQuery(); 33 34 if (!rs.next()) { 35 return null; 36 } 37 38 bean.setName(rs.getString("name")); 39 bean.setPassword(rs.getString("password")); 40 41 } catch (ClassNotFoundException e) { 42 // TODO 自動生成された catch ブロック 43 e.printStackTrace(); 44 } 45 return bean; 46 } 47 48 //DB切断 49 public void close() { 50 try { 51 if (con != null) { 52 con.close(); 53 } 54 if (ps != null) { 55 ps.close(); 56 } 57 if (rs != null) { 58 rs.close(); 59 } 60 } catch (SQLException e) { 61 e.printStackTrace(); 62 } 63 }} 64

java

1package controller; 2 3import java.io.IOException; 4 5import javax.servlet.RequestDispatcher; 6import javax.servlet.ServletException; 7import javax.servlet.annotation.WebServlet; 8import javax.servlet.http.HttpServlet; 9import javax.servlet.http.HttpServletRequest; 10import javax.servlet.http.HttpServletResponse; 11 12@WebServlet("/toppage") 13public class TopPageServlet extends HttpServlet { 14 private static final long serialVersionUID = 1L; 15 16 17 public TopPageServlet() { 18 super(); 19 } 20 21 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 22 RequestDispatcher rd = request.getRequestDispatcher("/view/TopPage.jsp"); 23 rd.forward(request, response); 24 } 25 26 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 27 // TODO Auto-generated method stub 28 doGet(request, response); 29 } 30 31}

java

1<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 2<!DOCTYPE html> 3<html lang="ja"> 4 <head> 5 <meta charset="UTF-8"> 6 <title>ログイン</title> 7 </head> 8 9 <body> 10 <h1>ログイン</h1> 11 <form action="LoginServlet" method="post"> 12 <label>名前</label><br> 13 <input type="text" name="name"><br> 14 15 <label>パスワード</label><br> 16 <input type="text" name="password"><br> 17 18 <input type="submit" value="送信する"> 19 20 </form> 21 </body> 22</html>

java

1package controller; 2 3import java.io.IOException; 4import java.sql.SQLException; 5 6import javax.servlet.ServletException; 7import javax.servlet.annotation.WebServlet; 8import javax.servlet.http.HttpServlet; 9import javax.servlet.http.HttpServletRequest; 10import javax.servlet.http.HttpServletResponse; 11import javax.servlet.http.HttpSession; 12 13import model.LoginBean; 14import model.LoginDBdao; 15 16@WebServlet("/LoginServlet") 17public class LoginServlet extends HttpServlet { 18 private static final long serialVersionUID = 1L; 19 20 public LoginServlet() { 21 super(); 22 } 23 24 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 25 String name = request.getParameter("name"); 26 String password = request.getParameter("password"); 27 28 LoginDBdao dao = new LoginDBdao(); 29 LoginBean bean = null; 30 try { 31 bean = dao.select(); 32 } catch (SQLException e) { 33 // TODO 自動生成された catch ブロック 34 e.printStackTrace(); 35 } 36 37 38 boolean Login = (bean != null && name.equals(bean.getName()) && password.equals(bean.getPassword())); 39 HttpSession session = request.getSession(); 40 session.setAttribute("Login", Login); 41 42 if(Login){ 43 request.getRequestDispatcher("/view/Result.jsp").forward(request, response); 44 }else{ 45 request.getRequestDispatcher("/view/TopPage.jsp").forward(request, response); 46 } 47 } 48 49} 50

java

1<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 2<!DOCTYPE html> 3<html lang="ja"> 4 <head> 5 <meta charset="UTF-8"> 6 <title>Insert title here</title> 7 </head> 8 <body> 9 <h1>ようこそ</h1> 10 11 </body> 12</html>

試したこと

ネットと書籍で調べようと思ったのですが、エラーもないので上手く調べられませんでした。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。
eclipsで書いています。
Java EEを使用しています。
データベースはMySQLです。

追記
質問についての改善のご指摘ありがとうございます。質問すらまともにできておらずすみませんでした。また、至らない点があればご指摘よろしくお願いします。

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

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

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

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

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

y_waiwai

2021/03/30 07:16

コードは画像でなくテキストで提示しましょう コードは、質門を編集し、<code>ボタンで、出てくる’’’の枠の中にコードを貼り付けてください
dodox86

2021/03/30 07:30

初質問で仕方無いのかもしれませんが、単に「うまくできない」だと、本質問を読んだ者には何も分からず、回答も期待できなくなります。まず、以下を一読しましょう。 [質問するときのヒント] https://teratail.com/help/question-tips 質問は編集、追記できます。
K_3578

2021/03/30 07:31

>上手くログイン出来ません。 この文章では何が起こってるのかこっちからもわかりません。
dodox86

2021/03/31 00:16

こう言う場合、最初から整然と見た目でコードを完成させるのではなく、「DBには接続できるのか」「DBから意図通りデータを抽出(SELECT)できるのか。」 「データさえ取れていればページ遷移は正しくできるのか。」など、逐一、コードの通り道を確認するのが解決への確実な道です。 > TopPage.jspを表示するところまではできています。そこからデータベースにあらかじめ登録しておいた情報を入力してもResult.jspには移動せず、TopPage.jspのままになります。 この情報ではLoginServletのdoPostでリクエストからnameやpasswordのフォームのパラメータ値を取れているかも分からないし、DBからSELECTした情報が取れているかも分からない。恐らくはLoginServletの > boolean Login = (bean != null && name.equals(bean.getName()) && password.equals(bean.getPassword())); の部分でLoginの値がfalse になってしまっている為、/view/TopPase.jsp に再度飛ばしてしまっているのだと思います。ご自身で書いたコードで、「どこまでOKなのか」を確認してください。多くの場合、それで自己解決できます。それをした上で分からなければ詳細を質問に追記、修正してください。
ggakusei

2021/03/31 00:38

分かりました。一つ一つ動かしてどこからおかしいのかを探します!返信ありがとうございました。
K_3578

2021/03/31 00:48

@質問者さん 細かいだろうけど eclips→eclipse です。
dodox86

2021/03/31 00:50

もし解決したら原因と対応策をご自身で回答として投稿し、自己解決として質問を閉じてください。
K_3578

2021/03/31 00:58

というかEclipse使ってるならデバッグして流れ辿ってみれば大体解決しそうですが
guest

回答1

0

自己解決

質問に対し指摘してくれた方、間違いを正してくれた方、ありがとうございました。
DBに格納した情報を表示するプログラムを作り、DBから情報をきちんととれているか確認しました。これはできていました。
次に、toppageのformによって入力情報をLoginServletに遅れているかを確認したところ、これもできていました。
request.setCharacterEncoding("UTF-8");をLoginServletのdoPost内に追加したところ、ログインすることができました。なので入力文字を判別できていなかったことが原因だと思われます。

投稿2021/04/04 11:26

ggakusei

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問