1~2편 바로가기
[JSP] 게시판 만들기 | 1편. 환경 설정 및 JSP 개념 이해
1. 목표 로그인, 회원가입, 게시판 기능 구현하기 2. 환경설정 JDK - 17버전 --> 환경변수 설정 다시 해줌 톰캣 - 9.0버전 이클립스 - Java EE Developers 이클립스 실행 후, Dynamic Web Project로 프로젝트를 생
ururuwave.tistory.com
[JSP] 게시판 만들기 | 2편.데이터베이스 설치 및 연동
⬇️ 1편 바로가기 ⬇️ [JSP] 게시판 만들기 | 1편. 환경 설정 및 JSP 개념 이해 1. 목표 로그인, 회원가입, 게시판 기능 구현하기 2. 환경설정 JDK - 17버전 --> 환경변수 설정 다시 해줌 톰캣 - 9.0버전
ururuwave.tistory.com
1. DTO 클래스 만들기 (User.java)
한 명의 회원 데이터를 다룰 수 있는 DTO 클래스를 만들어준다.
DTO로 User 클래스를 만들어줄거다.
사용자의 정보(아이디, 비밀번호, 이름, 성별, 이메일)를 저장하고 전달하는 목적으로 사용되도록 한다.
user 테이블에 있는 컬럼명에 맞춰서, private 접근제한자를 가진 멤버변수들을 만들어준다.
Source -> Generate Getters and Setters로 getter, setter 코드를 만들어준다.
package user;
public class User {
private String userID;
private String userPassword;
private String userName;
private String userGender;
private String userEmail;
public String getUserID() {
return userID;
}
public void setUserID(String userID) {
this.userID = userID;
}
public String getUserPassword() {
return userPassword;
}
public void setUserPassword(String userPassword) {
this.userPassword = userPassword;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserGender() {
return userGender;
}
public void setUserGender(String userGender) {
this.userGender = userGender;
}
public String getUserEmail() {
return userEmail;
}
public void setUserEmail(String userEmail) {
this.userEmail = userEmail;
}
}
2. DAO 클래스 만들기(UserDao.java)
DAO 클래스는 데이터베이스를 연동하고 CRUD를 수행하는 메서드를 담는 클래스다.
public int login(String userID, String userPassword) {
String SQL = "SELECT userPassword FROM USER WHERE userID = ?";
try {
//1.PreparedStatement에 정해진 SQL문장을 DB에 삽입해준다.
//2.SQLinjection을 방어한다. userID가 존재하면 (1) userID를 ?자리에 넣어준다.
//3.실행한 결과를 rs에 담아준다.
//4.결과가 존재한다면 if문 안에 구문이 실행됨.
//5.결과로 나온 userPassword를 받아서 접속을 시도한 userPassword와 동일한지 확인
pstmt = conn.prepareStatement(SQL);
pstmt.setString(1, userID);
rs = pstmt.executeQuery();
if(rs.next()) {
if(rs.getString(1).equals(userPassword)) {
return 1; //로그인 성공을 반환.
}
else
return 0; //비밀번호 불일치.
}
return -1; //id가 없음을 반환함.
}catch(Exception e){
e.printStackTrace();
}
return -2; //데이터베이스 오류
}
✔️로그인 상태를 숫자코드로 표현한다.
rs.getString(1).equals(userPassword)
SQL 실행결과가 0건이면 userID가 없음 --> return -1
메서드 실행 중 예외가 발생하여 정상적인 데이터베이스 연산을 완료할 수 없을 때 --> return -2
로그인 성공 --> return 1
비밀번호 불일치 --> return 0
3. 로그인 화면을 만든다. (login.jsp)
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="UTF-8"%>
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>JSP login페이지</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-T3c6CoIi6uLrA9TneNEoa7RxnatzjcDSCmG1MXxSR1GAsXEV/Dwwykc2MPK8M2HN" crossorigin="anonymous">
</head>
<style>
/* 네비게이션 바의 드롭다운 메뉴 위치 조정 */
.navbar-nav .dropdown-menu {
position: absolute;
right: 0;
overflow-x: hidden;
}
</style>
<body>
<nav class="navbar navbar-expand-lg navbar-light bg-light">
<div class="container-fluid">
<a class="navbar-brand" href="#">JSP 게시판 웹 사이트</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNavDropdown" aria-controls="navbarNavDropdown" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarNavDropdown">
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
<li class="nav-item">
<a class="nav-link" href="#">메인</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">게시판</a>
</li>
</ul>
<ul class="navbar-nav">
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" id="navbarDropdownMenuLink" role="button" data-bs-toggle="dropdown" aria-expanded="false">
계정
</a>
<ul class="dropdown-menu dropdown-menu-end" aria-labelledby="navbarDropdownMenuLink">
<li><a class="dropdown-item" href="#">로그인</a></li>
<li><a class="dropdown-item" href="#">회원가입</a></li>
</ul>
</li>
</ul>
</div>
</div>
</nav>
<div class="container">
<div class="row">
<div class="col-md-6 offset-md-3 p-3 bg-secondary-subtle my-5 rounded">
<form class="p-3" action="loginAction.jsp">
<h2 class="text-center"><b>로그인</b></h2>
<div class="form-group py-2">
<label for="userID">아이디</label>
<input type="text" class="form-control" id="userID" name="userID" placeholder="아이디 입력">
</div>
<div class="form-group py-2">
<label for="userPassword">비밀번호</label>
<input type="password" class="form-control" id="userPassword" name="userPassword"placeholder="비밀번호 입력">
</div>
<button type="submit" class="btn btn-primary" style="float:right; margin-top:10px;">로그인</button>
</form>
</div>
</div>
</div>
<script
src="https://code.jquery.com/jquery-3.7.1.js"
integrity="sha256-eKhayi8LEQwp4NKxN+CfCh+3qOVUtJn3QNZ0TciWLP4="
crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js" integrity="sha384-C6RzsynM9kWDrMNeT87bh95OGNyZPhcTNXj1NW7RuBCsyN/o0jlpcV8Qyq46cDfL" crossorigin="anonymous"></script>
</body>
</html>
부트스트랩 cdn을 임포트해와서 화면을 만들었다.
로그인 버튼은 type을 'submit'으로 만들고
form태그로 감싸서 로그인 버튼을 클릭했을 때, loginAction.jsp 가 실행되도록 했다.
4. 로그인 버튼 눌렀을때, 실행될 jsp 만들기 (loginAction.jsp)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="user.UserDAO"%>
<%@ page import="java.io.PrintWriter"%>
<% request.setCharacterEncoding("UTF-8");%>
<!-- 자바빈은 데이터를 저장하고 데이터에 접근하는 메서드(getter, setter)를 제공한다. -->
<jsp:useBean id="user" class="user.User" scope = "page"/>
<!-- 프로퍼티에 해당하는 setter가 호출되어 요청(request)에 있는 같은 이름의 파라미터 값으로 설정됨 -->
<jsp:setProperty name="user" property="userID"/>
<jsp:setProperty name="user" property="userPassword"/>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>로그인 액션</title>
</head>
<body>
<%
/* 로그인 세션확인 */
String userID = null;
if(session.getAttribute("userID") !=null){ //세션ID 존재하면 userID에 값넣어줌.
userID = (String)session.getAttribute("userID");
}
if(userID != null){
PrintWriter script = response.getWriter();
script.println("<script>");
script.println("alert('이미 로그인이 되어있습니다.')");
script.println("location.href = 'main.jsp'");
script.println("</script>");
}
//0: 비밀번호 불일치
//1 : 로그인 성공
//-1: id없음
//-2:데이터베이스 오류
UserDAO userDAO = new UserDAO();
int result = userDAO.login(user.getUserID(),user.getUserPassword());
if(result == 1){
session.setAttribute("userID",user.getUserID());//세션ID부여
PrintWriter script = response.getWriter();
script.println("<script>");
script.println("alert('로그인 성공.')");
script.println("location.href = 'main.jsp'");
script.println("</script>");
} else if(result == 0){
PrintWriter script = response.getWriter();
script.println("<script>");
script.println("alert('비밀번호가 틀립니다.')");
script.println("history.back()");
script.println("</script>");
} else if(result == -1){
PrintWriter script = response.getWriter();
script.println("<script>");
script.println("alert('존재하지 않는 아이디입니다.')");
script.println("history.back()");
script.println("</script>");
} else if(result == -2){
PrintWriter script = response.getWriter();
script.println("<script>");
script.println("alert('데이터베이스 오류가 발생했습니다.')");
script.println("history.back()");
script.println("</script>");
}
%>
</body>
</html>
session 객체를 사용하여 서버측에 저장된 데이터를 검색한다.
userID가 존재하면 User의 userID 변수에 값을 넣어준다.
userID에 이미 값이 있다면 로그인 되어있다는 의미이므로 이미 로그인이 되어있다는 문구를 띄워준다.
userDAO에 정의해준 login()메서드를 이용하여 로그인 가능 여부를 확인한다.
5. 실행화면
아까 insert해둔 URURU로 로그인을 시도한다.
로그인 성공!
'프로그래밍 언어 > Java' 카테고리의 다른 글
[JSP] 게시판 만들기 | 5편.게시판 기능 구현하기 (1) | 2024.02.07 |
---|---|
[JSP] 게시판 만들기 | 4편.회원가입 기능 구현하기 / 로그아웃 (1) | 2024.02.07 |
[JSP] 게시판 만들기 | 2편.데이터베이스 설치 및 연동 (1) | 2024.02.07 |
[JSP] 게시판 만들기 | 1편. 환경 설정 및 JSP 개념 이해 (0) | 2024.02.07 |
[Java]Socket을 활용한 간단한 클라이언트-서버 통신 (1) | 2023.12.28 |