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

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

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

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

Java

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

サーブレット

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

ログイン

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

Q&A

1回答

3171閲覧

【JSP】サーブレットから渡されたメッセージを表示後、ページの更新を掛けた時にそのメッセージを消えるようにしたい

sheep1991

総合スコア2

JSP

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

Java

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

サーブレット

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

ログイン

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

0グッド

0クリップ

投稿2021/10/23 01:35

現在Javaの学習をしている者です。
ログイン機能を作成しているのですが、
ログインの入力チェックをサーブレット側で掛けて、チェックに引っ掛かったらエラーメッセージをJSPに渡す所まで実装ができているというが現状です。メッセージはArrayListで渡しています。
そこで、JSPのページでエラーメッセージを表示後に、ページの更新を掛けた際には、そのメッセージが消えるようにしたいのですが、
更新を掛けてもメッセージが残り続けたままとなってしまいます。
こちらについて詳しい方いらっしゃればご教授お願いします。

【該当のページ】
イメージ説明

【Login.jsp】

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="java.util.ArrayList"%> <% ArrayList<String> errorMsg = (ArrayList<String>) request.getAttribute("errorMsg"); %> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>ログイン画面</title> <style> h1 { font-size: 18px } h2 { font-size: 14px } </style> </head> <body> <h2>ログイン画面</h2> <% HttpSession sesssion = request.getSession(); if (session.getAttribute("sessionerror") != null) { %> <%=session.getAttribute("sessionerror")%> <% } %> <% if (errorMsg != null) { for (int i = 0; i < errorMsg.size(); i++) { %> <ul><%=errorMsg.get(i)%></ul> <% } } %> <form method="POST" action="LoginAction" name="validataion"> <table> <tr> <td>ユーザーID:</td> <td><input type="text" name="user_id"></td> </tr> <tr> <td>パスワード:</td> <td><input type="password" name="user_pass"></td> </tr> <tr> <td> <tr> <td><input type="submit" value="ログイン"></td> </tr> </table> </form> </body> </html> ``` 【LoginAction.java】 ``` package main; import java.io.IOException; import java.util.ArrayList; import jakarta.servlet.RequestDispatcher; import jakarta.servlet.ServletException; import jakarta.servlet.annotation.WebServlet; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpSession; /** * Servlet implementation class LoginAction */ @WebServlet("/LoginAction") public class LoginAction extends HttpServlet { private static final long serialVersionUID = 1L; //バリデーションのためのエラーメッセージ final String BLANK_USRID_MSG = "ユーザーIDが入力されていません。"; final String BLANK_PASSWORD_MSG = "パスワードが入力されていません。"; /** * Default constructor. */ public LoginAction() { } /** * @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 { //ログインページからユーザーIDとパスワードを取得 String user_id = null; String user_pass = null; user_id = request.getParameter("user_id"); user_pass = request.getParameter("user_pass"); //セッションを生成 HttpSession ses = request.getSession(); ses.setAttribute("user_id", user_id); ses.setAttribute("user_pass", user_pass); //エラーメッセージを格納する配列 ArrayList<String> errorMsg = new ArrayList<String>(); //バリデーション if (user_id.isEmpty() && user_pass.isEmpty()) { //ユーザーIDおよびパスワードの入力フォームが空白の状態でログインボタンを押下場合 errorMsg.add(BLANK_USRID_MSG); errorMsg.add(BLANK_PASSWORD_MSG); } else { //別ページに遷移 RequestDispatcher dispatcher = request.getRequestDispatcher ("/MainPage"); dispatcher.forward(request, response); } //バリデーションに引っかかった場合エラーメッセージをログインページに返す request.setAttribute("errorMsg", errorMsg); RequestDispatcher dispatcher = request.getRequestDispatcher("/"); dispatcher.forward(request, response); } } ```

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

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

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

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

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

guest

回答1

0

ページの更新=F5のことであれば、同じ内容のformを再送信することになるので、元々送信された値も送信されて同じチェックがされます。
仕様です。

目的次第ですがリセットしたいならformのリセットボタンを用意するか、GETで自身に遷移しましょう。

投稿2021/10/23 02:04

m.ts10806

総合スコア80875

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

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

sheep1991

2021/10/24 01:30

m.ts10806様 ご回答ありがとうございます。 ページ更新=F5のことでございます。 dogetメソッドを下記のように記載してみました。 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { RequestDispatcher dispatcher = request.getRequestDispatcher("/"); dispatcher.forward(request, response); } ですが、F5を押した後にメッセージが消えることはなく、記載したURLに問題があるのかと考え、 該当のJSPファイルがある「"/WEB-INF/Login.jsp"」としてみたり、「"/LoginAction"」と試してみたのですが結果変わらずでございました。 大変恐縮ではございますが、もし宜しければこの場合どのように処理すべきかご教示頂けますと幸いです。
m.ts10806

2021/10/24 05:12

いえ、そうではなく、 自身に遷移するリンクなどを設置してくださいという意味です。 クリアしたいだけならリセットボタンが簡単です
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問