Spring 회원가입 DB 연동 - Spring hoewongaib DB yeondong

Spring 회원가입 DB 연동 - Spring hoewongaib DB yeondong
Spring 회원가입 DB 연동 - Spring hoewongaib DB yeondong

코드를 작성하기에 앞서 DB 연결 설정을 먼저 해주도록 하자.

DB 연결 설정

1. cmd 에서 SQL 계정을 추가한다. DB연결시 데이터를 처리할 새로운 계정을 행성하는데 , mvc(ID)/1234(PW)로 새로운 계정을 생성했다.

Spring 회원가입 DB 연동 - Spring hoewongaib DB yeondong

2. Oracle SQL developer에서 mvc 계쩡에 접속해서 member 테이블을 생성한다. num 을 pk로 하고, 시퀀스를 생성해주었다.

Spring 회원가입 DB 연동 - Spring hoewongaib DB yeondong

3. 이클립스에서  JDBC연동을 위해 라이브러리 폴더(WEB-INF/lib)에 jar파일 추가한다.

ojdbc6.jar

2.05MB

[참고] 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

Spring 회원가입 DB 연동 - Spring hoewongaib DB yeondong

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

Spring 회원가입 DB 연동 - Spring hoewongaib DB yeondong
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

Spring 회원가입 DB 연동 - Spring hoewongaib DB yeondong
<%@ 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;	
}

데이터 입력해주고 확인해 본 결과 회원가입이 잘 되었음을 확인할 수 있다.

Spring 회원가입 DB 연동 - Spring hoewongaib DB yeondong
Spring 회원가입 DB 연동 - Spring hoewongaib DB yeondong

아이디 중복 체크

idCheck.jsp

Spring 회원가입 DB 연동 - Spring hoewongaib DB yeondong
<%@ 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

Spring 회원가입 DB 연동 - Spring hoewongaib DB yeondong

zipfinder_data.zip

0.73MB

2. 받은 .zip파일의 압축을 풀고 엑셀파일로 변환한다.

3. Oracle SQL Developer 로 가서 zipcode 테이블을 생성한다.

Spring 회원가입 DB 연동 - Spring hoewongaib DB yeondong

4. zipcode 테이블에 데이터를 넣어준다. 

Spring 회원가입 DB 연동 - Spring hoewongaib DB yeondong

[다음글]

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

Spring 회원가입 DB 연동 - Spring hoewongaib DB yeondong

우편번호 검색 기능

zipcode.jsp

Spring 회원가입 DB 연동 - Spring hoewongaib DB yeondong
<%@ 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 + "]";
    }
    
}

[다음글]

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

Spring 회원가입 DB 연동 - Spring hoewongaib DB yeondong