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

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

詳細はこちら
JSP

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

Java

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

servlet

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

Q&A

解決済

1回答

1851閲覧

jspでログイン画面を製作したい

photan

総合スコア5

JSP

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

Java

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

servlet

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

0グッド

0クリップ

投稿2019/12/16 07:18

編集2019/12/17 07:52

前提・実現したいこと

Web上で動くチャットアプリのログイン画面を製作しています。
コンストラクタ内で定義したArrayListの中のユーザー名とパスワードを参照し、両方一致するユーザーが存在すればそのユーザーとしてログインするようなシステムを組みたいです。

こちらのページのChapter10のコードを改変して実現しようとしています。

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

コンストラクタ内で初期化している値を追加してもその追加したユーザー情報でログインできません。また、もともと記述されている情報を削除してもログインが可能なままです。

該当のソースコード

DataManager.java

Java

1package dao; 2 3import java.text.SimpleDateFormat; 4import java.util.ArrayList; 5import java.util.Calendar; 6 7import dto.ShoutDTO; 8import dto.UserDTO; 9 10public class DataManager { 11 private ArrayList<UserDTO> userList; // 登録ユーザ情報リスト 12 private ArrayList<ShoutDTO> shoutList; // 書き込み内容リスト 13 14 public DataManager() { 15 // 登録ユーザ情報を生成し、リストに追加 16 userList = new ArrayList<UserDTO>(); 17 UserDTO udto; 18 udto = new UserDTO("yamazaki", "pass1", "山田 太郎", "icon-user", "はじめまして"); 19 userList.add(udto); 20 udto = new UserDTO("suzuki", "pass2", "鈴木 花子", "icon-user-female", "東京都在住です"); 21 userList.add(udto); 22 udto = new UserDTO("itou", "pass3", "伊藤 恵", "icon-bell", "趣味は読書"); 23 userList.add(udto); 24 udto = new UserDTO("hanazawa", "pass4", "花澤香菜", "icon-flower", "パンが好きです"); 25 userList.add(udto); 26 userList.clear(); 27 28 shoutList = new ArrayList<ShoutDTO>(); 29 // 書き込み情報を生成し、リストに追加 30 ShoutDTO sdto; 31 sdto = new ShoutDTO("テスト", "icon-rocket", " 2017-01-02 12:34:56", "おはよう!"); 32 shoutList.add(sdto); 33 } 34 35 // ログインID とパスワードを受け取り、登録ユーザ一覧に一致したものがあるか検索 36 public UserDTO getLoginUser(String loginId, String password) { 37 UserDTO user = null; 38 39 for(UserDTO u : userList){ 40 if(u.getLoginId().equals(loginId) && u.getPassword().equals(password)){ 41 // 一致したものがあれば、そのユーザ情報の参照を戻す 42 user = u; 43 } 44 } 45 46 return user; 47 } 48 49 // 書き込み内容リストの getter 50 public ArrayList<ShoutDTO> getShoutList() { 51 return shoutList; 52 } 53 54 // ログインユーザ情報と書き込み内容を受け取り、リストに追加する 55 public void setWriting(UserDTO user, String writing) { 56 ShoutDTO s = new ShoutDTO(); 57 58 s.setUserName(user.getUserName()); 59 s.setIcon(user.getIcon()); 60 Calendar calender = Calendar.getInstance(); 61 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); 62 s.setDate(sdf.format(calender.getTime())); 63 s.setWriting(writing); 64 65 shoutList.add(0, s); 66 } 67}

  
LoginServlet.java

Java

1package controller; 2 3import java.io.IOException; 4import java.util.ArrayList; 5 6import javax.servlet.RequestDispatcher; 7import javax.servlet.ServletException; 8import javax.servlet.annotation.WebServlet; 9import javax.servlet.http.HttpServlet; 10import javax.servlet.http.HttpServletRequest; 11import javax.servlet.http.HttpServletResponse; 12import javax.servlet.http.HttpSession; 13 14import dao.DataManager; 15import dto.ShoutDTO; 16import dto.UserDTO; 17 18@WebServlet("/login") 19public class LoginServlet extends HttpServlet { 20 private static final long serialVersionUID = 1L; 21 22 // 直接アクセスがあった場合は index.jsp に処理を転送 23 protected void doGet(HttpServletRequest request, HttpServletResponse response) 24 throws ServletException, IOException { 25 RequestDispatcher dispatcher = request.getRequestDispatcher("index.jsp"); 26 dispatcher.forward(request, response); 27 } 28 29 // index.jsp の「ログイン」ボタンから呼び出される 30 protected void doPost(HttpServletRequest request, HttpServletResponse response) 31 throws ServletException, IOException { 32 // 送信情報の取得 33 String loginId = request.getParameter("loginId"); 34 String password = request.getParameter("password"); 35 36 RequestDispatcher dispatcher = null; 37 String message = null; 38 39 if (loginId.equals("") || password.equals("")) { 40 // ログインID かパスワードどちらか、もしくは双方未入力なら 41 message = "ログインIDとパスワードは必須入力です"; 42 43 // エラーメッセージをリクエストオブジェクトに保存 44 request.setAttribute("alert", message); 45 46 // index.jsp に処理を転送 47 dispatcher = request.getRequestDispatcher("index.jsp"); 48 dispatcher.forward(request, response); 49 } else { 50 // ログイン認証を行い、ユーザ情報を取得 51 DataManager dbm = new DataManager(); 52 UserDTO user = dbm.getLoginUser(loginId, password); 53 54 if (user != null) { 55 // ユーザ情報を取得できたら、書き込み内容リストを取得 56 ArrayList<ShoutDTO> list = dbm.getShoutList(); 57 HttpSession session = request.getSession(); 58 59 // ログインユーザ情報、書き込み内容リストとしてセッションに保存 60 session.setAttribute("user", user); 61 session.setAttribute("shouts", list); 62 63 // 処理の転送先を top.jsp に指定 64 dispatcher = request.getRequestDispatcher("top.jsp"); 65 } else { 66 // ユーザ情報が取得できない場合 67 // エラーメッセージをリクエストオブジェクトに保存 68 message = "ログインIDまたはパスワードが違います"; 69 request.setAttribute("alert", message); 70 71 // 処理の転送先を index.jsp に指定 72 dispatcher = request.getRequestDispatcher("index.jsp"); 73 System.out.println("false"); 74 } 75 76 // 処理を転送 77 dispatcher.forward(request, response); 78 } 79 } 80}

  
index.jsp

jsp

1<%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> 4<!DOCTYPE html> 5<html lang="ja"> 6<head> 7<meta charset="UTF-8"> 8<title>Shouter - ログイン -</title> 9<link rel="stylesheet" href="./css/skyblue.css"> 10<link rel="stylesheet" href="./css/pe-icon-7-stroke.css"> 11<link rel="stylesheet" href="./css/helper.css"> 12</head> 13<body> 14 <div class="bg-success padding-y-5"> 15 <div class="container padding-y-5 text-center"> 16 <h1> 17 Shouter&nbsp;<span class="icon-speaker"></span> 18 </h1> 19 </div> 20 </div> 21 <div class="padding-y-5 text-center"> 22 <div style="width: 40%" class="container padding-y-5 text-left"> 23 <strong class="color-main">ログインIDとパスワードを入力しろぉ!</strong> 24 </div> 25 </div> 26 <div class="padding-y-5 text-center"> 27 <div style="width: 40%" class="container padding-y-5 text-center"> 28 <%-- action 属性にサーブレットを指定 --%> 29 <form action="./login" method="post"> 30 <table style="width: 400px" class="table"> 31 <tr> 32 <%-- ログインID 入力欄の名前は loginId --%> 33 <td class="color-main text-left">ログインのID</td> 34 <td class="text-left"><input class="form-control" type="text" 35 name="loginId" value="" size="20" /></td> 36 </tr> 37 <tr> 38 <%-- パスワード入力欄の名前は password --%> 39 <td class="color-main text-left">パスのワード</td> 40 <td class="text-left"><input class="form-control" 41 type="password" name="password" value="" size="20" /></td> 42 </tr> 43 <tr> 44 <td colspan="2" class="text-right"><input class="btn" 45 type="submit" value="ログイン" /></td> 46 </tr> 47 <%-- リクエストスコープに alert があれば --%> 48 <c:if 49 test="${requestScope.alert != null && requestScope.alert != ''}"> 50 <tr> 51 <%-- リクエストスコープの alert の値を出力 --%> 52 <td colspan="2" class="color-error text-left"><c:out 53 value="${requestScope.alert}" /></td> 54 </tr> 55 </c:if> 56 </table> 57 </form> 58 </div> 59 </div> 60</body> 61</html> 62

試したこと

コンストラクタの末尾にuserList.clear();を追記してもログインが可能でした。
変更後プロジェクトをRefreshしたりしましたが、特に変化はありませんでした。

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

開発環境はEclipse IDEで、サーバーはapache tomcat9.0です。
Webページの挙動はEclipse内のブラウザーで確認していました。

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

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

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

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

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

guest

回答1

0

自己解決

ダウンロードしたプロジェクトから必要部分だけを新規プロジェクトに移したら解決しました。

投稿2019/12/23 07:11

photan

総合スコア5

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問