[MVC/DB연동] 회원가입 페이지 (아이디 중복체크, 유효성검사, 우편번호 검색 기능) (1)
코드를 작성하기에 앞서 DB 연결 설정을 먼저 해주도록 하자.
DB 연결 설정
1. cmd 에서 SQL 계정을 추가한다. DB연결시 데이터를 처리할 새로운 계정을 행성하는데 , mvc(ID)/1234(PW)로 새로운 계정을 생성했다.
2. Oracle SQL developer에서 mvc 계쩡에 접속해서 member 테이블을 생성한다. num 을 pk로 하고, 시퀀스를 생성해주었다.
3. 이클립스에서 JDBC연동을 위해 라이브러리 폴더(WEB-INF/lib)에 jar파일 추가한다.
[참고] JSTL파일 추가 방법
2020/06/10 - [KITRI/JSP] - JSP 프로그래밍 - JSTL(JSP Standard Tag Library) 다운로드 / c:set, c:remove
JSP 프로그래밍 - JSTL(JSP Standard Tag Library) 다운로드 / c:set, c:remove
JSP는 컴파일하면서 서블릿으로 바뀐다. 즉, 서블릿파일을 좀 더 편하게 사용할 수 있게 하는게 JSP JSTL다운로드 http://archive.apache.org/dist/jakarta/taglibs/standard/binaries/ Index of /dist/jakarta/ta..
hyonee.tistory.com
4. 코드작성
ConnectionProvider.java
package com.java.database;
import java.sql.Connection;
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.SQLException;
public class ConnectionProvider {
public static Connection getConnection() {
Connection conn = null;
try {
String url = "jdbc:oracle:thin:@localhost:1521:xe";
String id = "mvc";
String pass = "1234";
conn = DriverManager.getConnection(url, id, pass);
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
}
DBCPInit.java
package com.java.database;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
public class DBCPInit extends HttpServlet{
@Override
public void init(ServletConfig config) throws ServletException {
try {
String jdbcDriver = config.getInitParameter("jdbcDriver");
Class.forName(jdbcDriver);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
}
jdbcUtil.java
package com.java.database;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
public class jdbcUtil {
public static void close(Connection conn) {
if(conn!=null) {
try {
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
public static void close(PreparedStatement pstmt) {
if(pstmt!=null) {
try {
pstmt.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
public static void close(ResultSet rs) {
if(rs!=null) {
try {
rs.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0">
<display-name>MVCHomePage</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>FrontController</servlet-name>
<servlet-class>com.java.controller.FrontController</servlet-class>
<init-param>
<param-name>configFile</param-name>
<param-value>\WEB-INF\commandURL.properties</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>FrontController</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<!-- DB -->
<servlet>
<servlet-name>DBCPrint</servlet-name>
<servlet-class>com.java.database.DBCPInit</servlet-class>
<init-param>
<param-name>jdbcDriver</param-name>
<param-value>oracle.jdbc.driver.OracleDriver</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
</web-app>
MemberDao.java
package com.java.member.model;
import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Timestamp;
import java.util.ArrayList;
import com.java.database.ConnectionProvider;
import com.java.database.jdbcUtil;
public class MemberDao { //Data Access Object
//singleton pattern : 단 한개의 객체만을 가지고 구현(설계)한다.
private static MemberDao instance = new MemberDao();
public static MemberDao getInstance() {
return instance;
}
public int insert(MemberDto memberDto) {
Connection conn = null;
PreparedStatement pstmt = null;
int value = 0;
try {
String sql = "insert into member values(member_num_seq.nextval,?,?,?,?,?,?,?,?,?,?,?,?,sysdate)";
conn = ConnectionProvider.getConnection();
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, memberDto.getId());
pstmt.setString(2, memberDto.getPassword());
pstmt.setString(3, memberDto.getName());
pstmt.setString(4, memberDto.getJumin1());
pstmt.setString(5, memberDto.getJumin2());
pstmt.setString(6, memberDto.getEmail());
pstmt.setString(7, memberDto.getZipcode());
pstmt.setString(8, memberDto.getAddress());
pstmt.setString(9, memberDto.getJob());
pstmt.setString(10, memberDto.getMailing());
pstmt.setString(11, memberDto.getInterest());
pstmt.setString(12, memberDto.getMemberLevel());
value = pstmt.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
} finally {
jdbcUtil.close(pstmt);
jdbcUtil.close(conn);
}
return value;
}
public int idCheck(String id) {
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
int value = 0;
try {
String sql = "select id from member where id = ?";
conn = ConnectionProvider.getConnection();
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, id);
rs = pstmt.executeQuery();
if(rs.next()) value = 1;
}catch (Exception e) {
e.printStackTrace();
}finally {
jdbcUtil.close(rs);
jdbcUtil.close(pstmt);
jdbcUtil.close(conn);
}
return value;
}
public ArrayList<ZipcodeDto> zipcodeReader(String checkDong){
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
ArrayList<ZipcodeDto> zipcodeList = null;
try {
String sql = "select * from zipcode where dong = ?";
conn = ConnectionProvider.getConnection();
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, checkDong);
rs = pstmt.executeQuery();
zipcodeList = new ArrayList<ZipcodeDto>();
while(rs.next()) {
ZipcodeDto address = new ZipcodeDto();
zipcodeList.add(address);
address.setZipcode(rs.getString("zipcode"));
address.setSido(rs.getString("sido"));
address.setGugun(rs.getString("gugun"));
address.setDong(rs.getString("dong"));
address.setRi(rs.getString("ri"));
address.setBunji(rs.getString("bunji"));
zipcodeList.add(address);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
jdbcUtil.close(rs);
jdbcUtil.close(pstmt);
jdbcUtil.close(conn);
}
return zipcodeList;
}
public String loginCheck(String id, String password) {
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
String value = null;
try {
String sql = "select member_level from member where id=? and password=?";
conn = ConnectionProvider.getConnection();
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, id);
pstmt.setString(2, password);
rs = pstmt.executeQuery();
if(rs.next()) {
value = rs.getString("member_level");
}
}catch (Exception e) {
e.printStackTrace();
}finally {
jdbcUtil.close(rs);
jdbcUtil.close(conn);
jdbcUtil.close(pstmt);
}
return value;
}
public MemberDto updateId(String id) {
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
MemberDto memberDto = null;
try {
String sql = "select * from member where id = ?";
conn = ConnectionProvider.getConnection();
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, id);
rs = pstmt.executeQuery();
if(rs.next()) {
memberDto = new MemberDto();
memberDto.setNum(rs.getInt("num"));
memberDto.setId(rs.getString("id"));
memberDto.setPassword(rs.getString("password"));
memberDto.setName(rs.getString("name"));
memberDto.setJumin1(rs.getString("jumin1"));
memberDto.setJumin2(rs.getString("jumin2"));
memberDto.setEmail(rs.getString("email"));
memberDto.setZipcode(rs.getString("zipcode"));
memberDto.setAddress(rs.getString("address"));
memberDto.setJob(rs.getString("job"));
memberDto.setMailing(rs.getString("mailing"));
memberDto.setInterest(rs.getString("resultInterest"));
memberDto.setMemberLevel(rs.getString("member_level"));;
/* Timestamp ts = rs.getTimestamp("register_date");
long time = ts.getTime();
Date date = new Date(time);
memberDto.setRegisterDate(date);*/
memberDto.setRegisterDate(new Date(rs.getTimestamp("register_date").getTime()));
}
} catch (Exception e) {
e.printStackTrace();
} finally {
jdbcUtil.close(rs);
jdbcUtil.close(conn);
jdbcUtil.close(pstmt);
}
return memberDto;
}
public int update(MemberDto memberDto) {
Connection conn = null;
PreparedStatement pstmt = null;
int value = 0;
try {
String sql = "update member set password=?, email=?, zipcode=?, address=?, job=?, mailing=?, interest=? where num=?";
conn = ConnectionProvider.getConnection();
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, memberDto.getPassword());
pstmt.setString(2, memberDto.getEmail());
pstmt.setString(3, memberDto.getZipcode());
pstmt.setString(4, memberDto.getAddress());
pstmt.setString(5, memberDto.getJob());
pstmt.setString(6, memberDto.getMailing());
pstmt.setString(7, memberDto.getInterest());
pstmt.setInt(8, memberDto.getNum());
value = pstmt.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
} finally {
jdbcUtil.close(pstmt);
jdbcUtil.close(conn);
}
return value;
}
public int delete(String id, String password) {
Connection conn = null;
PreparedStatement pstmt = null;
int value = 0;
try {
String sql = "delete from member where id=? and password=?";
conn = ConnectionProvider.getConnection();
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, id);
pstmt.setString(2, password);
value = pstmt.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
} finally {
jdbcUtil.close(pstmt);
jdbcUtil.close(conn);
}
return value;
}
}
MemberDto.java
package com.java.member.model;
import java.sql.Date;
public class MemberDto {
private String id;
private String password;
private String name;
private String jumin1;
private String jumin2;
private String email;
private String zipcode;
private String address;
private String job;
private String mailing;
private String interest;
private Date registerDate; //가입날짜: Date, sysdate
private int num; //시퀀스번호: .nextval
private String memberLevel;//회원등급: 회원등급:3개(BA,AA,VIP)
public MemberDto() {
super();
}
public MemberDto(String id, String password, String name, String jumin1, String jumin2, String email,
String zipcode, String address, String job, String mailing, String interest, Date registerDate, int num,
String memberLevel) {
super();
this.id = id;
this.password = password;
this.name = name;
this.jumin1 = jumin1;
this.jumin2 = jumin2;
this.email = email;
this.zipcode = zipcode;
this.address = address;
this.job = job;
this.mailing = mailing;
this.interest = interest;
this.registerDate = registerDate;
this.num = num;
this.memberLevel = memberLevel;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getJumin1() {
return jumin1;
}
public void setJumin1(String jumin1) {
this.jumin1 = jumin1;
}
public String getJumin2() {
return jumin2;
}
public void setJumin2(String jumin2) {
this.jumin2 = jumin2;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getZipcode() {
return zipcode;
}
public void setZipcode(String zipcode) {
this.zipcode = zipcode;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getJob() {
return job;
}
public void setJob(String job) {
this.job = job;
}
public String getMailing() {
return mailing;
}
public void setMailing(String mailing) {
this.mailing = mailing;
}
public String getInterest() {
return interest;
}
public void setInterest(String interest) {
this.interest = interest;
}
public Date getRegisterDate() {
return registerDate;
}
public void setRegisterDate(Date registerDate) {
this.registerDate = registerDate;
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public String getMemberLevel() {
return memberLevel;
}
public void setMemberLevel(String memberLevel) {
this.memberLevel = memberLevel;
}
@Override
public String toString() {
return "MemberDto [id=" + id + ", password=" + password + ", name=" + name + ", jumin1=" + jumin1 + ", jumin2="
+ jumin2 + ", email=" + email + ", zipcode=" + zipcode + ", address=" + address + ", job=" + job
+ ", mailing=" + mailing + ", interest=" + interest + ", registerDate=" + registerDate + ", num=" + num
+ ", memberLevel=" + memberLevel + "]";
}
}
메인 페이지
index.jsp
index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri = "http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<c:set var = "root" value = "${pageContext.request.contextPath}"/>
<c:if test="${memberLevel==null}">
<a href="${root}/member/register.do">회원가입</a>
<a href="${root}/member/login.do">로그인</a>
</c:if>
<c:if test="${memberLevel!=null}">
<a href="${root}/member/delete.do">회원탈퇴</a>
<a href="${root}/member/update.do">회원수정</a>
<a href="${root}/member/logout.do">로그아웃</a>
<c:if test="${memberLevel=='MA'}">
<h3>관리자 페이지</h3>
<a href="">회원관리</a>
</c:if>
</c:if>
</body>
</html>
joinStyle.css
@charset "UTF-8";
#joinform {
width: 700px;
height: 100px;
margin: 100px auto;
}
#joinform .menu {
border: solid 3px black;
width: 700px;
height: 30px;
display: block;
line-height: 20px;
text-indent: 5px;
}
#id {
border-right: solid 3px black;
width: 120px;
height: 30px;
float: left;
line-height: 30px;
}
input[type="text"], input[type="email"], input[type="password"], input[type="button"]{
margin-top: 5px;
}
.checkInfo:focus{
background-color:yellow;
}
commandURL.properties
# member
/member/register.do=com.java.member.command.RegisterCommand
/member/registerOk.do=com.java.member.command.RegisterOkCommand
/member/idCheck.do=com.java.member.command.IdCheckCommand
/member/zipcode.do=com.java.member.command.ZipcodeCommand
/member/login.do=com.java.member.command.LoginCommand
/member/loginOk.do=com.java.member.command.LoginCommandOk
/member/logout.do=com.java.member.command.LoginOutCommand
/member/main.do=com.java.member.command.mainCommand
/member/update.do=com.java.member.command.UpdateCommand
/member/updateOk.do=com.java.member.command.UpdateOkCommand
/member/delete.do=com.java.member.command.DeleteCommand
/member/deleteOk.do=com.java.member.command.DeleteOkCommand
최종 프로퍼티 파일이다. (기능이 추가되어 필요할때마다 작성한다.)
Command.java
package com.java.command;
import java.util.logging.Logger;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public interface Command {
public Logger logger = Logger.getLogger(Command.class.getName());
public String logMsg = "logMsg~~~~~~~";
public String proRequest(HttpServletRequest request, HttpServletResponse response) throws Exception;
}
FrontController.java
package com.java.controller;
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Properties;
import java.util.logging.Logger;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.java.command.Command;
/**
* Servlet implementation class FrontController
*/
public class FrontController extends HttpServlet {
private static final long serialVersionUID = 1L;
public static final Logger logger = Logger.getLogger(FrontController.class.getName());
public static final String logMsg = "logMsg~~~~~~~";
private HashMap<String, Object> commandMap = new HashMap<String, Object>();
/**
* @see HttpServlet#HttpServlet()
*/
public FrontController() {
super();
// TODO Auto-generated constructor stub
}
@Override
public void init(ServletConfig config) throws ServletException {
// TODO Auto-generated method stub
String configFile = config.getInitParameter("configFile");
String path = config.getServletContext().getRealPath(configFile);
logger.info(logMsg + path);
FileInputStream fis = null;
BufferedInputStream bis = null;
Properties pro = new Properties();
try {
fis = new FileInputStream(path);
bis = new BufferedInputStream(fis, 1024);
pro.load(bis);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if(fis!=null) fis.close();
if(bis!=null) bis.close();
} catch (Exception e2) {
e2.printStackTrace();
}
}
Iterator<Object> keyIter = pro.keySet().iterator();
while(keyIter.hasNext()) {
String command = (String)keyIter.next();
String className = pro.getProperty(command);
logger.info(command + "\t" + className);
try {
Class<?> handlerClass = Class.forName(className);
Object handlerInstance = handlerClass.getDeclaredConstructor().newInstance();
commandMap.put(command, handlerInstance);
} catch (Exception e) {
e.printStackTrace();
}
}
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String cmd = request.getServletPath();
logger.info(cmd);
String viewPage = null;
try {
Command com = (Command) commandMap.get(cmd);
viewPage = com.proRequest(request, response);
} catch (Exception e) {
e.printStackTrace();
}
if(viewPage!=null) {
RequestDispatcher rd = request.getRequestDispatcher(viewPage);
rd.forward(request, response);
}
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
회원가입 페이지
register.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<c:set var="root" value="${pageContext.request.contextPath}" />
<html>
<head>
<meta charset="UTF-8">
<title>회원가입page</title>
<link rel="stylesheet" href="${root}/css/member/joinStyle.css?ver=1">
<script type="text/javascript" src="${root}/javascript/member/register.js"></script>
</head>
<body>
<jsp:include page="../../../index.jsp"/>
<br /><br />
<form id="joinform" name="joinform" action="${root}/member/registerOk.do" method="post"
onsubmit="return createFrom(this)">
<h4 style="text-align: center;">회원가입(*필수입력사항입니다.)</h4>
<div class="menu" style="border-bottom-width: 0px;">
<div id="id">아이디</div>
<span>*
<input type="text" class="checkInfo" name="id" size="12" />
<button type="button" onclick="idCheck(joinform, '${root}')">아이디 중복</button>
</span>
</div>
<div class="menu " style="border-bottom-width: 0px;">
<div id="id">비밀번호</div>
<span>* <input type="password" class="checkInfo" name="password" size="12" />
</span>
</div>
<div class="menu " style="border-bottom-width: 0px;">
<div id="id">비밀번호확인</div>
<span>* <input type="password" class="checkInfo" name="passwordCheck" size="12" />
</span>
</div>
<div class="menu " style="border-bottom-width: 0px;">
<div id="id">이름</div>
<span>* <input type="text" class="checkInfo" name="name" size="12" />
</span>
</div>
<div class="menu " style="border-bottom-width: 0px;">
<div id="id">주민번호</div>
<span>*
<input type="text" class="checkInfo" name="jumin1" size="6" />
<span>-</span>
<input type="text" class="checkInfo" name="jumin2" size="7" />
</span>
</div>
<div class="menu" style="border-bottom-width: 0px;">
<div id="id" style="margin-left: 10px,">이메일</div>
<span>
<input type="email" name="email" size="25" />
</span>
</div>
<div class="menu" style="border-bottom-width: 0px;">
<div id="id">우편번호</div>
<span>
<input type="text" name="zipcode" size="30" />
<button type="button" onclick="searchZipcode('${root}')">우편번호검색</button>
</span>
</div>
<div class="menu" style="border-bottom-width: 0px;">
<div id="id">주소</div>
<span> <input type="text" name="address" size="50" />
</span>
</div>
<div class="menu" style="border-bottom-width: 0px;">
<div id="id">직업</div>
<span>
<select name="job">
<option>직업을 선택하세요.</option>
<option value=' '>무직</option>
<option value='programmer'>프로그래머</option>
<option value='designer'>디자이너</option>
</select>
</span>
</div>
<div class="menu" style="border-bottom-width: 0px;">
<div id="id">메일수신</div>
<span> <input type="radio" id="yes" name="mailing" value="yes" />
<label for="yes">yes</label> <input type="radio" id="no"
name="mailing" value="no" /> <label for="no">no</label>
</span>
</div>
<div class="menu" style="border-bottom-width: 0px;">
<div id="id">관심분야</div>
<span>
<input type="checkbox" size="12" name="interest" value="경제"/>
<label for="경제" >경제</label>
<input type="checkbox" size="12" name="interest" value="IT"/>
<label for="IT" >IT</label>
<input type="checkbox" size="12" name="interest" value="음악"/>
<label for="음악" >음악</label>
<input type="checkbox" size="12" name="interest" value="미술"/>
<label for="미술" >미술</label>
<input type="hidden" name="resultInterest"/>
</span>
</div>
<div class="menu" style="text-align: center;">
<span>
<input type="submit" value="가입" />
<input type="reset" value="취소" />
</span>
</div>
</form>
</body>
</html>
regosterOk.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<c:set var="root" value="${pageContext.request.contextPath}"/>
<c:if test = "${check > 0}">
<script type="text/javascript">
alert("회원 가입이 완료되었습니다.");
location.href="${root}/member/register.do";
</script>
</c:if>
<c:if test = "${check == 0}">
<script type="text/javascript">
alert("회원 가입이 완료되지 않았습니다.");
location.href="${root}/member/register.do";
</script>
</c:if>
</body>
</html>
RegisterCommand.java
package com.java.member.command;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.java.command.Command;
public class RegisterCommand implements Command {
@Override
public String proRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
// TODO Auto-generated method stub
return "/WEB-INF/views/member/register.jsp";
}
}
RegisterOkCommand.java
package com.java.member.command;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.java.command.Command;
import com.java.member.model.MemberDao;
import com.java.member.model.MemberDto;
public class RegisterOkCommand implements Command {
@Override
public String proRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
request.setCharacterEncoding("utf-8");
//DTO
MemberDto memberDto = new MemberDto();
memberDto.setId(request.getParameter("id"));
memberDto.setPassword(request.getParameter("password"));
memberDto.setName(request.getParameter("name"));
memberDto.setJumin1(request.getParameter("jumin1"));
memberDto.setJumin2(request.getParameter("jumin2"));
memberDto.setEmail(request.getParameter("email"));
memberDto.setZipcode(request.getParameter("zipcode"));
memberDto.setAddress(request.getParameter("address"));
memberDto.setJob(request.getParameter("job"));
memberDto.setMailing(request.getParameter("mailing"));
//memberDto.setInterest(request.getParameter("interest"));
memberDto.setInterest(request.getParameter("resultInterest"));
memberDto.setMemberLevel("MA");
logger.info(logMsg + memberDto.toString());
//DAO
int check = MemberDao.getInstance().insert(memberDto);
logger.info(logMsg + check);
request.setAttribute("check", check);
return "/WEB-INF/views/member/registerOk.jsp";
}
}
유효성 체크
register.js
function createFrom(obj){
if(obj.id.value ==""){
alert("아이디를 반드시 입력하세요.");
obj.id.focus();
return false;
}
if(obj.password.value ==""){
alert("비밀번호를 반드시 입력하세요.");
obj.password.focus();
return false;
}
if(obj.password.value.length < 7){
alert("비밀번호는 7글자 이상으로 만들어주세요.");
obj.password.focus();
return false;
}
if(obj.passwordCheck.value ==""){
alert("비밀번호 확인란에 입력해주세요.");
obj.passwordCheck.focus();
return false;
}
if(obj.password.value != obj.passwordCheck.value){
alert("입력하신 비밀번호가 같지 않습니다.");
obj.passwordCheck.focus();
return false;
}
if(obj.name.value ==""){
alert("이름을 반드시 입력하세요.");
obj.name.focus();
return false;
}
if(obj.jumin1.value == "" || obj.jumin2.value == ""){
alert("주민번호을 반드시 입력하세요.");
obj.jumin1.focus();
obj.jumin2.focus();
return false;
}
if(obj.jumin1.value.length !=6){
alert("주민번호 앞자리 6자리입니다.");
obj.jumin1.focus();
return false;
}
if(obj.jumin2.value.length !=7){
alert("주민번호 뒤자리 7자리입니다.");
obj.jumin2.focus();
return false;
}
if(obj.email.value ==""){
alert("이메일을 입력하세요.");
obj.email.focus();
return false;
}
if(obj.zipcode.value ==""){
alert("우편번호을 입력하세요.");
obj.zipcode.focus();
return false;
}
if(obj.job.value ==""){
alert("직업을 선택하세요.");
obj.job.focus();
return false;
}
var check = false;
for(var i=0;i<obj.mailing.length;i++){
if(obj.mailing[i].checked==true) check=true;
}
if(obj.mailing.value ==""){
alert("메일수신 여부를 체크해주세요.");
obj.mailing.focus();
return false;
}
check = false;
var str="";
for(var i=0; i<obj.interest.length; i++){
if(obj.interest[i].checked==true){
str+=obj.interest[i].value + ",";
}
}
//alert(str);
obj.resultInterest.value=str;
/* if(check == false){
alert("관심사를 하나 이상 체크하세요.");
return false;
}*/
}
function idCheck(obj, root){
alert(obj.id.value);
if(obj.id.value ==""){
alert("아이디를 반드시 입력하세요.");
obj.id.focus();
return false;
}else{
var url = root + "/member/idCheck.do?id=" + obj.id.value;
//alert(url);
window.open(url, "", "width=400, height=200");
}
}
function searchZipcode(root){
var url = root + "/member/zipcode.do";
//alert(url);
window.open(url, "", "width=400, height=200, scrollbars=yes");
}
function sendAddress(zipcode, sido, gugun, dong, ri, bunji){
var address = sido + gugun + dong + ri + bunji;
//alert(zipcode + address);
window.close();
opener.joinform.zipcode.value = zipcode;
opener.joinform.address.value = address;
}
데이터 입력해주고 확인해 본 결과 회원가입이 잘 되었음을 확인할 수 있다.
아이디 중복 체크
idCheck.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>아이디 확인</title>
</head>
<body>
<c:set var="root" value="${pageContext.request.contextPath}"/>
<c:if test="${check != 0}">
<div align="center">
이미 사용중인 아이디입니다.
<form action="${root}/member/idCheck.do" method="get">
<input type="text" name="id"/>
<input type="submit" value="확인"/>
</form>
</div>
</c:if>
<c:if test="${check == 0}">
<div align="center">
사용 가능한 아이디입니다.
</div>
<script type="text/javascript">
opener.joinform.id.value="${id}";
</script>
</c:if>
<div align="center">
<a href="javascript:self.close();">닫기</a>
</div>
</body>
</html>
IdCheckCommand.java
package com.java.member.command;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.java.command.Command;
import com.java.member.model.MemberDao;
public class IdCheckCommand implements Command {
@Override
public String proRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
// TODO Auto-generated method stub
String id = request.getParameter("id");
logger.info(logMsg + id);
int check = MemberDao.getInstance().idCheck(id);
logger.info(logMsg + check);
request.setAttribute("check", check);
request.setAttribute("id", id);
return "/WEB-INF/views/member/idCheck.jsp";
}
}
우편번호 조회 기능을 위한 설정
1. 해당사이트로 가서 다운로드 페이지로 들어간다.
http://postman.pe.kr/index.html
우편번호114 - 집파인더
postman.pe.kr
2. 받은 .zip파일의 압축을 풀고 엑셀파일로 변환한다.
3. Oracle SQL Developer 로 가서 zipcode 테이블을 생성한다.
4. zipcode 테이블에 데이터를 넣어준다.
[다음글]
2020/07/03 - [KITRI/JSP] - JSP 프로그래밍 - [MVC/DB연동] 로그인 페이지 (로그아웃, 회원수정, 회원탈퇴 기능) (2)
JSP 프로그래밍 - [MVC/DB연동] 로그인 페이지 (로그아웃, 회원수정, 회원탈퇴 기능) (2)
[이전글] 2020/07/01 - [KITRI/JSP] - JSP 프로그래밍 - [MVC/DB연동] 회원가입 페이지 (아이디중복체크, 우편번호검색 기능, 유효성검사) (1) JSP 프로그래밍 - [MVC/DB연동] 회원가입 페이지 (아이디중복체크,..
hyonee.tistory.com
우편번호 검색 기능
zipcode.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri = "http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<c:set var = "root" value = "${pageContext.request.contextPath}"/>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript" src="${root}/javascript/member/register.js"></script>
</head>
<body>
<form action="${root}/member/zipcode.do" method="post">
<div align="center">
<table>
<tr>
<td>우편번호를 검색하세요.</td>
</tr>
<tr>
<td>
<input type="text" name="dong"/>
<input type="submit" value="검색"/>
</td>
</tr>
</table>
</div>
</form>
<div align="center">
<c:choose>
<c:when test="${zipcodeList.size()==0}">
<tr>
<td>검색된 결과가 없습니다.</td>
</tr>
</c:when>
<c:when test="${zipcodeList.size()>0}">
<tr>
<td>아래 우편 번호를 클릭하세요.</td>
</tr>
<br />
<c:forEach var="zipcodeDto" items="${zipcodeList}">
<tr>
<td>
<a href="javascript:sendAddress('${zipcodeDto.zipcode}','${zipcodeDto.sido}','${zipcodeDto.gugun}','${zipcodeDto.dong}','${zipcodeDto.ri}','${zipcodeDto.bunji}')">
${zipcodeDto.zipcode}
${zipcodeDto.sido}
${zipcodeDto.gugun}
${zipcodeDto.dong}
${zipcodeDto.ri}
${zipcodeDto.bunji}
</a>
</td>
</tr>
<br />
</c:forEach>
</c:when>
</c:choose>
</div>
</body>
</html>
ZipcodeCommand.java
package com.java.member.command;
import java.util.ArrayList;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.java.command.Command;
import com.java.member.model.MemberDao;
import com.java.member.model.ZipcodeDto;
public class ZipcodeCommand implements Command {
@Override
public String proRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
request.setCharacterEncoding("utf-8");
String checkDong = request.getParameter("dong");
logger.info(logMsg + checkDong);
if(checkDong!=null) {
ArrayList<ZipcodeDto> zipcodeList = MemberDao.getInstance().zipcodeReader(checkDong);
logger.info(logMsg + zipcodeList.size());
request.setAttribute("zipcodeList", zipcodeList);
}
return "/WEB-INF/views/member/zipcode.jsp";
}
}
ZipcodeDto.java
package com.java.member.model;
public class ZipcodeDto {
private String zipcode;
private String sido;
private String gugun;
private String dong;
private String ri;
private String bunji;
public ZipcodeDto() {
super();
// TODO Auto-generated constructor stub
}
public ZipcodeDto(String zipcode, String sido, String gugun, String dong, String ri, String bunji) {
super();
this.zipcode = zipcode;
this.sido = sido;
this.gugun = gugun;
this.dong = dong;
this.ri = ri;
this.bunji = bunji;
}
public String getZipcode() {
return zipcode;
}
public void setZipcode(String zipcode) {
this.zipcode = zipcode;
}
public String getSido() {
return sido;
}
public void setSido(String sido) {
this.sido = sido;
}
public String getGugun() {
return gugun;
}
public void setGugun(String gugun) {
this.gugun = gugun;
}
public String getDong() {
return dong;
}
public void setDong(String dong) {
this.dong = dong;
}
public String getRi() {
return ri;
}
public void setRi(String ri) {
this.ri = ri;
}
public String getBunji() {
return bunji;
}
public void setBunji(String bunji) {
this.bunji = bunji;
}
@Override
public String toString() {
return "ZipcodeDto [zipcode=" + zipcode + ", sido=" + sido + ", gugun=" + gugun + ", dong=" + dong + ", ri="
+ ri + ", bunji=" + bunji + "]";
}
}