JSP_basic. MySQL DBに関連付けられたログインページの作成(PreparedStatement,session)


JavaからSQL DBへの接続方法
準備内容はmysqlコネクタです.

WEB-INFのライブラリにコネクタが用意されている場合は、
userLoginForm.jspファイルを作成します.
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous">
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<row>
<div class="col-sm-5">
	<form action="http://localhost:8181/JSPbasic/user/userLoginCheck.jsp" method="post">
		<input type="text" name="userId" placeholder="아이디를 입력해주세요." class="form-control form-control-lg">
		<input type="password" name="userPw" placeholder="비밀번호를 입력해주세요." class="form-control form-control-lg">
		<input type="submit" value="확인" class="btn btn-primary mb-3">
	</form>
</div>
</row>


</body>
</html>

簡単なログインフォームが作成されました.
form=actionを指定してUserLoginCheckを使用します.jspに移動することにしました.
入力IDはuserId
入力したパスワードはuserpwという名前のデータを保存します.
このデータをsubmitボタンでpostで送信します.
ユーザLoginCheckは、受信したデータをDBに関連付けて比較する.jspではPreparedStatementが使用されます.
まず、setCharacterEncodeを宣言し、データ転送エラーを防止します.
request.setCharacterEncoding("UTF-8");
次に、転送されたデータを変数に格納します.
String uId = request.getParameter("userId");
	String uPw = request.getParameter("userPw");
次に、接続文をDBにバインドする準備をします.
	String dbType = "com.mysql.cj.jdbc.Driver";
	String connectUrl = "jdbc:mysql://localhost:3306/jdbcprac2?serverTimezone=UTC";
	String connectId = "root";
	String connectPw = "????";
上記のdbType、connectUrl、connectId、connectPwは次のとおりです.
接続文のDriveManager.getConnection
これにより、SQL DBに簡単にアクセスできます.
try {
		Class.forName(dbType);
	
		Connection con = DriverManager.getConnection(connectUrl, connectId, connectPw);
		
		String sql = "SELECT*FROM userinfo WHERE user_id = ?";
		
		PreparedStatement pstmt = con.prepareStatement(sql);
		

		pstmt.setString(1, uId);
		
		
		rs = pstmt.executeQuery();
try~catchのtryにDB関連構文と必要なメソッドを挿入すればよい.
PreparedStatementでは、sqlに送信するクエリー文を保存するのは難しくありません.
String sql = "SELECT*FROM userinfo WHERE user_id = ?"; 同じように
“?”貼ればいい
その後.setString(数値、変数)の使用
数字の2番目?に必要な変数を挿入します.
その後rs=pstmtとなる.executeQuery();道.
クエリ文はsqlリクエストデータに送信されました.
次に、ログインチェック方法を作成します.
ここで作成する基本的なログイン方法はif~else文を使用してデータベースデータと比較することです.
		if(rs.next()){			
			String dbId = rs.getString(1);
			String dbPw =  rs.getString(2);
			String dbName = rs.getString(3);
			String dbMail =  rs.getString(4); 

			if(uPw.equals(dbPw)) {
						
				response.sendRedirect("http://localhost:8181/JSPbasic/user/loginWelcome.jsp");
							
				} else {
						response.sendRedirect("http://localhost:8181/JSPbasic/user/userPwFail.jsp");
				}
		
			} else {
				response.sendRedirect("http://localhost:8181/JSPbasic/user/userIdFail.jsp");
			}
			
		
	} catch(Exception e){
		e.printStackTrace();
	}
%>
ログイン失敗時
userIdFail.jspを使用して再起動または
userPwFail.jspのフォーマットにリダイレクトします.
要求データベースのデータがIDとPWと一致している場合は、Welcomeにログインします.jspを使用して再起動します.
難しくないですね.
以下はjspファイルにログインする全文です.
<%@page import="java.sql.ResultSet"%>
<%@page import="java.sql.PreparedStatement"%>
<%@page import="java.sql.DriverManager"%>
<%@page import="java.sql.Connection"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
	request.setCharacterEncoding("UTF-8");
	String uId = request.getParameter("userId");
	String uPw = request.getParameter("userPw");
	
	String dbType = "com.mysql.cj.jdbc.Driver";
	String connectUrl = "jdbc:mysql://localhost:3306/jdbcprac2?serverTimezone=UTC";
	String connectId = "root";
	String connectPw = "mysql";
	
	ResultSet rs = null;
	
	try {
		Class.forName(dbType);
	
		Connection con = DriverManager.getConnection(connectUrl, connectId, connectPw);
		
		String sql = "SELECT*FROM userinfo WHERE user_id = ?";
		
		PreparedStatement pstmt = con.prepareStatement(sql);
		

		pstmt.setString(1, uId);
		
		
		rs = pstmt.executeQuery();
		
		if(rs.next()){			
			String dbId = rs.getString(1);
			String dbPw =  rs.getString(2);
			String dbName = rs.getString(3);
			String dbMail =  rs.getString(4); 

			if(uPw.equals(dbPw)) {
						
session.setAttribute("s_id", uId);				response.sendRedirect("http://localhost:8181/JSPbasic/user/loginWelcome.jsp");
							
				} else {
						response.sendRedirect("http://localhost:8181/JSPbasic/user/userPwFail.jsp");
				}
		
			} else {
				response.sendRedirect("http://localhost:8181/JSPbasic/user/userIdFail.jsp");
			}
			
		
	} catch(Exception e){
		e.printStackTrace();
	}
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>


</body>
</html>
loginWelcome.jspの専門家.
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous">
<%
	request.setCharacterEncoding("UTF-8");
	String userId = (String)session.getAttribute("s_id");
	System.out.println(userId);
	
	if (userId == null) {
		response.sendRedirect("userLoginForm.jsp");
	}
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<p><strong><%= userId %>님 로그인을 환영합니다.</strong></p>
	<p><strong><a href="http://localhost:8181/JSPbasic/user/userLogout.jsp">로그아웃하기</a></strong></p>
	
</body>
</html>
userPwFail.私はjspの専門家です.
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous">
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<p><strong>비밀번호를 잘못 입력했습니다.</strong></p>
	<p><strong><a href="http://localhost:8181/JSPbasic/user/userLoginForm.jsp">로그인 화면으로 돌아가기</a></strong></p>
</body>
</html>
userIdFail.jspの専門家.
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous">
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<p><strong>ID를 잘못 입력했습니다.</strong></p>
	<p><strong><a href="http://localhost:8181/JSPbasic/user/userLoginForm.jsp">로그인 화면으로 돌아가기</a></strong></p>
</body>
</html>
userLogout.jspの専門家.
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
	session.invalidate();
	response.sendRedirect("userLoginForm.jsp");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

</body>
</html>
最後にMySQLで作成したヒープ表.

まずはここまで