RegisterMemberServlet.java
☞ package : member.servlet
☞ type : Servlet - Controller 역할
package member.servlet;
import java.io.IOException;
import java.sql.SQLException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import member.dto.MemberDTO;
import member.exception.DuplicatedIdException;
import member.exception.DuplicatedRegisterNumberException;
import member.model.service.MemberManagerService;
public class RegisterMemberServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1. 요청 파라미터 조회
MemberDTO mto = (MemberDTO)request.getAttribute("mto");
//2. Business Logic 처리 - MemberManagerService.regiseterMember()
MemberManagerService mms = MemberManagerService.getInstance();
String resUrl = null;
try {
mms.registerMember(mto);
//3. 응답 - register_success.jsp, error.jsp
resUrl = "/res/register_success.jsp";
} catch (SQLException e) {
e.printStackTrace();
resUrl = "/res/error.jsp";
} catch (DuplicatedIdException e) {
e.printStackTrace();
resUrl = "/res/error.jsp";
} catch (DuplicatedRegisterNumberException e) {
e.printStackTrace();
resUrl = "/res/error.jsp";
}
RequestDispatcher rdp = request.getRequestDispatcher(resUrl);
rdp.forward(request, response);
}
}
MemberDAO.java
☞ package : member.model.dao
☞ type : class - Data Access Object(Model 역할)
package member.model.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import member.dto.MemberDTO;
import member.model.service.MemberManagerService;
import member.util.DatabaseUtility;
public class MemberDAO {
private static MemberDAO instance = new MemberDAO();
private DatabaseUtility dbUtil;
public static MemberDAO getInstance() {
return instance;
}
private MemberDAO() {
dbUtil = DatabaseUtility.getInstance();
}
public MemberDTO selectMemberById(String id) throws SQLException {
MemberDTO mto = null;
Connection conn =null;
PreparedStatement pstmt =null;
ResultSet rset = null;
String sql = "select id, password, name, register_number1, register_number2, mileage from member where id=?";
try {
conn = dbUtil.getDataSource().getConnection();
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, id);
rset = pstmt.executeQuery();
if(rset.next())
{
mto = new MemberDTO(rset.getString(1), rset.getString(2), rset.getString(3), rset.getString(4), rset.getString(5), rset.getInt(6));
}
} finally {
if(rset !=null) rset.close();
if(pstmt !=null) pstmt.close();
if(conn !=null) pstmt.close();
}
return mto;
}
public MemberDTO selectMemberByRegisterNumber(String registerNumber1, String registerNumber2)
throws SQLException {
MemberDTO mto = null;
Connection conn = null;
PreparedStatement pstmt =null;
ResultSet rset = null;
String sql = "select id, password, name, register_number1, register_number2, mileage from member where register_number1=? and register_number2=?";
try {
conn = dbUtil.getDataSource().getConnection();
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, registerNumber1);
pstmt.setString(2, registerNumber2);
rset = pstmt.executeQuery();
if(rset.next()) {
mto = new MemberDTO(rset.getString(1), rset.getString(2), rset.getString(3), rset.getString(4), rset.getString(5), rset.getInt(6));
}
} finally {
if(rset !=null) rset.close();
if(pstmt !=null) pstmt.close();
if(conn !=null) conn.close();
}
return mto;
}
public void insertMember(MemberDTO mto) throws SQLException {
Connection conn = null;
PreparedStatement pstmt = null;
String sql = "insert into member values(?,?,?,?,?,?)";
try {
conn = dbUtil.getDataSource().getConnection();
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, mto.getId());
pstmt.setString(2, mto.getPassword());
pstmt.setString(3, mto.getName());
pstmt.setString(4, mto.getRegisterNumber1());
pstmt.setString(5, mto.getRegisterNumber2());
pstmt.setInt(6, mto.getMileage());
pstmt.executeUpdate();
} finally {
dbUtil.close(pstmt, conn);
}
}
}
MemberManagerService.java
☞ package : member.model.service
☞ type : class - Business Logic을 처리(Model역할)
package member.model.service;
import java.sql.SQLException;
import java.util.ArrayList;
import member.dto.MemberDTO;
import member.exception.DuplicatedIdException;
import member.exception.DuplicatedRegisterNumberException;
import member.model.dao.MemberDAO;
public class MemberManagerService {
private static MemberManagerService instance = new MemberManagerService();
private MemberDAO dao;
private MemberManagerService() {
dao = MemberDAO.getInstance();
}
public static MemberManagerService getInstance() {
return instance;
}
//가입처리 메소드
public void registerMember(MemberDTO mto) throws SQLException, DuplicatedIdException, DuplicatedRegisterNumberException{
//1. 등록된 id가 있는 지 체그
// - 이미 등록된 ID라면 DuplicatedIdException를 발생 시킨다.
if(dao.selectMemberById(mto.getId())!= null) {
throw new DuplicatedIdException("이미 존재하는 ID입니다.");
}
//2. 주민번호가 등록되어있는지 체크
// - 이미 등록된 주민번호라면 DuplicatedRegisterNuberException을 발생 시킨다.
if(dao.selectMemberByRegisterNumber(mto.getRegisterNumber1(), mto.getRegisterNumber2()) != null) {
throw new DuplicatedRegisterNumberException("이미 존재하는 주민번호입니다.");
}
//3. DB에 회원정보 등록 처리
dao.insertMember(mto);
}
Register_form.jsp
☞ folder : WebContent
☞ 회원가입을 위한 회원가입양식 폼 작성
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="/${initParam.context_root }/forward.jsp" method="post">
ID : <input type="text" name="id" size="20"><br>
Password : <input type="password" name="password" size="20"><br>
이름 : <input type="text" name="name" size="20"><br>
주민번호 : <input type="text" name="registerNumber1" maxlength="6">-
<input type="text" name="registerNumber2" maxlength="7"><br>
<input type="submit" value="가입">
</form>
</body>
</html>
register_success.jsp
☞ folder : WebContent/res
☞ 회원가입폼에 따라 id, password, name, registerNumber를 입력하고 만약 id가 존재하는지 검사를 하여 존재하면 등록할 수 없고 존재하지 않으면 DB에 등록한다.
<%@page import="member.dto.MemberDTO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h2>가입 환영합니다.</h2>
<h3>가입시 입력한 정보입니다.</h3>
ID : ${requestScope.mto.id }<br>
Password : ${requestScope.mto.password }<br>
이름 : ${requestScope.mto.name }<br>
주민번호 : ${requestScope.mto.registerNumber1}-${requestScope.mto.registerNumber2}<br>
마일리지 : ${requestScope.mto.mileage }<br>
<a href='/${initParam.context_root }/login_form.jsp'>로그인</a>
<a href='/${initParam.context_root }/index.jsp'>메인페이지</a>
</body>
</html>
'Wanna be a Programmer > Servlet & JSP' 카테고리의 다른 글
Servlet & JSP day17 - MVC 모델을 응용한 회원정보 관리(로그인) (0) | 2012.05.14 |
---|---|
Servlet & JSP day17 - MVC 모델을 응용한 회원정보 관리 (마일리지범위를 이용한 회원검색) (0) | 2012.05.14 |
Servlet & JSP day16 - DataSource와 Connection Pool (0) | 2012.05.10 |
Servlet & JSP day16 - 싱글톤 디자인 패턴을 적용한 MVC 모델 (0) | 2012.05.10 |
Servlet & JSP day16 - MVC(model, view, controller) 디자인 패턴 (0) | 2012.05.09 |