👩‍🎓

JSPで薬品管理システムつくる

2023/05/18に公開

研修でおこなった薬品在庫システム

新卒研修でつくった薬品在庫システムを作るまでの備忘録
sqlのパスや、DBの中身は筆者の研修内容に沿っているため、参考程度にしてください

環境

Eclips
Tomcat
JSP
MySQL

プロジェクト作成編

こちらを先に読んでください

beanに共通部品をつくる

(DBに接続する部分)

  1. beanパッケージの直下に DbConnection.java 作成
DbConnection.java
package bean;

import java.lang.reflect.InvocationTargetException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Objects;

public class DbConnection {
	//フィールド
	Connection con;
	PreparedStatement ps;
	ResultSet rs;
	
	public void open() {
		try {
			//Driverをインスタンス化したからConnectionクラスのインスタンスをsつくる
			Class.forName("com.mysql.cj.jdbc.Driver").getDeclaredConstructor().newInstance();
			//フィールドのconにいれる
			con = DriverManager.getConnection(
					"jdbc:mysql://192.168.33.10/yakuzo2",
					"java",
					"HogeHoge123#"
					);
		} catch (InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException
				| NoSuchMethodException | SecurityException | ClassNotFoundException | SQLException e) {
			// TODO 自動生成された catch ブロック
			e.printStackTrace();
		}
	}
	public void close() {
		try {
			//必ずResultSetインスタンスがあるとは限らないから、ないままクローズ指示してエラーにならないようにif文で存在確認
			if(Objects.nonNull(rs)) {
				rs.close();
			}
			ps.close();
			con.close();
		} catch (SQLException e) {
			// TODO 自動生成された catch ブロック
			e.printStackTrace();
		}	
	}
	
}


ドロップダウンメニュー部分

  1. beanの直下にTorihikisakiBeanを作成
    スーパークラスはbean.DbConnection
TorihikisakiBean.java
package bean;

import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class TorihikisakiBean extends DbConnection {
	//DBを格納するリスト
	public List<Map<String,String>> getTenpoList(){
		List<Map<String,String>> list = new ArrayList<Map<String, String>>();
		String sql = "select torihikisaki_code,torihikisaki_name from mst_torihikisaki where torihikisaki_kbn = '2' and delete_flg = '0'";
		
		open();
		
		try {
			ps = con.prepareStatement(sql);
			rs = ps.executeQuery();
			//店舗数分くり返す↓
			// while文の中でMap作成
			//1店舗の情報を持たせ、それをListに持たせる
				while(rs.next()) {
					Map<String,String> map = new HashMap<String,String>();
					//1つめの引数 キー:tenpo_code 2つめの引数 格納する内容
					map.put("tenpo_code",rs.getString("torihikisaki_code"));
					//キー:tenpo_name
					map.put("tenpo_name", rs.getString("torihikisaki_name"));
					list.add(map);
				}
				//親クラスのcloseメソッドを実行
				close();
		} catch (SQLException e) {
			// TODO 自動生成された catch ブロック
			e.printStackTrace();
		}
		//データを格納したいlistを実行先に返す
		return list;
	}
}


ログイン画面用サーブレット

サーブレット=コントローラー
servletパッケージの下にLogin.javaの サーブレットを作成

  1. servletパッケージで右クリック
  2. 新規 > サーブレット 選択
  3. クラス名にLogin入力(ここで完了を押さない)
  4. 次へを押して
  5. URLマッピングの/Login/loginに変更
  6. 完了を押す
doGet 入力前の初期表示
doPost 押下アクションのリクエストを受ける
Login.java
package servlet;

import java.io.IOException;

import bean.LoginBean;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

/**
 * 
 * Servlet implementation class Login
 * 
 * Login用のbeanインスタンス
 */
public class Login extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public Login() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 * doGetは初期表示
	 * Login用のBeanインスタンスを作り、それをJSPが使えるように準備したうえで、JSPを呼び出す
	 */
    // doGetは初期表示
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {	
		LoginBean lb = new LoginBean();
		
		request.setAttribute("lb", lb);
		//JSP呼び出し
		getServletContext().getRequestDispatcher("/login.jsp").forward(request, response);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 * doPostは押下アクションのリクエストを受ける
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

}

ログイン画面用JavaBean

要件定義を整理

  • ログイン後は、ログイン者の名前、権限(事務局か店舗か)、店舗名(事務局の場合はなし)を全画面で表示
  • ログイン者の情報をsessionに記憶すること
    • 社員コード
    • 社員名
    • 権限コード
    • 権限名
    • 店舗コード
    • 店舗名

作成

beanパッケージの直下にLoginBeanクラスを作る
親クラスはDbConnection

コンストラクタ

クラス名と全く同じ名前であること
返り血を指定する箇所がないこと

LoginBean.java
package bean;

import java.util.List;
import java.util.Map;

public class LoginBean extends DbConnection {
	//フィールド
	private String shain_code = "";
	private String shan_name = "";
	private String kengen_code = "";
	private String tenpo_code = "";
	private String tenpo_name = "";
	private String password = "";
	private List<Map<String,String>> list;
	private String msg = "";
	
	//コンストラクタ
	public LoginBean() {
		TorihikisakiBean tb = new TorihikisakiBean();
		//店舗情報を取得するために作ったTorihikisakiBeanをインスタンスが持っているgetTenpoList()メソッドを使って出来上がったリストを返してもらう
		list = tb.getTenpoList();
	}
	//チェック用
	public boolean check() {
		return true;
	}
	
	//上の部分を右クリック>ソース>getter及びsetterの設定で自動生成
	//getter,setter
	public String getShain_code() {
		return shain_code;
	}
	public void setShain_code(String shain_code) {
		this.shain_code = shain_code;
	}
	public String getShan_name() {
		return shan_name;
	}
	public void setShan_name(String shan_name) {
		this.shan_name = shan_name;
	}
	public String getKengen_code() {
		return kengen_code;
	}
	public void setKengen_code(String kengen_code) {
		this.kengen_code = kengen_code;
	}
	public String getTenpo_code() {
		return tenpo_code;
	}
	public void setTenpo_code(String tenpo_code) {
		this.tenpo_code = tenpo_code;
	}
	public String getTenpo_name() {
		return tenpo_name;
	}
	public void setTenpo_name(String tenpo_name) {
		this.tenpo_name = tenpo_name;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public List<Map<String, String>> getList() {
		return list;
	}
	public void setList(List<Map<String, String>> list) {
		this.list = list;
	}
	public String getMsg() {
		return msg;
	}
	public void setMsg(String msg) {
		this.msg = msg;
	}
	
}

ログイン用JSPをつくる

要点

店舗選択部品をbeanが持っているリストを頼りに作成する。

<selectname="tenpo_code>
      <option value="">--店舗を選択--</option>
      // この部分の<option>タグを動的に生成する
      //(ログインボタン押下後は、押下前に選択した店舗がキープされることを念頭におく)
</select>

作成

  1. WebContentで右クリック
  2. 新規 > JSPファイル
  3. login.jsp で作成
login.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
  <jsp:useBean id="lb" class="bean.LoginBean" scope="request"></jsp:useBean>
  <%@ page import="java.util.List" %>
  <%@ page import="java.util.Map" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	
</body>
</html>

実行確認


画面が真っ白ならOK
パスも要チェック!

この時点のディレクトリ構成

login.jspコーディング

lb.getListのような小文字大文字の入力ミスに注意!

login.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
  <jsp:useBean id="lb" class="bean.LoginBean" scope="request"></jsp:useBean>
  <%@ page import="java.util.List" %>
  <%@ page import="java.util.Map" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<link rel="stylesheet" href="css/login.css">
</head>
<body>
	<div class="content">
		<h2>薬品在庫管理システム</h2>
		<h3>***ログイン***</h3>
		
		<form action="login"method="post">
			<label>社員コード</label>
			<input type="text" name="shain_code" value="<%=lb.getShain_code() %>" required>
			<label>パスワード</label>
			<input type="password" name="password" value="<%=lb.getPassword() %>" required>
			<label>店舗</label>
			<select name="tenpo_code">
				<option value="">--店舗を選択--</option>
				<!-- 拡張for分  -->
				<!-- 
				LoginBeanからLogin.javaに値を使えられるように指示をし、Login.javaから値を受け取っている
				 -->
				<% for(Map<String,String>map : lb.getList()){ %>
				<% if(lb.getTenpo_code().equals(map.get("tenpo_code"))){ %>
					<option value="<%=map.get("tenpo_code") %>" selected><%=map.get("tenpo_name") %></option>
				<%}else{ %>
					<option value="<%=map.get("tenpo_code") %>"><%=map.get("tenpo_name") %></option>
				<% } %>
				<% } %>
			</select>
			<button type="submit">ログイン</button>
		</form>
		<span><%=lb.getMsg() %></span>
	</div>
</body>
</html>
cssもかくなら

パスは<link rel="stylesheet" href="css/login.css">
ファイルを置く場所はWebContent/css/loin.css
※以下はなんでもいい。エラーに繋がらない

login.css
@charset "UTF-8";
body{
	//好きな画像をurl内に。
	background-image: url(./snoopy.jpeg);
}
.content{
	width: 480px;
	height: 435px;
	background-color: #f2ebe6;
	margin: 0 auto;
	border-radius: 10px;
	filter: drop-shadow(10px 10px 10px rgba(0,0,0,0.6));
	border:8px double #f2ebe6;
	padding: 0px 20px;
	color: #787472;
}
h2,h3{
	color: #787472;
	text-align: center;
}
label{
	display: block;
	color: #787472;
}
button{
	display: block;
	margin-top: 13px;
	margin-bottom: 8px;
	width: 100%;
	padding: 8px;
	background-color:#f2ebe6;
}
button:hover{
	background-color: white;
}
input,select{
	background-color: #f2ebe6;
	border: none;
	border-bottom: solid 2px #787472;
	color: #787472;
	width: 100%;
	height: 30px;
	margin-bottom: 10px;
}
select{
/*	background-color:#787472 ;*/
	color:#787472 ;
}

実行確認とLogin.java

System.out~を追記

Login.java
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//doGet(request, response);
		//ボタンが押されたら呼び出される
		System.out.println("call login.doPost success.");
	}

実行してみる。

押したときに、doPostメソッドを呼び出せていれば、コンソールに
「call login.doPost success.」
が表示される

存在チェック

必須チェックは、データベースへの接続を要しますので、Beanに任せるのが合理的です。
Beanは、存在をチェックし、その合否を、boolean(trueかfalse)でサーブレットに教える、という形にします。
checkメソッドを追記していく

LoginBean.java
package bean;

import java.sql.SQLException;
import java.util.List;
import java.util.Map;

public class LoginBean extends DbConnection {
	//フィールド
	private String shain_code = "";
	private String shain_name = "";
	private String kengen_code = "";
	private String kengen_name = "";
	private String tenpo_code = "";
	private String tenpo_name = "";
	private String password = "";
	private List<Map<String,String>> list;
	private String msg = "";
	
	//コンストラクタ
	public LoginBean() {
		TorihikisakiBean tb = new TorihikisakiBean();
		//店舗情報を取得するために作ったTorihikisakiBeanをインスタンスが持っているgetTenpoList()メソッドを使って出来上がったリストを返してもらう
		list = tb.getTenpoList();
	}
	
	
	//上の部分を右クリック>ソース>getter及びsetterの設定で自動生成
	//getter,setter
	public String getShain_code() {
		return shain_code;
	}
	public void setShain_code(String shain_code) {
		this.shain_code = shain_code;
	}
	public String getShain_name() {
		return shain_name;
	}
	public void setShan_name(String shan_name) {
		this.shain_name = shan_name;
	}
	public String getKengen_code() {
		return kengen_code;
	}
	public void setKengen_code(String kengen_code) {
		this.kengen_code = kengen_code;
	}
	public String getTenpo_code() {
		return tenpo_code;
	}
	public void setTenpo_code(String tenpo_code) {
		this.tenpo_code = tenpo_code;
	}
	public String getTenpo_name() {
		return tenpo_name;
	}
	public void setTenpo_name(String tenpo_name) {
		this.tenpo_name = tenpo_name;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public List<Map<String, String>> getList() {
		return list;
	}
	public void setList(List<Map<String, String>> list) {
		this.list = list;
	}
	public String getMsg() {
		return msg;
	}
	public void setMsg(String msg) {
		this.msg = msg;
	}
	/**
	 * @param  チェック用
	 **/
	public boolean check() {
		// 存在チェック
		String sql = "select shain_name,kengen_code from mst_shain where login_flg = ? and delete_flg = ? and shain_code = ? and password = ?";
		//dbあける
		open();
		try {
			//ps(PreparedStatement)インスタンス
			ps = con.prepareStatement(sql);
			//パラメータ(?部分)セット
			ps.setString(1, "0");
			ps.setString(2, "0");
			ps.setString(3, shain_code);
			ps.setString(4, password);
			//実行
			rs =ps.executeQuery();
			//戻り値チェック
			if(rs.next()) {
				//存在チェック通過
				shain_name = rs.getString("shain_name");
				kengen_code = rs.getString("kengen_code");
			}else {
				msg = "指定の社員コード、パスワードの組み合わせは存在しません。";
				return false;
			}
			
			//権限名の取得
			sql = "select kengen_name from mst_kengen where kengen_code = ?";
			ps = con.prepareStatement(sql);
			ps.setString(1, kengen_code);
			rs = ps.executeQuery();
			rs.next();
			setKengen_name(rs.getString("kengen_name"));
		} catch (SQLException e) {
			// TODO 自動生成された catch ブロック
			e.printStackTrace();
		}
		
		return true;
	}


	public String getKengen_name() {
		return kengen_name;
	}


	public void setKengen_name(String kengen_name) {
		this.kengen_name = kengen_name;
	}
}


実行確認

間違えるとちゃんと表示される

関連チェック

研修資料からの引用

必須チェック、存在チェックまで実装しました。
よくあるログイン画面では、これで完成です。
このシステムでは、もうひとつチェックが必要です。
社員コードと、パスワードを使って、存在チェックを実行したところで、ログイン者の権限コードを知ることができますね。
権限は2種類しかありません。「事務局権限」(コード:001)か「店舗権限」(コード:002)です。
事務局権限の社員は社員コードとパスワードのみでログインできます。(店舗を選択してもログイン出来ますがその情報は無視します。)
店舗権限者は、社員コードとパスワードと店舗選択が全て必須になります。
そのために「店舗権限者でありながら、店舗を選択していない」という状況をチェックする必要があるのです。
このように「ある条件によって、ある項目の入力が必須になる」のように関連して動的に変わるチェックを関連チェックまたは相関チェックと
呼びます。

他に実例を上げと、アンケートサイトなどで多く使われます。「自動車を所有している」をチェックすると「メーカー」の記入が必須になる、などです。

関連チェックの内容を説明したところで、実装に入りましょう。

実装

kengen_name = rs.getString("kengen_code");追記

LoginBean.java
// 関連チェック
			if(kengen_code.equals("002") && tenpo_code.equals("")) {
				msg = "店舗情報権限者は店舗の選択が必要です";
				return false;
			}
フルコード
LoginBean.java
package bean;

import java.sql.SQLException;
import java.util.List;
import java.util.Map;

public class LoginBean extends DbConnection {
	//フィールド
	private String shain_code = "";
	private String shain_name = "";
	private String kengen_code = "";
	private String kengen_name = "";
	private String tenpo_code = "";
	private String tenpo_name = "";
	private String password = "";
	private List<Map<String,String>> list;
	private String msg = "";
	
	//コンストラクタ
	public LoginBean() {
		TorihikisakiBean tb = new TorihikisakiBean();
		//店舗情報を取得するために作ったTorihikisakiBeanをインスタンスが持っているgetTenpoList()メソッドを使って出来上がったリストを返してもらう
		list = tb.getTenpoList();
	}
	
	
	//上の部分を右クリック>ソース>getter及びsetterの設定で自動生成
	//getter,setter
	public String getShain_code() {
		return shain_code;
	}
	public void setShain_code(String shain_code) {
		this.shain_code = shain_code;
	}
	public String getShain_name() {
		return shain_name;
	}
	public void setShan_name(String shan_name) {
		this.shain_name = shan_name;
	}
	public String getKengen_code() {
		return kengen_code;
	}
	public void setKengen_code(String kengen_code) {
		this.kengen_code = kengen_code;
	}
	public String getTenpo_code() {
		return tenpo_code;
	}
	public void setTenpo_code(String tenpo_code) {
		this.tenpo_code = tenpo_code;
	}
	public String getTenpo_name() {
		return tenpo_name;
	}
	public void setTenpo_name(String tenpo_name) {
		this.tenpo_name = tenpo_name;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public List<Map<String, String>> getList() {
		return list;
	}
	public void setList(List<Map<String, String>> list) {
		this.list = list;
	}
	public String getMsg() {
		return msg;
	}
	public void setMsg(String msg) {
		this.msg = msg;
	}
	/**
	 * @param  チェック用
	 **/
	public boolean check() {
		// 存在チェック
		String sql = "select shain_name,kengen_code from mst_shain where login_flg = ? and delete_flg = ? and shain_code = ? and password = ?";
		//dbあける
		open();
		try {
			//ps(PreparedStatement)インスタンス
			ps = con.prepareStatement(sql);
			//パラメータ(?部分)セット
			ps.setString(1, "0");
			ps.setString(2, "0");
			ps.setString(3, shain_code);
			ps.setString(4, password);
			//実行
			rs =ps.executeQuery();
			//戻り値チェック
			if(rs.next()) {
				//存在チェック通過
				shain_name = rs.getString("shain_name");
				kengen_name = rs.getString("kengen_code");
				kengen_code = rs.getString("kengen_code");
			}else {
				msg = "指定の社員コード、パスワードの組み合わせは存在しません。";
				return false;
			}
			
			//店舗名の取得
			String sql2 = "select torihikisaki_name"
					+ "from mst_torihikisaki_name"
					+ "where torishikisaki_code = ?";
			ps= con.prepareStatement(sql2);
			ps.setString(1,tenpo_code);
			rs = ps.executeQuery();
			rs.next();
			tenpo_name = rs.getString("torihikisaki_name");
			
			close();
			//権限名の取得
			sql = "select kengen_name from mst_kengen where kengen_code = ?";
			ps = con.prepareStatement(sql);
			ps.setString(1, kengen_code);
			rs = ps.executeQuery();
			rs.next();
			setKengen_name(rs.getString("kengen_name"));
		} catch (SQLException e) {
			// TODO 自動生成された catch ブロック
			e.printStackTrace();
		}
		
		return true;
	}


	public String getKengen_name() {
		return kengen_name;
	}


	public void setKengen_name(String kengen_name) {
		this.kengen_name = kengen_name;
	}
	
	
}


実行

社員コード:1976111
パスワード:1976111
店舗:店舗を選択(選択しないまま)

チェックを通り抜けたらログインできるようにする

LoginBean.java
package servlet;

import java.io.IOException;

import bean.LoginBean;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

/**
 * 
 * Servlet implementation class Login
 * 
 * Login用のbeanインスタンス
 */
public class Login extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public Login() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 * doGetは初期表示
	 * Login用のBeanインスタンスを作り、それをJSPが使えるように準備したうえで、JSPを呼び出す
	 */
    // doGetは初期表示
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {	
		LoginBean lb = new LoginBean();
		
		request.setAttribute("lb", lb);
		//JSP呼び出し login.jspにフォワード
		getServletContext().getRequestDispatcher("/login.jsp").forward(request, response);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 * doPostは押下アクションのリクエストを受ける
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//doGet(request, response);
		//ボタンが押されたら呼び出される
		System.out.println("call login.doPost success.");
		
		//LoginBeanのインスタンスを作る
		LoginBean lb = new LoginBean();
		
		//画面の入力値を取得する
		lb.setShain_code(request.getParameter("shain_code"));
		lb.setPassword(request.getParameter("password"));
		lb.setTenpo_code(request.getParameter("tenpo_code"));
		
		//チェック
		if(!lb.check()) {
			request.setAttribute("lb", lb);
			getServletContext().getRequestDispatcher("/login.jsp").forward(request, response);
			return;
		}
	}

}

セッションを取り扱うのはコントローラ(サーブレット)の役目です。

login.java
package servlet;

import java.io.IOException;

import bean.LoginBean;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpSession;

/**
 * 
 * Servlet implementation class Login
 * 
 * Login用のbeanインスタンス
 */
public class Login extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public Login() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 * doGetは初期表示
	 * Login用のBeanインスタンスを作り、それをJSPが使えるように準備したうえで、JSPを呼び出す
	 */
    // doGetは初期表示
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {	
		LoginBean lb = new LoginBean();
		
		request.setAttribute("lb", lb);
		//JSP呼び出し login.jspにフォワード
		getServletContext().getRequestDispatcher("/login.jsp").forward(request, response);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 * doPostは押下アクションのリクエストを受ける
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//doGet(request, response);
		//ボタンが押されたら呼び出される
		System.out.println("call login.doPost success.");
		
		//LoginBeanのインスタンスを作る
		LoginBean lb = new LoginBean();
		
		//画面の入力値を取得する
		lb.setShain_code(request.getParameter("shain_code"));
		lb.setPassword(request.getParameter("password"));
		lb.setTenpo_code(request.getParameter("tenpo_code"));
		
		//チェック
		if(!lb.check()) {
			request.setAttribute("lb", lb);
			getServletContext().getRequestDispatcher("/login.jsp").forward(request, response);
			return;
		}
		
		//ログイン者情報をsessionに記憶する
		HttpSession session = request.getSession();
		//時間を設定したい場合は、例えば15分なら900をいれる
		session.setMaxInactiveInterval(0);
		
		session.setAttribute("login_shain_code", lb.getShain_code());
		session.setAttribute("login_shain_name", lb.getShain_name());
		session.setAttribute("login_kengen_code", lb.getKengen_code());
		session.setAttribute("login_kengen_name", lb.getKengen_name());
		session.setAttribute("login_tenpo_code", lb.getTenpo_code());
		session.setAttribute("login_tenpo_name", lb.getTenpo_name());
	}

}

追記部分

if(kengen_code.equals("002")) {
				for(Map<String,String>map:list) {
					if(map.get("tenpo code").equals(tenpo_code)) {
						tenpo_name = map.get("tenpo_name");
					}
				}
			}
フルコード
LoginBean.java
package bean;

import java.sql.SQLException;
import java.util.List;
import java.util.Map;

public class LoginBean extends DbConnection {
	//フィールド
	private String shain_code = "";
	private String shain_name = "";
	private String kengen_code = "";
	private String kengen_name = "";
	private String tenpo_code = "";
	private String tenpo_name = "";
	private String password = "";
	private List<Map<String,String>> list;
	private String msg = "";
	
	//コンストラクタ
	public LoginBean() {
		TorihikisakiBean tb = new TorihikisakiBean();
		//店舗情報を取得するために作ったTorihikisakiBeanをインスタンスが持っているgetTenpoList()メソッドを使って出来上がったリストを返してもらう
		list = tb.getTenpoList();
	}
	
	
	//上の部分を右クリック>ソース>getter及びsetterの設定で自動生成
	//getter,setter
	public String getShain_code() {
		return shain_code;
	}
	public void setShain_code(String shain_code) {
		this.shain_code = shain_code;
	}
	public String getShain_name() {
		return shain_name;
	}
	public void setShan_name(String shan_name) {
		this.shain_name = shan_name;
	}
	public String getKengen_code() {
		return kengen_code;
	}
	public void setKengen_code(String kengen_code) {
		this.kengen_code = kengen_code;
	}
	public String getTenpo_code() {
		return tenpo_code;
	}
	public void setTenpo_code(String tenpo_code) {
		this.tenpo_code = tenpo_code;
	}
	public String getTenpo_name() {
		return tenpo_name;
	}
	public void setTenpo_name(String tenpo_name) {
		this.tenpo_name = tenpo_name;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public List<Map<String, String>> getList() {
		return list;
	}
	public void setList(List<Map<String, String>> list) {
		this.list = list;
	}
	public String getMsg() {
		return msg;
	}
	public void setMsg(String msg) {
		this.msg = msg;
	}
	/**
	 * @param  チェック用
	 **/
	public boolean check() {
		// 存在チェック
		String sql = "select shain_name,kengen_code from mst_shain where login_flg = ? and delete_flg = ? and shain_code = ? and password = ?";
		//dbあける
		open();
		try {
			//ps(PreparedStatement)インスタンス
			ps = con.prepareStatement(sql);
			//パラメータ(?部分)セット
			ps.setString(1, "0");
			ps.setString(2, "0");
			ps.setString(3, shain_code);
			ps.setString(4, password);
			//実行
			rs =ps.executeQuery();
			//戻り値チェック
			if(rs.next()) {
				//存在チェック通過
				shain_name = rs.getString("shain_name");
				kengen_name = rs.getString("kengen_code");
				kengen_code = rs.getString("kengen_code");
			}else {
				msg = "指定の社員コード、パスワードの組み合わせは存在しません。";
				return false;
			}
			// 関連チェック
			if(kengen_code.equals("002") && tenpo_code.equals("")) {
				msg = "店舗情報権限者は店舗の選択が必要です";
				return false;
			}
			//事務局権限だった場合
			if(kengen_code.equals("001")) {
				tenpo_code = "";
				tenpo_code = "";
				close();
				return true;
			}
			if(kengen_code.equals("002")) {
				for(Map<String,String>map:list) {
					if(map.get("tenpo code").equals(tenpo_code)) {
						tenpo_name = map.get("tenpo_name");
					}
				}
			}
			//店舗名の取得
			String sql2 = "select torihikisaki_name"
					+ "from mst_torihikisaki_name"
					+ "where torishikisaki_code = ?";
			ps= con.prepareStatement(sql2);
			ps.setString(1,tenpo_code);
			rs = ps.executeQuery();
			rs.next();
			tenpo_name = rs.getString("torihikisaki_name");
			
			close();
			//権限名の取得
			sql = "select kengen_name from mst_kengen where kengen_code = ?";
			ps = con.prepareStatement(sql);
			ps.setString(1, kengen_code);
			rs = ps.executeQuery();
			rs.next();
			setKengen_name(rs.getString("kengen_name"));
		} catch (SQLException e) {
			// TODO 自動生成された catch ブロック
			e.printStackTrace();
		}
		
		return true;
	}


	public String getKengen_name() {
		return kengen_name;
	}


	public void setKengen_name(String kengen_name) {
		this.kengen_name = kengen_name;
	}
	
	
}

メニューサーブレットつくる

servletパッケージの下にMenu.javaをつくる

階層

コーディング

Menu.java
package servlet;

import java.io.IOException;

import bean.MenuBean;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class Menu
 */
public class Menu extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public Menu() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		response.getWriter().append("call Menu doget Success.");
		MenuBean mb = new MenuBean();
		request.setAttribute("mb", mb);
		getServletContext().getRequestDispatcher("/menu.jsp").forward(request, response);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		//doGet(request, response);
		response.getWriter().append("call Menu doPost Success");
	}

}


Login.java

セッションの下に追記

Loin.java
getServletContext().getRequestDispatcher("/menu").forward(request, response);
Login.javaフルコード
Login.java
package servlet;

import java.io.IOException;

import bean.LoginBean;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpSession;

/**
 * 
 * Servlet implementation class Login
 * 
 * Login用のbeanインスタンス
 */
public class Login extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public Login() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 * doGetは初期表示
	 * Login用のBeanインスタンスを作り、それをJSPが使えるように準備したうえで、JSPを呼び出す
	 */
    // doGetは初期表示
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {	
		LoginBean lb = new LoginBean();
		
		request.setAttribute("lb", lb);
		//JSP呼び出し login.jspにフォワード
		getServletContext().getRequestDispatcher("/login.jsp").forward(request, response);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 * doPostは押下アクションのリクエストを受ける
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//doGet(request, response);
		//ボタンが押されたら呼び出される
		System.out.println("call login.doPost success.");
		
		//LoginBeanのインスタンスを作る
		LoginBean lb = new LoginBean();
		
		//画面の入力値を取得する
		lb.setShain_code(request.getParameter("shain_code"));
		lb.setPassword(request.getParameter("password"));
		lb.setTenpo_code(request.getParameter("tenpo_code"));
		
		//チェック
		if(!lb.check()) {
			request.setAttribute("lb", lb);
			getServletContext().getRequestDispatcher("/login.jsp").forward(request, response);
			return;
		}
		
		//ログイン者情報をsessionに記憶する
		HttpSession session = request.getSession();
		//時間を設定したい場合は、例えば15分なら900をいれる
		session.setMaxInactiveInterval(0);
		
		session.setAttribute("login_shain_code", lb.getShain_code());
		session.setAttribute("login_shain_name", lb.getShain_name());
		session.setAttribute("login_kengen_code", lb.getKengen_code());
		session.setAttribute("login_kengen_name", lb.getKengen_name());
		session.setAttribute("login_tenpo_code", lb.getTenpo_code());
		session.setAttribute("login_tenpo_name", lb.getTenpo_name());
	
		getServletContext().getRequestDispatcher("/menu").forward(request, response);
	}

}

Discussion