Main.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>메인페이지</h1>
<a href = "ex01Join.jsp">회원가입</a>
<br>
<a href = "ex01Login.jsp">로그인</a>
</body>
</html>
Join.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="JoinService" method = "post" >
ID : <input type="text" name = "id"><br>
PW : <input type="password" name = "pw"><br>
NAME : <input type="text" name = "name"><br>
AGE : <input type="text" name = "age"><br>s
<input type="submit" value = "회원가입">
</form>
</body>
</html>
JoinService.java
package com.smhrd.controller;
import java.io.IOException;
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.smhrd.model.DAO;
import com.smhrd.model.IotMemberVO;
@WebServlet("/JoinService")
public class JoinService extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//ex01JoinService.jsp와 같은 역할을 하는 컨트롤러
//1.한글 인코딩 진행하기
request.setCharacterEncoding("UTF-8");
//2. 데이터 가져오기
String id = request.getParameter("id");
String pw = request.getParameter("pw");
String name = request.getParameter("name");
int age = Integer.parseInt(request.getParameter("age"));
//3. 데이터를 하나로 묶기
IotMemberVO vo = new IotMemberVO(id, pw, name, age);
//4. DB연결과 관련된 도구 DAO 생성하기
DAO dao = new DAO();
//5. 데이터 추가하는 메소드 사용하기
int row = dao.join(vo);
//6. 성공실패 여부를 판단해서 흐르므 제어하기
if(row > 0) {
//성공
response.sendRedirect("ex01Login.jsp");
}else {
response.sendRedirect("ex01Join.jsp");
//실패
}
}
}
Login.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action = "LoginService" method = "post">
ID : <input type="text" name = "id"><br>
PW : <input type="password" name = "pw"><br>
<input type="submit" value = "로그인">
</form>
</body>
</html>
LoginService.java
package com.smhrd.controller;
import java.io.IOException;
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 javax.servlet.http.HttpSession;
import com.smhrd.model.DAO;
import com.smhrd.model.IotMemberVO;
@WebServlet("/LoginService")
public class LoginService extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 1) 사용자가 입력한 데이터 꺼내오기
request.setCharacterEncoding("UTF-8");
String id = request.getParameter("id");
String pw = request.getParameter("pw");
// //2)입력한 데이터를 하나의 자료형으로 묶기
// IotMemberVO vo = new IotMemberVO(id,pw);
//
// //3)DB에 접근 --> DAO 생성
// DAO dao = new DAO();
//
// //4) 입력한 데이터가 테이블 내에 존재하는지 비교
// IotMemberVO result = dao.login(vo);
//4) 입력한 데이터가 테이블 내에 존재하는지 비교
IotMemberVO result = new DAO().login(new IotMemberVO(id,pw));
//5) 흐름 제어하기
if(result != null){
//성공
//jsp : session 내장겍체이기 때문에 별도로 생성할 필요가 없다.
//servlet : session 내장객체가 아니다. 생성하는 작업이 필요하다.
//1) session은 client가 용청하면 server에서 session id를 만들어서
//client로 되돌려준다!!!
//2) session을 꺼내올 때 client(웹브라우저)가 있는
//session id 값이 필요하다.
//3) 웹 브라우저 요청에 대한 정보가 담긴 request로부터 session을 꺼내와야 한다.
HttpSession session = request.getSession();
session.setAttribute("info", result);
response.sendRedirect("ex01LoginSuccess.jsp");
}else{
response.sendRedirect("ex01LoginFail.jsp");
}
}
}
LoginSuccess.jsp
<%@page import="com.smhrd.model.IotMemberVO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
//닉네임을 꺼내오기
//1) 세션에 있는 데이터 가져오기
IotMemberVO result = (IotMemberVO)session.getAttribute("info");
String name = result.getName();
%>
<h1>로그인 성공!</h1>
<b><%=name %>님 환영합니다!</b>
<a href = "ex01Main.jsp"><button>Main page로 돌아가기</button></a>
</body>
</html>
LoginFail.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>로그인 실패!</h1>
<a href = "ex01Main.jsp"><button>메인 페이지로 돌아가기</button></a>
<a href = "ex01Login.jsp"><button>로그인 페이지로 돌아가기</button></a>
</body>
</html>
DAO
package com.smhrd.model;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class DAO {
// JDBC 코드 가지고 있는 자료형
private Connection conn = null;
private PreparedStatement psmt = null;
private ResultSet rs = null;
String nickname = null;
// 1. DB 연결을 위한 메소드
private void getConn() {
// 1) 드라이버 동적 로딩
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
// 2) DB 연결
String url = "jdbc:oracle:thin:@localhost:1521:xe";
String user = "hr";
String password = "hr";
conn = DriverManager.getConnection(url, user, password);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
// 2) DB 자원반납 메소드
private void getClose() {
try {
if(rs!=null)
rs.close();
if(psmt!=null)
psmt.close();
if(conn!=null)
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
// 3. 회원정보를 데이터베이스에 저장할 수 있는 메소드 생성
/**
* IotMemberVO 자료형을 매개변수로 받아서
* 테이블에 데이터를 추가해주는 메소드다.
* @author 희원
* @since 2022.05.12
* @return int(영향을 받은 행의 개수)
* @param IotMemberVO(사용자 한명에 대한 정보)
* * */
public int join(IotMemberVO vo) {
int row = 0;
try {
getConn();
String sql = "insert into iotmember values(?,?,?,?)";
psmt = conn.prepareStatement(sql);
psmt.setString(1, vo.getId());
psmt.setString(2, vo.getPw());
psmt.setInt(3, vo.getAge());
psmt.setString(4, vo.getName());
// 실행 후 되돌아 온 정수형 데이터가 의미하는 건
//데이터 베이스 내부에서 영향을 받은 행의 개수.
row = psmt.executeUpdate();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
getClose();
}
return row;
}
//public boolean login(IotMemberVO vo) {
//9
public IotMemberVO login(IotMemberVO vo) {
//6
//boolean check = false;
//8
IotMemberVO result = null;
try {
// 1
getConn();
// 2
String sql = "select * from iotmember where id = ? and pw = ?";
// 3
psmt = conn.prepareStatement(sql);
psmt.setString(1, vo.getId());
psmt.setString(2, vo.getPw());
// 4
rs = psmt.executeQuery();
// 5
//데이터가 있으면 true, 없으면 false
//check = rs.next();
// 7
if(rs.next()) {
// rs에서는 데이터를 꺼낼 때
// 커서가 가리키고 있는 데이터만 가져올 수 있다.
String id = rs.getString("id");
String pw = rs.getString("pw");
String name = rs.getString("nickname");
int age = rs.getInt("age");
result = new IotMemberVO(id, pw, name, age);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
getClose();
}
//return check;
//10
return result;
}
}
iotmember
package com.smhrd.model;
public class IotMemberVO {
//한명에 대한 정보를 저장할 수 있는 자료형
private String id;
private String pw;
private String name;
private int age;
//모든 데이터 초기화 시키는 생성자 만들기
public IotMemberVO(String id, String pw, String name, int age) {
this.id = id;
this.pw = pw;
this.name = name;
this.age = age;
}
//생성자 오버로딩
public IotMemberVO(String id, String pw) {
super();
this.id = id;
this.pw = pw;
}
//getter 메소드 만들기
public String getId() {
return id;
}
public String getPw() {
return pw;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}