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>
'Programming > Servlet & JSP' 카테고리의 다른 글
전화번호 관리 (0) | 2020.02.20 |
---|---|
쿠키 확인, 생성, 삭제 (0) | 2020.02.19 |
footer 만들기, 꼬리 번호 (0) | 2020.02.19 |
학점 계산 (html 입력, jsp 계산, 출력) (0) | 2020.02.19 |
오류페이지 화면 (오류 메세지 가리기) (0) | 2020.02.19 |