[홈페이지만들기5] DAO, DTO 이용하여 join_db, login_db, checkId_db.jsp '처리'부분 분리

jngyoon·2023년 8월 31일
0

혼공일기

목록 보기
10/24

<~~db.jsp 파일 구성>

  1. DBConnection 연결
  2. 파라미터(데이터) 수집
  3. 처리(로직 작성)
  4. 처리된 과정의 흐름 나누기(ex. 성공화면으로 이동 or 실패화면으로 이동)
                       ⇓
    DAO, DTO 이용하여 '처리' 부분 분리

DBConnection.java

package dao;

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

public class DBConnection {
	private static Connection conn;
	
	public static Connection getConnection() {
		if(conn == null) {
			try{
				Class.forName("com.mysql.cj.jdbc.Driver");
				String url = "jdbc:mysql://localhost:3306/gb";
				String user = "root";
				String password = "1234";		
				conn = DriverManager.getConnection(url, user, password);
			}
			catch(Exception e){
				
			}
			return conn;
		}
		}
	}

UserDTO.java

package dto;

public class UserDTO {
	private String userid;
	private String userpw;
	private String username;
	
	public String getUserid() {
		return userid;
	}
	public void setUserid(String userid) {
		this.userid = userid;
	}
	public String getUserpw() {
		return userpw;
	}
	public void setUserpw(String userpw) {
		this.userpw = userpw;
	}
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
}

UserDAO.java

package dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import dto.UserDTO;

public class UserDAO {
	Connection conn;
	PreparedStatement ps;
	ResultSet rs;
	
	public boolean join(UserDTO newUser) {
		String sql = "insert into t_user values(?,?,?)";
		int result = 0;
		try {
			PreparedStatement ps = conn.prepareStatement(sql);
			
			ps.setString(1, newUser.getUserid());
			ps.setString(2, newUser.getUserpw());
			ps.setString(3, newUser.getUsername());
			
			result = ps.executeUpdate();
		} catch (SQLException e) {
		}
		return result == 1;
	}
	
	public boolean login(String userid, String userpw) {
		String sql = "select * from t_user where userid=? and userpw=?";
	
		try {
			ps = conn.prepareStatement(sql);
			
			ps.setString(1, userid);
			ps.setString(2, userpw);
			
			rs = ps.executeQuery();
			
			return rs.next();
		} catch (SQLException e) {
		}
		return false;
	}
	
	public boolean checkId(String userid) {
		String sql = "select * from t_user where userid=?";
		try {
			ps = conn.prepareStatement(sql);
			ps.setString(1, userid);
			
			rs = ps.executeQuery();
			
			return !rs.next();		//결과가 없으면 true
		} catch (SQLException e) {
		}
		return false;
	}
}

join_db.jsp

<%@page import="dao.UserDAO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<% request.setCharacterEncoding("UTF-8"); %>
//useBean 이용하여 newUser 객체에 UserDTO에 날아온 모든 데이터 가져오기
<jsp:useBean id="newUser" class="dto.UserDTO"/>
<jsp:setProperty name="newUser" property="*"/>
<%
	UserDAO udao = new UserDAO();
	if(udao.join(newUser)){
		//성공 화면으로 이동
		Cookie cookie = new Cookie("joinid",newUser.getUserid());
		response.addCookie(cookie);
		response.sendRedirect("loginview.jsp");
	}
	else{
		//실패 화면으로 이동
	}
%>

login_db.jsp

<%@page import="dao.UserDAO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<% request.setCharacterEncoding("UTF-8"); %>
<%
	//login_db는 userid, userpw 두개만 필요하니까 
    //join_db처럼 NewUser 객체에 담을 필요 없음
	String userid = request.getParameter("userid");
	String userpw = request.getParameter("userpw");
	
	UserDAO udao = new UserDAO();
	
	//성공하면 main.jsp로 이동
	if(udao.login(userid, userpw)){
		session.setAttribute("loginUser", userid);
		response.sendRedirect("main.jsp");
	}
	//실패하면 실패화면으로 이동
	else{
		response.sendRedirect("login_fail.jsp");
	}
%>

checkId_db.jsp

<%@page import="dao.UserDAO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<% 
	UserDAO udao = new UserDAO();
	String userid = request.getParameter("userid");
	
	//중복체크니까 결과가 있으면 안됨 => 중복체크 통과하면 O, 실패하면 X
	if(udao.checkId(userid)){
		out.print("O");
	}
	else{
		out.print("X");
	}

분리 전 join_db.jsp / 분리 후 join_db.jsp

분리 전 login_db.jsp / 분리 후 login_db.jsp

0개의 댓글