#04:ログイン処理の実装 - SELECT
このチャプターでは、ログイン処理についてデータベースとの連携をおこないます。
【LoginModel】package jp.paiza.model;
import jp.paiza.bean.AccountBean;
import java.sql.*;
public class LoginModel {
private Connection con;
public LoginModel(Connection con) {
this.con = con;
}
public boolean login(String userId, String password) {
String sql = "select * from accounts where user_id = ? and password = ?";
try (PreparedStatement query = con.prepareStatement(sql)) {
query.setString(1, userId);
query.setString(2, password);
ResultSet rs = query.executeQuery();
boolean b = rs.next();
System.out.println(b);
return b;
} catch (SQLException e) {
e.printStackTrace();
return false;
}
}
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 java.sql.*;
import javax.sql.*;
import jakarta.annotation.*;
import jakarta.servlet.*;
import jakarta.servlet.annotation.*;
import jakarta.servlet.http.*;
import jp.paiza.model.*;
@WebServlet("/login")
public class LoginServlet extends HttpServlet {
@Resource(name = "jdbc/datasource")
private DataSource ds;
@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();
try (Connection con = ds.getConnection()) {
LoginModel m = new LoginModel(con);
if (m.login(userId, password)) {
req.getSession().setAttribute("account", m.find(userId));
RequestDispatcher d =
req.getRequestDispatcher("/posts");
d.forward(req, res);
} else {
res.sendRedirect("login");
}
} catch (SQLException e) {
throw new ServletException(e);
}
}
}
新・Java入門編36: JDBCについて学習しよう
https://paiza.jp/works/java/new-primer/java-new-primer-36
新・SQL入門編2: SELECT文を理解しよう
https://paiza.jp/works/sql/new-primer/sql-new-primer-2
インタフェースDataSource
https://docs.oracle.com/javase/jp/17/docs/api/java.sql/javax/sql/DataSource.html
インタフェースPreparedStatement
https://docs.oracle.com/javase/jp/17/docs/api/java.sql/java/sql/PreparedStatement.html
インタフェースResultSet
https://docs.oracle.com/javase/jp/17/docs/api/java.sql/java/sql/ResultSet.html