필요하다고 생각한 jsp파일들을 미리 폴더를 만들어 생성해놨다.
logoutAction은 login과 같이 폴더를 묶어놨다.
checkDateAction은 일기를 작성하고자 하는 날을 체크하기 위해 만든 것이다.
처음으로 loginForm.jsp를 구현했다.
일단 처음에는 [DB]diary.login의 my_session을 확인 하도록 한다.
[DB]diary.login의 my_session은 로그인이 되어있는 상태인지 알 수 있는 data이다.
ON일 경우 로그인이 되어있는 상태이고, OFF일 경우 로그아웃인 상태이다
my_session이 ON일 경우는 해당 페이지를 보여 줄 필요가 없기떄문에 바로 diaryListOfMonth로 보여주도록 했다
OFF일 경우는 아래 처럼 id와 pw를 입력하는 폼이 나타나게 만들었다.(현재는 기능만 구현해놓은 상태)
그리고 아직은 없지만 로그인이 안된 상태에서 일기리스트를 보고자 했을 경우 loginForm으로 돌아가고 에러 메시지를 출력할 수 있게 errMsg를 변수로 만들고 errMsg에 값이 있을경우 로그인 상단에 출력 할 수 있도록 해놓았다.
id와 pw값은 입력 후 loginAction.jsp로 넘어가도록 했다
loginForm.jsp
<%@page import="java.net.URLEncoder"%>
<%@page import="java.sql.*"%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
/* 0. 로그인(인증) 분기 */
// [DB] diary.login.my_session -> 'ON'[로그인이 되어있을 경우] -> redirect("diaryListOfMonth.jsp")
// DB 연결 및 초기화
Class.forName("org.mariadb.jdbc.Driver");
Connection conn = null;
conn = DriverManager.getConnection("jdbc:mariadb://127.0.0.1:3307/diary", "root", "****");
// mySession 값을 가져오는 SQL 쿼리 실행
String getMySessionSql = "SELECT my_session mySession FROM login";
PreparedStatement getMySessionStmt = null;
ResultSet getMySessionRs = null;
getMySessionStmt = conn.prepareStatement(getMySessionSql);
getMySessionRs = getMySessionStmt.executeQuery();
// mySession 값
String mySession = null;
if(getMySessionRs.next()) {
mySession = getMySessionRs.getString("mySession");
}
System.out.println("diaryListOfMonth - mySession = " + mySession); // mySession 값 확인
// mySession이 ON일 경우 -> 이미 로그인이 되어있음 -> diaryListOfMonth.jsp로 이동
if(mySession.equals("ON")) {
response.sendRedirect("/diary/diaryListOfMonth.jsp");
// DB 반납
getMySessionRs.close();
getMySessionStmt.close();
conn.close();
return ; // 코드의 진행을 끝 낼때 사용
}
// 1. 요청값 분석
String errMsg = request.getParameter("errMsg");
// DB 반납
getMySessionRs.close();
getMySessionStmt.close();
conn.close();
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>loginForm</title>
</head>
<body>
<div>
<%
if(errMsg != null) {
%>
<%=errMsg%>
<%
}
%>
</div>
<h1>로그인</h1>
<form action="/diary/login/loginAction.jsp" method="post">
id
<input type="text" name="memberId">
pw
<input type="password" name="memberPw">
<button type="submit">로그인</button>
</form>
</body>
</html>
loginAction.jsp도 마찬가지로 my_session값을 확인했다.
id, pw요청 값을 확인하고, [DB]diary.login에 id와 pw를 SELECT 쿼리를 사용해 일치하는지 확인하고
일치한다면 my_session을 ON으로, on_date(로그인성공한 날짜)를 NOW()로 변경시키는 쿼리를 실행하고 diaryListOfMonth로 redirect하였다
일치하지 않았다면 errMsg와 함께 loginForm.jsp로 redirect해줬다
loginAction.jsp
<%@page import="java.sql.*"%>
<%@page import="java.net.URLEncoder"%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
/* 0. 로그인(인증) 분기 */
// [DB] diary.login.my_session -> 'ON'(로그인이 되어있을 경우) -> redirect("diaryListOfMonth.jsp")
// DB 연결 및 초기화
Class.forName("org.mariadb.jdbc.Driver");
Connection conn = null;
conn = DriverManager.getConnection("jdbc:mariadb://127.0.0.1:3307/diary", "root", "****");
// mySession 값을 가져오는 SQL 쿼리 실행
String getMySessionSql = "SELECT my_session mySession FROM login";
PreparedStatement getMySessionStmt = null;
ResultSet getMySessionRs = null;
getMySessionStmt = conn.prepareStatement(getMySessionSql);
getMySessionRs = getMySessionStmt.executeQuery();
// mySession 값
String mySession = null;
if(getMySessionRs.next()) {
mySession = getMySessionRs.getString("mySession");
}
System.out.println("diaryListOfMonth - mySession = " + mySession); // mySession 값 확인
// mySession이 ON일 경우 -> 이미 로그인이 되어있음 -> diaryListOfMonth.jsp로 이동
if(mySession.equals("ON")) {
response.sendRedirect("/diary/diaryListOfMonth.jsp");
// DB 반납
getMySessionRs.close();
getMySessionStmt.close();
conn.close();
return ; // 코드의 진행을 끝 낼때 사용
}
// 1. 요청값 분석
// post 인코딩 설정
request.setCharacterEncoding("utf-8");
String memberId = request.getParameter("memberId");
String memberPw = request.getParameter("memberPw");
System.out.println("loginAction - memberID = " + memberId); //memberId 값 확인
System.out.println("loginAction - memberPw = " + memberPw); //memberId 값 확인
String getMemberIdSql = "SELECT member_id memberId FROM MEMBER WHERE member_id = ? AND member_pw = ?";
PreparedStatement getMemberIdStmt = null;
ResultSet getMemberIdRs = null;
getMemberIdStmt = conn.prepareStatement(getMemberIdSql);
getMemberIdStmt.setString(1, memberId);
getMemberIdStmt.setString(2, memberPw);
getMemberIdRs = getMemberIdStmt.executeQuery();
if(getMemberIdRs.next()) {
// 로그인 성공
System.out.println("로그인 성공");
// [DB]diary.login.my_session -> 'ON'으로 변경 해야한다.
// my_session 값을 ON으로 바꾸는 SQL 쿼리
String loginMySessionSql = "UPDATE login SET my_session = 'ON', on_date = NOW() WHERE my_session = 'OFF'";
PreparedStatement loginMySessionStmt = null;
loginMySessionStmt = conn.prepareStatement(loginMySessionSql);
int row = loginMySessionStmt.executeUpdate();
System.out.println("loginAction - row = " + row);
response.sendRedirect("/diary/diaryListOfMonth.jsp");
} else {
String errMsg = URLEncoder.encode("아이디와 비밀번호를 확인해주세요.", "UTF-8");
response.sendRedirect("/diary/login/loginForm.jsp?errMsg=" + errMsg);
// DB 반납
getMySessionRs.close();
getMySessionStmt.close();
conn.close();
return ; // 코드의 진행을 끝 낼때 사용
}
// DB 반납
getMemberIdRs.close();
getMemberIdStmt.close();
getMySessionRs.close();
getMySessionStmt.close();
conn.close();
%>
'웹 개발 > 다이어리 프로젝트(개인)' 카테고리의 다른 글
jsp로 crud를 사용한 다이어리 만들기(6)-일기 삭제 (0) | 2024.03.27 |
---|---|
jsp로 crud를 사용한 다이어리 만들기(5)-일기 상세 보기 (0) | 2024.03.27 |
jsp로 crud를 사용한 다이어리 만들기(4)-메인 달력 다이어리 (0) | 2024.03.27 |
jsp로 crud를 사용한 다이어리 만들기(3)-로그아웃,일기쓰기 (0) | 2024.03.25 |
jsp로 crud를 사용한 다이어리 만들기(1) (0) | 2024.03.25 |