ログイン失敗時にアラートを表示させたい

実現したいこと

ログイン画面でIDとパスワードを入力した時、それに誤りがあった場合は、ログインボタンを押した後に「IDかパスワードが間違っています」とアラートで表示させたいです。(誤りがある場合は画面は遷移しません。=ログイン画面のまま)
IDとパスワードはデータベースで照合する形です。
サーブレット、JSPを使ってこれを実現させたいです。

発生している問題・分からないこと

「ログイン画面でIDとパスワードを入力し、ログインボタンを押すと、IDとパスワードがデータベースと照合され、誤りがある場合は画面遷移しない。」という設定はできています。また、アラートを表示させること自体はできたのですが、それが入力誤りがあるない関わらず、画面遷移の度に表示してしまいます。また、JavaScriptに書いた通りの「<%=error%>」を出力してしまう状況です。

該当のソースコード

LoginServlet

12package servlet; 3 4import java.io.IOException; 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 model.Login; 15import model.LoginLogic; 16 17@WebServlet("/LoginServlet") 18public class LoginServlet extends HttpServlet { 19 private static final long serialVersionUID = 1L; 20 21 protected void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{ 22 //フォワード 23 RequestDispatcher dispatcher = request.getRequestDispatcher("WEB-INF/login.jsp"); 24 dispatcher.forward(request, response); 25 } 26 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 27 //リクエストパラメータの取得 28 request.setCharacterEncoding("UTF-8"); 29 String id = request.getParameter("id"); 30 String password = request.getParameter("password"); 31 32 //ログイン処理の実行 33 Login login = new Login(id,password); 34 LoginLogic bo = new LoginLogic(); 35 boolean result = bo.execute(login); 36 37 //ログイン処理の成功、失敗によって処理を分岐 38 if(result) {//ログイン成功 39 //セッションスコープにIDを保存 40 HttpSession session = request.getSession();//セッションスコープの取得 41 session.setAttribute("id", id); 42 43 //フォワード 44 RequestDispatcher dispatcher = request.getRequestDispatcher("WEB-INF/list.jsp"); 45 dispatcher.forward(request, response); 46 }else{//ログイン失敗 47 //リクエストスコープにインスタンスを保存 48 request.setAttribute("error", "IDかパスワードが間違っています"); 49 50 //リダイレクトでログイン画面(トップ)まで戻る 51 response.sendRedirect("LoginServlet"); 52 53 } 54 } 55} 56

login.jsp

login.js

試したこと・調べたこと

上記の詳細・結果

最初は、サーブレットの「//ログイン処理の成功、失敗によって処理を分岐」のところで、

}else{
HttpSession session =request.getSession();
session.setAttribute("error","IDかパスワードが間違っています");

と書いており、JSPの「ログインボタン」の所で、

<span>${error}<p class="login"><input type="submit" value="ログイン"></p></span>

と書いておりました。この書き方の時は、IDかパスワードが間違っている際、ログインボタンを押すと、エラーメッセージをパスワード入力欄の下に表示させることができました。しかし、アラートが出せませんでした。

次にログイン失敗時のメッセージは1度切りで良いため、リクエストスコープですると良いというアドバイスをもらったので、上記のようなコードを書くと、アラートは出るようになったのですが、入力誤りがあるないに関わらず、画面遷移の度に出てきてしまうようになってしまいました。

補足

これをサーブレット、JSP、そして外部JavaScriptファイルを使って実現させたいです。
何卒よろしくお願いいたします。

コメントを投稿

0 コメント