
Model1을 이용해서 회원가입, 로그인 페이지를 만들어 보았다
이번에는 Model1에서는 사용하지 않았던 Servlet을 이용하여 Controller를 따로 분리한 Model2 방식으로 회원가입 페이지를 만들어보도록 하자!
회원가입 정보를 받을 HTML부터 만들어주었다.
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style>
fieldset {
text-align: center;
display: inline;
}
</style>
</head>
<body>
<form action="join" method="post">
<fieldset>
<legend>회원가입 </legend>
<input type="text" name="id" placeholder="ID를 입력해주세요"><br>
<input type="password" name="pw" placeholder="PW를 입력해주세요"><br>
<input type="text" name="nick" placeholder="NICKNAME을 입력해주세요"><br>
<input type="submit" value="회원가입">
</fieldset>
</form>
</body>
</html>

여기에서 가장 중요한 부분은 form태그의 action값이다!!
Model1에서는 jsp파일로 이동했지만 Model2에서는 컨트롤러, 즉 Servlet으로 이동한다!
그렇기 때문에 action에는 Servlet의 url mapping 값을 넣어주는 것

이 때 파일의 위치도 중요하다.
src/main/java 파일 안에
controller이라는 패키지를 생성하고
Servlet을,
Model이라는 패키지 를 생성하고
DAO와 DTO(VO와 동일)을 생성해주어야한다.
(패키지 명은 자유지만 통상적으로 사용하는 방식을 따라주어야
유지보수/ 코드 공유에 용의할 것이다)
그리고 html/jsp는 scr/main/webapp/WEB-INF에 만들어 주어야
작동한다.
Servlet에 있는 코드를 보기 전에, Servlet에서 데이터에 관한 기능은 DTO, DAO 객체를 호출하여 사용하기 때문에
DTO, DAO의 역할부터 알아보자.
DTO(Data Transfer Object)
- 데이터가 포함된 객체를 한 시스템에서 다른 시스템으로 전달하는 작업을 처리하는 객체이다. DTO는 VO로 바꿔 말할 수 있는데 계층간 데이터 교환을 위한 자바빈즈를 말한다.
DAO(Data Access Object)
- 데이터 접근을 목적하는 객체이다. 커넥션 같은 것을 하나만 두고 여러 사용자가 DAO의 인터페이스를 사용하여 필요한 자료에 접근 하도록 하는 것이 DAO의 개념이다. DB를 사용해 데이터를 조회하거나 조작하는 기능을 전담하도록 만든 오브젝트를 말한다.
DTO, DAO 파일을 보면 이해가 더 잘 된다.
- DTO
package Model;
public class DTO {
// 필드 선언(컬럼 값 저장)
private String id;
private String pw;
private String nickname;
// 생성자
public DTO(String id, String pw, String nickname) {
super();
this.id = id;
this.pw = pw;
this.nickname = nickname;
}
// getter setter
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
// 이하 생략
DB의 테이블 형태와 같이 필드 선언을 해준다.
그리고 생성자, getter setter를 만들어준다.
(모든 필드에 대한 getter setter를 생성해주었지만 코드는 생략하였다.)
-DAO
package Model;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Connection;
public class DAO {
// 전역변수 선언
Connection conn = null;
PreparedStatement psmt = null;
int cnt = 0;
ResultSet rs = null;
// DB 연결 메소드
public void db_conn() {
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);
if (conn != null) {
System.out.println("DB 연결 성공");
} else {
System.out.println("DB 연결 실패");
}
} catch (Exception e) {
e.printStackTrace();
}
}
// DB 연결 해제 메소드
public void db_close() {
try {
if (rs != null) rs.close();
if (psmt != null) psmt.close();
if (conn != null) conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
// 회원가입 메소드
public int join(DTO dto) {
try {
db_conn();
String sql = "insert into member10 values(?, ?, ?)";
psmt = conn.prepareStatement(sql);
psmt.setString(1, dto.getId());
psmt.setString(2, dto.getPw());
psmt.setString(3, dto.getNickname());
cnt = psmt.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
} finally { // 무조건 실행
db_close();
}return cnt;
}
}
DAO에는 DB 연결과 관련된 메소드 들이 있다.
메소드끼리 공유해야할 변수들은 전역변수로 선언한다.
DB연결, 연결 해제는 지금은 로그인 기능밖에 없지만, 나중에 다른 기능을 만들때도 반복해서 사용해야하는 부분이기 때문에 아예 각각 메소드로 만들어서 나중에 또 같은 코드를 반복하지 않도록 한다.
join 메소드는 회원가입 할때 받은 정보를 매개변수로 입력받으면 이것을 DB에 저장시켜준다.
이때 정보를 각각의 String 값으로 받으면 일일이 String 값을 입력해주어야하기 때문에 DTO라는 객체에 담아서 한번에 입력 받고 getter 메소드를 사용해서 값을 가져온다.
메소드가 성공적으로 마무리 되었다면 cnt값을 1로 반환할 것이다.
이제 join이라는 url mapping값을 가지고 있는 Servlet은 어떤 역할을 하는지 알아보자
package controller;
import java.io.IOException;
import java.net.URLEncoder;
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 Model.DAO;
import Model.DTO;
@WebServlet("/join")
public class join extends HttpServlet {
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// Servlet으로 연결이 잘 되었는지 확인하기 위한 출력문
System.out.println("Join Controller");
// 1.post방식 인코딩
request.setCharacterEncoding("UTF-8");
//2. 값 받아오기
String id = request.getParameter("id");
String pw = request.getParameter("pw");
String nick = request.getParameter("nick");
// 받아온 값을 DTO로 묶기
DTO dto = new DTO(id, pw, nick);
int cnt = new DAO().join(dto);
// 실행결과에 따라 회원가입 성공실패 여부 확인
if(cnt>0){
System.out.println("회원가입 성공");
response.sendRedirect("./joinSuccess.jsp?nick="+URLEncoder.encode(nick, "UTF-8"));
}else{
System.out.println("회원가입 실패");
response.sendRedirect("./joinFail.jsp");
}
}
}
HTML에서 입력받은 id, pw, nick값을 하나의 DTO에 담아서 DAO의 join 메소드의 매개변수로 설정하여 불러온다.
회원가입을 성공했다면 joinSucces, 실패했다면 joinFail로 이동한다.
실행화면

'웹 개발 언어 > JSP&Servlet' 카테고리의 다른 글
Cookie & Session 쿠키와 세션-1 (0) | 2022.04.21 |
---|---|
MVC 패턴 Model2를 이용해서 로그인 페이지 만들기 (0) | 2022.04.21 |
MVC 패턴 Model1을 통해 로그인 기능 만들어보자 (0) | 2022.04.18 |
MVC 패턴 Model1을 통해 회원가입 기능 만들어보자 (0) | 2022.04.18 |
eclipse 에 WAS 환경 만들기 (0) | 2022.03.31 |
댓글