목차
728x90
반응형
JSP에서 DB 연동
및
로그인 회원가입 페이지 구현
학부시절 JSP를 이용하여 간단한 로그인 및 회원가입 기능을 구현했던 내용. 로그인 및 회원가입 처리를 위해 Servlet과 MySQL 사용
프로젝트 구조
WebContent/
├── login.jsp
├── register.jsp
├── loginProcess.jsp
├── registerProcess.jsp
├── logout.jsp
└── WEB-INF/
└── web.xml
1. TABLE 생성
create table user(
userID varchar(20),
userPassword varchar(20),
userName varchar(20),
userGender varchar(20),
userEmail varchar(20),
primary key (userID)
);
userID, userPassword, userName, userGender, userEmail을 생성하고 userID를 기본키로 설정
2. 회원가입 페이지 (register.jsp)
<%@ page contentType="text/html; charset=UTF-8" %>
<html>
<head>
<title>회원가입</title>
</head>
<body>
<form action="registerProcess.jsp" method="post">
아이디: <input type="text" name="userId" required><br>
비밀번호: <input type="password" name="password" required><br>
<button type="submit">가입하기</button>
</form>
</body>
</html>
3. 회원가입 처리 (registerProcess.jsp)
<%@ page import="java.sql.*" %>
<%@ page import="java.security.MessageDigest" %>
<%
request.setCharacterEncoding("UTF-8");
String userId = request.getParameter("userId");
String password = request.getParameter("password");
// 비밀번호 해싱 (SHA-256 예제, 실제 서비스에서는 BCrypt 사용 권장)
MessageDigest md = MessageDigest.getInstance("SHA-256");
byte[] hash = md.digest(password.getBytes("UTF-8"));
StringBuilder hexString = new StringBuilder();
for (byte b : hash) {
hexString.append(String.format("%02x", b));
}
String hashedPassword = hexString.toString();
// DB 연결 및 데이터 저장
Connection conn = null;
PreparedStatement pstmt = null;
try {
Class.forName("com.mysql.cj.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/testdb", "root", "password");
String sql = "INSERT INTO users (userId, password) VALUES (?, ?)";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, userId);
pstmt.setString(2, hashedPassword);
pstmt.executeUpdate();
response.sendRedirect("login.jsp");
} catch (Exception e) {
out.println("회원가입 실패: " + e.getMessage());
} finally {
if (pstmt != null) pstmt.close();
if (conn != null) conn.close();
}
%>
4. 로그인 페이지 (login.jsp)
<%@ page contentType="text/html; charset=UTF-8" %>
<html>
<head>
<title>로그인</title>
</head>
<body>
<form action="loginProcess.jsp" method="post">
아이디: <input type="text" name="userId" required><br>
비밀번호: <input type="password" name="password" required><br>
<button type="submit">로그인</button>
</form>
</body>
</html>
5. 로그인 처리 (loginProcess.jsp)
<%@ page import="java.sql.*" %>
<%@ page import="java.security.MessageDigest" %>
<%
request.setCharacterEncoding("UTF-8");
String userId = request.getParameter("userId");
String password = request.getParameter("password");
// 비밀번호 해싱 (SHA-256 사용)
MessageDigest md = MessageDigest.getInstance("SHA-256");
byte[] hash = md.digest(password.getBytes("UTF-8"));
StringBuilder hexString = new StringBuilder();
for (byte b : hash) {
hexString.append(String.format("%02x", b));
}
String hashedPassword = hexString.toString();
// DB에서 사용자 정보 조회
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
Class.forName("com.mysql.cj.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/testdb", "root", "password");
String sql = "SELECT * FROM users WHERE userId = ? AND password = ?";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, userId);
pstmt.setString(2, hashedPassword);
rs = pstmt.executeQuery();
if (rs.next()) {
session.setAttribute("userId", userId);
response.sendRedirect("welcome.jsp");
} else {
out.println("로그인 실패: 아이디 또는 비밀번호가 일치하지 않습니다.");
}
} catch (Exception e) {
out.println("로그인 오류: " + e.getMessage());
} finally {
if (rs != null) rs.close();
if (pstmt != null) pstmt.close();
if (conn != null) conn.close();
}
%>
6. 로그아웃 기능 (logout.jsp)
<%
session.invalidate();
response.sendRedirect("login.jsp");
%>
실행 결과
1.메인페이지

2. 회원가입

3. 회원가입 성공

4. 로그인 페이지

5. 로그인 성공

6. DB 테이블

해당 내용은 올드한 코드방식이고 요즘은 프레임워크에서 자동으로 해주지만... db 커넥트부터 프로그래밍까지 연결된 내용이다.
728x90
반응형
'Web[FE] > JSP' 카테고리의 다른 글
[Java] StringBuilder와 String의 차이 | 민민의 하드디스크 - 티스토리 (0) | 2023.08.07 |
---|---|
[JSP] 세션(Session) 활용하여 로그인 페이지 데이터 저장, 이동하기 | 민민의 하드디스크 - 티스토리 (0) | 2023.06.12 |
[JSP] 이클립스에서 JSP와 MySQL 연동하기 | 민민의 하드디스크 - 티스토리 (0) | 2023.06.09 |
[JSP] 이클립스(eclipse) 파일 저장 시 오류 | 민민의 하드디스크 - 티스토리 (2) | 2023.06.07 |
728x90
반응형
JSP에서 DB 연동
및
로그인 회원가입 페이지 구현
학부시절 JSP를 이용하여 간단한 로그인 및 회원가입 기능을 구현했던 내용. 로그인 및 회원가입 처리를 위해 Servlet과 MySQL 사용
프로젝트 구조
WebContent/
├── login.jsp
├── register.jsp
├── loginProcess.jsp
├── registerProcess.jsp
├── logout.jsp
└── WEB-INF/
└── web.xml
1. TABLE 생성
create table user(
userID varchar(20),
userPassword varchar(20),
userName varchar(20),
userGender varchar(20),
userEmail varchar(20),
primary key (userID)
);
userID, userPassword, userName, userGender, userEmail을 생성하고 userID를 기본키로 설정
2. 회원가입 페이지 (register.jsp)
<%@ page contentType="text/html; charset=UTF-8" %>
<html>
<head>
<title>회원가입</title>
</head>
<body>
<form action="registerProcess.jsp" method="post">
아이디: <input type="text" name="userId" required><br>
비밀번호: <input type="password" name="password" required><br>
<button type="submit">가입하기</button>
</form>
</body>
</html>
3. 회원가입 처리 (registerProcess.jsp)
<%@ page import="java.sql.*" %>
<%@ page import="java.security.MessageDigest" %>
<%
request.setCharacterEncoding("UTF-8");
String userId = request.getParameter("userId");
String password = request.getParameter("password");
// 비밀번호 해싱 (SHA-256 예제, 실제 서비스에서는 BCrypt 사용 권장)
MessageDigest md = MessageDigest.getInstance("SHA-256");
byte[] hash = md.digest(password.getBytes("UTF-8"));
StringBuilder hexString = new StringBuilder();
for (byte b : hash) {
hexString.append(String.format("%02x", b));
}
String hashedPassword = hexString.toString();
// DB 연결 및 데이터 저장
Connection conn = null;
PreparedStatement pstmt = null;
try {
Class.forName("com.mysql.cj.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/testdb", "root", "password");
String sql = "INSERT INTO users (userId, password) VALUES (?, ?)";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, userId);
pstmt.setString(2, hashedPassword);
pstmt.executeUpdate();
response.sendRedirect("login.jsp");
} catch (Exception e) {
out.println("회원가입 실패: " + e.getMessage());
} finally {
if (pstmt != null) pstmt.close();
if (conn != null) conn.close();
}
%>
4. 로그인 페이지 (login.jsp)
<%@ page contentType="text/html; charset=UTF-8" %>
<html>
<head>
<title>로그인</title>
</head>
<body>
<form action="loginProcess.jsp" method="post">
아이디: <input type="text" name="userId" required><br>
비밀번호: <input type="password" name="password" required><br>
<button type="submit">로그인</button>
</form>
</body>
</html>
5. 로그인 처리 (loginProcess.jsp)
<%@ page import="java.sql.*" %>
<%@ page import="java.security.MessageDigest" %>
<%
request.setCharacterEncoding("UTF-8");
String userId = request.getParameter("userId");
String password = request.getParameter("password");
// 비밀번호 해싱 (SHA-256 사용)
MessageDigest md = MessageDigest.getInstance("SHA-256");
byte[] hash = md.digest(password.getBytes("UTF-8"));
StringBuilder hexString = new StringBuilder();
for (byte b : hash) {
hexString.append(String.format("%02x", b));
}
String hashedPassword = hexString.toString();
// DB에서 사용자 정보 조회
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
Class.forName("com.mysql.cj.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/testdb", "root", "password");
String sql = "SELECT * FROM users WHERE userId = ? AND password = ?";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, userId);
pstmt.setString(2, hashedPassword);
rs = pstmt.executeQuery();
if (rs.next()) {
session.setAttribute("userId", userId);
response.sendRedirect("welcome.jsp");
} else {
out.println("로그인 실패: 아이디 또는 비밀번호가 일치하지 않습니다.");
}
} catch (Exception e) {
out.println("로그인 오류: " + e.getMessage());
} finally {
if (rs != null) rs.close();
if (pstmt != null) pstmt.close();
if (conn != null) conn.close();
}
%>
6. 로그아웃 기능 (logout.jsp)
<%
session.invalidate();
response.sendRedirect("login.jsp");
%>
실행 결과
1.메인페이지

2. 회원가입

3. 회원가입 성공

4. 로그인 페이지

5. 로그인 성공

6. DB 테이블

해당 내용은 올드한 코드방식이고 요즘은 프레임워크에서 자동으로 해주지만... db 커넥트부터 프로그래밍까지 연결된 내용이다.
728x90
반응형
'Web[FE] > JSP' 카테고리의 다른 글
[Java] StringBuilder와 String의 차이 | 민민의 하드디스크 - 티스토리 (0) | 2023.08.07 |
---|---|
[JSP] 세션(Session) 활용하여 로그인 페이지 데이터 저장, 이동하기 | 민민의 하드디스크 - 티스토리 (0) | 2023.06.12 |
[JSP] 이클립스에서 JSP와 MySQL 연동하기 | 민민의 하드디스크 - 티스토리 (0) | 2023.06.09 |
[JSP] 이클립스(eclipse) 파일 저장 시 오류 | 민민의 하드디스크 - 티스토리 (2) | 2023.06.07 |