#03:標準アクションタグ2 - useBean
このチャプターでは、標準アクションタグのuseBeanについて学習します。
【AccountBean.java】package jp.paiza.bean;
import java.io.Serializable;
import java.sql.Timestamp;
public class AccountBean implements Serializable {
private int id;
private String userId;
private Timestamp createdAt;
private Timestamp updatedAt;
public int getId() {
return this.id;
}
public void setId(int id) {
this.id = id;
}
public String getUserId() {
return this.userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
public Timestamp getCreatedAt() {
return this.createdAt;
}
public void setCreatedAt(Timestamp createdAt) {
this.createdAt = createdAt;
}
public Timestamp getUpdatedAt() {
return this.updatedAt;
}
public void setUpdatedAt(Timestamp updatedAt) {
this.updatedAt = updatedAt;
}
}
【LoginModel】package jp.paiza.model;
import jp.paiza.bean.AccountBean;
public class LoginModel {
public boolean login(String userId, String password) {
return "kyoko".equals(userId) && "paiza".equals(password);
}
public AccountBean find(String userId) {
AccountBean account = new AccountBean();
account.setId(1);
account.setUserId(userId);
return account;
}
}
【LoginServlet】package jp.paiza.servlet;
import java.io.*;
import java.util.*;
import java.time.*;
import java.time.format.*;
import jakarta.servlet.*;
import jakarta.servlet.annotation.*;
import jakarta.servlet.http.*;
import jp.paiza.model.*;
@WebServlet("/login")
public class LoginServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
RequestDispatcher d =
req.getRequestDispatcher("/WEB-INF/jsp/login-input.jsp");
d.forward(req, res);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
req.setCharacterEncoding("UTF-8");
String userId = req.getParameter("user-id");
String password = req.getParameter("password");
req.getSession().invalidate();
LoginModel m = new LoginModel();
if (m.login(userId, password)) {
req.getSession().setAttribute("account", m.find(userId));
RequestDispatcher d =
req.getRequestDispatcher("/WEB-INF/jsp/login-result.jsp");
d.forward(req, res);
} else {
res.sendRedirect("login");
}
}
}
【login-result.jsp】<%@ page contentType="text/html; charset=UTF-8" %>
<jsp:useBean id="account" class="jp.paiza.bean.AccountBean" scope="session" />
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>ログイン</title>
<link rel="stylesheet" href="css/style.css" type="text/css">
</head>
<body>
<jsp:include page="header.jsp" />
<h1>ログイン成功</h1>
<p><%= account.getUserId() %></p>
</body>
</html>
JavaBeansと呼ばれるJavaオブジェクトを、JSPページで使用するための標準的な方法を提供します。<jsp:useBean
id="オブジェクトを識別するために使用される名前"
class="参照されるオブジェクトのクラス"
scope="オブジェクトへの参照が利用可能なスコープ" />
IDEなどの開発ツールやJakarta EEなどの環境において利用されるコンポーネントであり、規約に従ったJavaのクラスおよびそのオブジェクトです。
JSPページから利用するためには、次のような規約に沿ったクラスを作成すると基本的に問題ありません。
・アクセスレベルがpublicで、引数なしのコンストラクタがあること
・プロパティへのアクセサが用意されていること
・メソッド名はデフォルトの場合、「getプロパティ名」、boolean型の場合は「isプロパティ名」、「setプロパティ名」とすること
・Serializableインターフェースを実装していること
新・HTML/CSS入門編
https://paiza.jp/works/html-css/new-primer
新・Java入門編
https://paiza.jp/works/java/new-primer
新・Java入門編35: ファイル入出力について学習しよう > シリアライズ
https://paiza.jp/works/java/new-primer/java-new-primer-35/97005
jsp:useBean
https://jakarta.ee/specifications/pages/4.0/jakarta-server-pages-spec-4.0#jsp:useBean
Jakarta Standard Tag Library
https://jakarta.ee/ja/specifications/tags/