본문 바로가기

Programming/Servlet & JSP

멤버 관리 (jsp, servlet, 로그인, 회원 가입, 정보 관리)

join.jsp

<%@ page language="java" contentType="text/html; charset=EUC-KR"
	pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<link rel="stylesheet" type="text/css" href="myCSS.css">
<body>
	<form action="JoinService" method="post">
		<div>
			<fieldset>
				<legend>
					<h1>회원가입 페이지</h1>
				</legend>
				<table>
					<tr>
						<td>아이디</td>
						<td><input placeholder="아이디 입력" type="text" name="id"></td>
					</tr>
					<tr>
						<td>패스워드</td>
						<td><input placeholder="패스워드 입력" type="password" name="pw"></td>
					</tr>
					<tr>
						<td>전화번호</td>
						<td><input placeholder="전화번호 입력" type="text" name="tel"></td>
					</tr>
					<tr>
						<td colspan=2><input type="submit" value="회원가입"><input
							type="reset" value="초기화"></td>
					</tr>
				</table>

			</fieldset>
		</div>
	</form>
</body>
</html>

 

JoinService.java

package com.controller;

import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.model.MemberDAO;
import com.model.MemberDTO;

@WebServlet("/joinService")
public class joinService extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void service(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		String id = request.getParameter("id");
		String pw = request.getParameter("pw");
		String tel = request.getParameter("tel");

		MemberDTO dto = new MemberDTO(id, pw, tel);
		MemberDAO dao = new MemberDAO();
		int cnt = dao.join(dto);

		if (cnt > 0) {
			response.sendRedirect("main.jsp");
		} else {
			response.sendRedirect("");
		}
	}

}

 

login.jsp

<%@ page language="java" contentType="text/html; charset=EUC-KR"
	pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
<link rel="stylesheet" type="text/css" href="myCSS.css">
</head>
<body>
	<form action="oginService" method="post">
		<div>
			<fieldset>
				<legend>
					<h1>로그인 페이지</h1>
				</legend>
				<table>
					<tr>
						<td>아이디</td>
						<td><input placeholder="아이디 입력" type="text" name="id"></td>
					</tr>
					<tr>
						<td>비밀번호</td>
						<td><input placeholder="비밀번호 입력" type="password" name="pw"></td>
					</tr>
					<tr>
						<td colspan="2">
						<input type="submit" value="로그인">
						<input type="reset" value="초기화">
						</td>
					</tr>
				</table>
			</fieldset>
		</div>
	</form>
</body>
</html>

 

LoginService.java

package com.controller;

import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.model.MemberDAO;
import com.model.MemberDTO;

@WebServlet("/loginService")
public class loginService extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void service(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		String id = request.getParameter("id");
		String pw = request.getParameter("pw");

		MemberDAO dao = new MemberDAO();
		MemberDTO dto = new MemberDTO(id, pw);
		MemberDTO info = dao.login(dto);

		if (info != null) {
			Cookie cookie1 = new Cookie("id", info.getId());
			Cookie cookie2 = new Cookie("pw", info.getPw());
			Cookie cookie3 = new Cookie("tel", info.getTel());

			response.addCookie(cookie1);
			response.addCookie(cookie2);
			response.addCookie(cookie3);

			response.sendRedirect("loginSuccess.jsp");

		} else {
			response.sendRedirect("login.jsp");
		}
	}

}

 

loginSuccess.jsp

<%@ page language="java" contentType="text/html; charset=EUC-KR"
	pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
	<%
		Cookie[] cookies = request.getCookies(); // 쿠키 여러 개를 배열 형태로 받아온다.
		for (int i = 0; i < cookies.length; i++) {
			if (!cookies[i].getName().equals("JSESSIONID")) {
				out.print(cookies[i].getName() + " : ");
				out.print(cookies[i].getValue() + "<br>");
			}
		}
	%>
</body>
</html>

 

main.jsp

<%@ page language="java" contentType="text/html; charset=EUC-KR"
	pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
<link rel="stylesheet" type="text/css" href="myCSS.css">
</head>
<body>
	<div>
		<fieldset>
			<legend>
				<h1>메인 페이지</h1>
			</legend>
			<a href="login.jsp"><button>로그인</button></a>
			<a href="join.jsp"><button>회원가입</button></a>
		</fieldset>
	</div>
</body>
</html>

 

MemberDAO.java

package com.model;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class MemberDAO {

	private ResultSet rs; // 필드는 기본적으로 객체를 생성하면 NULL값이 들어간다.
	private PreparedStatement psmt;
	private Connection conn;

	private void getConnection() {
		try {
			Class.forName("oracle.jdbc.driver.OracleDriver");

			String db_url = "jdbc:oracle:thin:@localhost:1521:xe";
			String db_id = "hr";
			String db_pw = "hr";

			conn = DriverManager.getConnection(db_url, db_id, db_pw);
		} catch (ClassNotFoundException e) { // 찾을 수 없는 DB 값의 예외 처리
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

	private void close() {
		try {
			if (rs != null)
				rs.close();
			if (psmt != null)
				psmt.close();
			if (conn != null)
				conn.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

	public int join(MemberDTO dto) {

		int cnt = 0;

		try {
			getConnection();

			String sql = "insert into mymember values(?, ?, ?)";
			psmt = conn.prepareStatement(sql);
			psmt.setString(1, dto.getId());
			psmt.setString(2, dto.getPw());
			psmt.setString(3, dto.getTel());
			cnt = psmt.executeUpdate();
		} catch (SQLException e) { // 모든 DB관련 SQL문의 오류를 처리
			e.printStackTrace();
		} finally {
			close();
		}

		return cnt;
	}

	public MemberDTO login(MemberDTO dto) {

		MemberDTO info = null;

		String l_id = null;
		String l_pw = null;
		String l_tel = null;

		try {
			getConnection();

			String sql = "select * from mymember where id = ? and pw = ?";
			psmt = conn.prepareStatement(sql);
			psmt.setString(1, dto.getId());
			psmt.setString(2, dto.getPw());
			rs = psmt.executeQuery();

			if (rs.next()) {
				l_id = rs.getString(1);
				l_pw = rs.getString(2);
				l_tel = rs.getString(3);

				info = new MemberDTO(l_id, l_pw, l_tel);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			close();
		}

		return info;
	}

}

 

MemberDTO.java

package com.model;

public class MemberDTO {
	private String id;
	private String pw;
	private String tel;

	public MemberDTO(String id, String pw, String tel) {
		this.id = id;
		this.pw = pw;
		this.tel = tel;
	}

	public MemberDTO(String id, String pw) {
		this.id = id;
		this.pw = pw;
	}

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getPw() {
		return pw;
	}

	public void setPw(String pw) {
		this.pw = pw;
	}

	public String getTel() {
		return tel;
	}

	public void setTel(String tel) {
		this.tel = tel;
	}

}

 

myCSS.css

@charset "EUC-KR";

div {
	width: 70%;
	background-color: yellow;
	margin: 0px auto;
	text-align: center;
}

button {
	width: 300px;
	height: 300px;
	font-size: 30px;
}

button:hover {
	background-color: black;
	color: red;
}

table {
	margin: 0px auto;
	text-align: center;
}

 

mySQL.sql

drop table mymember;

create table mymember(
	id varchar2(100),
	pw varchar2(100),
	tel varchar2(100)
)

insert into mymember values('admin', '1234', '010-1111-2222');

select * from mymember;

 

servlet으로 대체(joinService.jsp)

<%@page import="java.sql.PreparedStatement"%>
<%@page import="java.sql.Connection"%>
<%@page import="java.sql.DriverManager"%>
<%@ page language="java" contentType="text/html; charset=EUC-KR"
	pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
	<%
		// Servic는 Java code만 작성되므로 View를 구현하는 jsp보다 Servlet으로 작성하여 model1에서 model2로 변경 작업
		String id = request.getParameter("id");
		String pw = request.getParameter("pw");
		String tel = request.getParameter("tel");

		// 0. lib 폴더 안에 ojdbc6.jar 파일 넣기
		// C:\oraclexe\app\oracle\product\11.2.0\server\jdbc\lib에서 WebContent\WEB-INF\lib으로 ojdc6.jar파일 이동

		// 1. 어떠한 Driver를 사용할 것인지 동적 로딩
		// 2. 해당 DBMS에 관련된 Driver 클래스 파일을 작성한다.
		Class.forName("oracle.jdbc.driver.OracleDriver"); // 오라클 드라이버의 경로 작성 : 오라클 드라이버를 사용하겠다는 선언
		// OracleDriver라는 클래스 파일 실행(대문자로 시작, 패키지는 폴더이므로 소문자로 시작)
		// jsp는 기본적으로 예외처리가 되어있어 따로 작성하지 않아도 됨

		// 3. Java Program과 DataBase를 연결하는 Connection 객체 생성
		String db_url = "jdbc:oracle:thin:@localhost:1521:xe";
		// 하단 Data Source Explorer New Oracle 더블클릭 실행 > 우클릭 Properties > DriverProperties > Connection URL 복사
		String db_id = "hr";
		String db_pw = "hr";

		Connection conn = DriverManager.getConnection(db_url, db_id, db_pw); // Connection 자동완성(Connection.sql), DriverManager 자동완성(import)

		// 4. SQL문을 작성하고 실행할 수 있는 PreparedStatement
		// PreparedStatement 객체를 Connection 객체로부터 받아온다.
		String sql = "insert into mymember values(?, ?, ?)"; // mymember 테이블로 값을 포함하는 행을 추가하는 sql문
		PreparedStatement psmt = conn.prepareStatement(sql); // conn의 prepareStatement메소드로 sql문을 받아준다.
		psmt.setString(1, id); // String id의 값을 1번 째 물을표로 대입
		psmt.setString(2, pw); // String pw의 값을 2번 째 물음표로 대입
		psmt.setString(3, tel); // String tel의 값을 3번 째 물음표로 대입
		int cnt = psmt.executeUpdate(); // psmt의 executeUpdate 메소드는 sql문장을 실행한 횟수만큼 int값을 반환

		// 5. 연결 종료 (역순)
		if (psmt != null) // 객체가 Null인 상태에서 건드리면 NullPointException 에러 발생
			psmt.close();
		if (conn != null)
			conn.close();

		if (cnt > 0) {
			response.sendRedirect("main.jsp"); // 정상적으로 sql문이 실행되었다면 main으로 페이지 이동
		} else {
			response.sendRedirect("join.jsp"); // 정상적으로 sql문이 실행되지 않았다면 join페이지로 다시 이동
		}
	%>
</body>
</html>

 

servlet으로 대체(loginService.jsp)

<%@page import="java.sql.ResultSet"%>
<%@page import="java.sql.PreparedStatement"%>
<%@page import="java.sql.Connection"%>
<%@page import="java.sql.DriverManager"%>
<%@ page language="java" contentType="text/html; charset=EUC-KR"
	pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
	<%
		String id = request.getParameter("id");
		String pw = request.getParameter("pw");

		// 1. 어떠한 Driver를 사용할 것인지 동적 로딩
		// 2. 해당 DBMS에 관련된 Driver 클래스 파일을 작성한다.
		Class.forName("oracle.jdbc.driver.OracleDriver"); // 오라클 드라이버의 경로 작성 : 오라클 드라이버를 사용하겠다는 선언
		// OracleDriver라는 클래스 파일 실행(대문자로 시작, 패키지는 폴더이므로 소문자로 시작)
		// jsp는 기본적으로 예외처리가 되어있어 따로 작성하지 않아도 됨

		// 3. Java Program과 DataBase를 연결하는 Connection 객체 생성
		String db_url = "jdbc:oracle:thin:@localhost:1521:xe";
		// 하단 Data Source Explorer New Oracle 더블클릭 실행 > 우클릭 Properties > DriverProperties > Connection URL 복사
		String db_id = "hr";
		String db_pw = "hr";

		Connection conn = DriverManager.getConnection(db_url, db_id, db_pw); // Connection 자동완성(Connection.sql), DriverManager 자동완성(import)

		String sql = "select * from mymember where id = ? and pw = ?";
		PreparedStatement psmt = conn.prepareStatement(sql);
		psmt.setString(1, id);
		psmt.setString(2, pw);
		ResultSet rs = psmt.executeQuery(); // 표 형태로 데이터와 커서를 가지고 있는 ResultSet 객체

		String l_id = null;
		String l_pw = null;
		String l_tel = null;

		if (rs.next()) {
			// 커서를 한 칸 다음으로 내릴 수 있다는 것은 로그인을 성공했다.
			//String l_id = rs.getString("id");  // DB로 가져오고 싶은 컬럼이름
			l_id = rs.getString(1); // 또는 1번 째 컬럼
			l_pw = rs.getString(2); // 2번 째 컬럼
			l_tel = rs.getString(3); // 3번 째 컬럼
			// 로그인이 성공하면 l_id, l_pw, l_tel 값은 null이 아니게 됨
		}

		if (rs != null)
			rs.close();
		if (psmt != null)
			psmt.close();
		if (conn != null)
			conn.close();

		if (l_id != null) {
			response.sendRedirect("loginSuccess.jsp?id=" + l_id);
		} else {
			response.sendRedirect("login.jsp");
		}
	%>
</body>
</html>