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

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

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

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

Java

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

サーブレット

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

セッション

Sessionはクライアントがサーバに送ったすべてのリクエストのことを指します。

Q&A

解決済

1回答

6535閲覧

【JSP & サーブレット】リロード(F5ボタン)を押下時、sessionに格納して表示したエラーメッセージを削除したい。

mouton

総合スコア2

JSP

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

Java

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

サーブレット

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

セッション

Sessionはクライアントがサーバに送ったすべてのリクエストのことを指します。

0グッド

0クリップ

投稿2021/10/30 03:03

編集2021/10/30 03:19

前提・実現したいこと

現在、JSPとサーブレットを用いてログイン機能を作っています。
JSPの入力フォームに「ログインID」と「パスワード」を用意しており、何も入力しない状態で、ログインボタンを押すと、
エラーメッセージがサーブレットからJSPに返ってくるようになっております。
エラーメッセージの返し方はdoPostメソッド内でセッションを生成し、そのセッションにエラーメッセージを格納後、
sendsendRedirectsendRedirectでJSPの画面に戻り、上記セッションを渡しているという仕組みを取っています。
この時、エラーメッセージが表示された後に、ブラウザのリロードボタンかもしくはF5を押してページの更新をした際にエラーメッセージが表示されないようにしたいのですが、どのようにすれば実現可能か、もしご存知の方がいらっしゃいましたら、ご教示頂けますと幸いです。

該当のソースコード

【Login.jsp】

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="java.util.ArrayList"%> <% HttpSession ses = request.getSession(); ArrayList<String> errorMsg = (ArrayList<String>) ses.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> <% if (ses.getAttribute("sessionerror") != null) { %> <%=ses.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.sql.SQLException; 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"); //エラーメッセージを格納する配列 ArrayList<String> errorMsg = new ArrayList<String>(); //USERテーブルから情報を取得してくるための準備 ReservationDao connectdb = new ReservationDao(); //セッションを生成 HttpSession ses = request.getSession(true); //バリデーション if (user_id.isEmpty() && user_pass.isEmpty()) { //ユーザーIDおよびパスワードの入力フォームが空白の状態でログインボタンを押下場合 errorMsg.add(BLANK_USRID_MSG); errorMsg.add(BLANK_PASSWORD_MSG); } //バリデーションに引っかかった場合エラーメッセージをログインページに返す ses.setAttribute("errorMsg", errorMsg); response.sendRedirect("/main"); } }

試したこと

セッション破棄の実装でやりたいことが実現できるのではないかと考えて、試してみたものの、どのタイミングで破棄を行うかがわからずといったところです。

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

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

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

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

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

guest

回答1

0

自己解決

こちら自己解決致しました。

<% if (errorMsg != null) { for (int i = 0; i < errorMsg.size(); i++) { %> <ul><%=errorMsg.get(i)%></ul> <% } } %>

JSPのこの部分の下にセッション破棄を行う処理を追記。

<% if (errorMsg != null) { for (int i = 0; i < errorMsg.size(); i++) { %> <ul><%=errorMsg.get(i)%></ul> <% } } %> <% ses.invalidate(); %>

投稿2021/10/30 04:57

mouton

総合スコア2

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問