본문 바로가기

웹프로그래밍/Jsp&Servlet

[JSP] JSP,MYSQL 연동, JDBC, 간단한 회원정보 등록

TABLE생성

먼저 MYSQL COMMAND LINE을 실행하고, 테이블을 하나 만들어준다.

여기선 TUTORIAL이라는 DB안에 user라는 이름의 테이블을 만들어주고, id와 password컬럼을 생성하였다.

간단한 기능만을 구현할것이기 때문에 primary key는 지정해주지 않았다.

CREATE TABLE user (
userID VARCHAR(32),
userPassword VARCHAR(32)
);

 

 

JDBC다운로드

JDBC는 자바 프로그램에서 DB와 관련된 작업을 수행할 수 있도록 해주는 도와주는 드라이버이다.

아래 사이트에서 다운하여 lib디렉토리 안에 붙여 넣어주면 셋팅된다.

https://dev.mysql.com/downloads/connector/j/

↑두번째꺼 다운로드

 

 

DTO와 DAO

그리고 jsp와 mysql을 연결해주기 위해서 일반적으로 DTO, DAO 클래스가 필요하다.

나는 만들어 둔 테이블 이름이 user이므로 패키지명을 user로 하고 여기에 UserDTO.java와 UserDAO.java파일을 생성하였다.

 

 

UserDTO.java

DTO(Data Transfer Object): JSP와 MYSQL이 서로 데이터 전달하기 위한 단위, 멤버변수는 private, getter()와 setter()을 만들어 준다.'

package user;

public class UserDTO {

	String userID;
	String userPassword;

	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;
	}
}

 

UserDAO.java

DAO(Data Access Object): 데이터베이스에 직접 접근하여 데이터 처리를 하는 클래스

package user;

import java.sql.Connection;
import java.sql.PreparedStatement;

import util.DatabaseUtil;

public class UserDAO {
	Connection conn = DatabaseUtil.getConnection();

	public int join(String userID, String userPassword) {
		String SQL = "INSERT INTO USER VALUES (?,?)";
		try {
			// 각각의 데이터를 실제로 넣어준다.
			PreparedStatement pstmt = conn.prepareStatement(SQL);

			// 쿼리문의 ?안에 각각의 데이터를 넣어준다.
			pstmt.setString(1, userID);
			pstmt.setString(2, userPassword);

			// 명령어를 수행한 결과 반환, 반환값: insert가 된 데이터의 개수
			return pstmt.executeUpdate();

		} catch (Exception e) {
			e.printStackTrace();
		}
		return -1;
	}
}

- Connection: 자바와 db를 연결해주는 클래스

- PreparedStatement: SQL문을 지정하고 인자값으로 ?안에 들어갈 데이터를 동적으로 넣어줄 수 있다.

executeUpdate(): 명령어를 수행한 결과를 반환하며 위 코드에서의 결괏값은 insert된 데이터의 개수이다.

 

데이터베이스 연결 코드

이제, 데이터베이스를 연결해주기 위한 파일을 생성해주기 위해 util이라는 패키지를 만들고 여기에 자바파일을 하나 만들어 준다.

 

DatabaseUtil.java

package util;

import java.sql.Connection;
import java.sql.DriverManager;

public class DatabaseUtil {
	public static Connection getConnection() { //데이터베이스와 연결상태 관리
		try {
			String dbURL = "jdbc:mysql://localhost:3306/TUTORIAL?useSSL=false&serverTimezone=UTC";
			String dbID = "root";
			String dbPassword = "1234";
			Class.forName("com.mysql.cj.jdbc.Driver");
			return DriverManager.getConnection(dbURL, dbID, dbPassword);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}
}

 

- dbURL : 연결하고자 하는 DB주소를 넣어준다. MySQL포트번호는 3306이며 여기선 TUTORIAL이라는 DB에 접근하다. 나는 MySql이 최신버전이었기 때문에 자꾸 버전오류가 떠서 뒤에 userSSL=false&serverTimezone=UTC를 추가로 넣어주었다.

- dbID: db 아이디

- dbPassword: db 패스워드

- Class.forName("jdbc드라이버"): jdbc드라이버를 불러온다. 나는 다운로드시 jdbc가 8.x버전인 가장 최신버전이었기 때문에 컴파일시 자꾸 오류가 발생하여 중간에 cj를 추가해주니 정상적으로 작동되었다.

- DriverManager.getConnection(): mysql에 연결하기 위한 커넥션 정보를 입력한다.

 

이제 db연결을 위한 모든 준비는 끝이났다.

사용자의 아이디, 비밀번호를 입력하고 버튼을 누르면 회원가입이 완료되는 정말 간단한 페이지를 만들어 보자.

 

index.jsp

폼태그로 사용자의 아이디, 비밀번호를 입력받는다. 버튼을 누르면 post형식으로 userJoinAction페이지에서 회원가입 로직을 처리한다.

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title></title>
</head>
<body>
	<form action="./userJoinAction.jsp" method="post">
		<input type="text" name="userID">
		<input type="password" name="userPassword">
		<input type="submit" value="전송">
	</form>
</body>
</html>

 

userJoinAction.jsp

index.jsp에서 넘겨받은 아이디와 비밀번호를 string변수에 넣어주고 아까 만든 userDAO객체의 join메서드에서 회원가입 처리를 해준다. 이때, 넘겨받은 아이디와 비밀번호가 null값일 수 있으므로 if문으로 예외를 처리한다.

회원가입에 성공할 경우 다시 첫 index.jsp페이지로 이동하도록 한다.

이때, javascript를 출력해주기 위하여 "java.io.PrintWriter"를 import해주었다.

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@ page import="user.UserDTO"%>
<%@ page import="user.UserDAO"%>
<%@ page import="java.io.PrintWriter"%>
<%
	//사용자가 보낸 데이터를 한글을 사용할 수 있는 형식으로 변환
	request.setCharacterEncoding("UTF-8");
	String userID = null;
	String userPassword = null;

	if (request.getParameter("userID") != null) {
		userID = (String) request.getParameter("userID");
	}

	if (request.getParameter("userPassword") != null) {
		userPassword = (String) request.getParameter("userPassword");
	}

	if (userID == null || userPassword == null) {
		PrintWriter script = response.getWriter();
		script.println("<script>");
		script.println("alert('입력이 안 된 사항이 있습니다.')");
		script.println("</script>");
		script.close();
		return;
	}

	UserDAO userDAO = new UserDAO();
	int result = userDAO.join(userID, userPassword);
	if (result == 1) {
		PrintWriter script = response.getWriter();
		script.println("<script>");
		script.println("alert('회원가입에 성공했습니다.')");
		script.println("location.href='index.jsp';");
		script.println("</script>");
		script.close();
		return;
	}
%>

 

실행 결과

index.jsp

 

userJoinAction.jsp

 

 

테이블에 데이터가 잘 들어가 있는 모습을 확인할 수 있다.

 

 

Reference

https://youtu.be/1Wuwl57cXvw