Structures
This will be the structure of the mybatismember maven project after we complete them.
model2member.sql
-- 회원관리
select * from tab;
select * from member0609;
create table member0609(
id varchar2(20) primary key,
passwd varchar2(20) not null,
name varchar2(20) not null,
jumin1 varchar2(6) not null,
jumin2 varchar2(7) not null,
mailid varchar2(30),
domain varchar2(30),
tel1 varchar2(5),
tel2 varchar2(5),
tel3 varchar2(5),
phone1 varchar2(5),
phone2 varchar2(5),
phone3 varchar2(5),
post varchar2(10),
address varchar2(200),
gender varchar2(20),
hobby varchar2(50),
intro varchar2(2000),
register timestamp );
MemberDTO.java
The properties and the column names have to be the same, not to map them in the mapper file.
// DTO(Data Transfer Object)
package model;
import java.sql.Timestamp;
public class MemberDTO {
private String id;
private String passwd;
private String name;
private String jumin1;
private String jumin2;
private String mailid;
private String domain;
private String tel1;
private String tel2;
private String tel3;
private String phone1;
private String phone2;
private String phone3;
private String post;
private String address;
private String gender;
private String hobby;
private String intro;
private Timestamp register;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getPasswd() {
return passwd;
}
public void setPasswd(String passwd) {
this.passwd = passwd;
}
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 getMailid() {
return mailid;
}
public void setMailid(String mailid) {
this.mailid = mailid;
}
public String getDomain() {
return domain;
}
public void setDomain(String domain) {
this.domain = domain;
}
public String getTel1() {
return tel1;
}
public void setTel1(String tel1) {
this.tel1 = tel1;
}
public String getTel2() {
return tel2;
}
public void setTel2(String tel2) {
this.tel2 = tel2;
}
public String getTel3() {
return tel3;
}
public void setTel3(String tel3) {
this.tel3 = tel3;
}
public String getPhone1() {
return phone1;
}
public void setPhone1(String phone1) {
this.phone1 = phone1;
}
public String getPhone2() {
return phone2;
}
public void setPhone2(String phone2) {
this.phone2 = phone2;
}
public String getPhone3() {
return phone3;
}
public void setPhone3(String phone3) {
this.phone3 = phone3;
}
public String getPost() {
return post;
}
public void setPost(String post) {
this.post = post;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getHobby() {
return hobby;
}
public void setHobby(String hobby) {
this.hobby = hobby;
}
public String getIntro() {
return intro;
}
public void setIntro(String intro) {
this.intro = intro;
}
public Timestamp getRegister() {
return register;
}
public void setRegister(Timestamp register) {
this.register = register;
}
}
mybatis-cofig.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<properties resource="db.properties" />
<typeAliases>
<typeAlias type="model.MemberDTO" alias="member"></typeAlias>
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driverClassName}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="member.xml" />
</mappers>
</configuration>
MemberController.java
package controller;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
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 service.Action;
import service.ActionForward;
import service.Delete;
import service.Idcheck;
import service.Login;
import service.MemberInsert;
import service.Update;
import service.UpdateMember;
/**
* Servlet implementation class MemberController
*/
@WebServlet("*.do")
public class MemberController extends HttpServlet {
private static final long serialVersionUID = 1L;
public void doProcess(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String requestURI = request.getRequestURI();
String contextPath = request.getContextPath();
String command = requestURI.substring(contextPath.length());
System.out.println("requestURI:"+requestURI); // requestURI: /model2member/MemberInsert.do
System.out.println("contextPath:"+contextPath); // contextPath: /model2member
System.out.println("command:"+command); // command: /MemberInsert.do
Action action = null;
ActionForward forward = null;
// 회원 가입
if(command.equals("/MemberInsert.do")) {
try {
action = new MemberInsert();
forward = action.execute(request, response);
}catch(Exception e) {
e.printStackTrace();
}
// 회원가입 폼
}else if(command.equals("/MemberForm.do")) {
forward = new ActionForward();
forward.setRedirect(true);
forward.setPath("./member/memberform.jsp");
// ID중복 검사(ajax)
}else if(command.equals("/Idcheck.do")) {
try {
action = new Idcheck();
forward = action.execute(request, response);
}catch(Exception e) {
e.printStackTrace();
}
// 로그인(회원인증)
}else if(command.equals("/Login.do")) {
try {
action = new Login();
forward = action.execute(request, response);
}catch(Exception e) {
e.printStackTrace();
}
// 로그인 폼
}else if(command.equals("/LoginForm.do")) {
forward = new ActionForward();
forward.setRedirect(false);
forward.setPath("/member/loginform.jsp");
// 로그 아웃
}else if(command.equals("/Logout.do")) {
forward = new ActionForward();
forward.setRedirect(false);
forward.setPath("/member/logout.jsp");
// 회원정보 수정폼
}else if(command.equals("/UpdateMember.do")) {
try {
action = new UpdateMember();
forward = action.execute(request, response);
}catch(Exception e) {
e.printStackTrace();
}
// 회원정보 수정
}else if(command.equals("/Update.do")) {
try {
action = new Update();
forward = action.execute(request, response);
}catch(Exception e) {
e.printStackTrace();
}
// 회원탈퇴 폼
}else if(command.equals("/DeleteMember.do")) {
forward = new ActionForward();
forward.setRedirect(false);
forward.setPath("/member/deleteform.jsp");
// 회원탈퇴
}else if(command.equals("/Delete.do")) {
try {
action = new Delete();
forward = action.execute(request, response);
}catch(Exception e) {
e.printStackTrace();
}
}
// 포워딩 처리
if(forward != null) {
if(forward.isRedirect()) { // redirect 방식으로 포워딩
response.sendRedirect(forward.getPath());
}else { // dispatcher 방식으로 포워딩
RequestDispatcher dispatcher =
request.getRequestDispatcher(forward.getPath());
dispatcher.forward(request, response);
}
}
}// doProcess() end
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
System.out.println("get");
doProcess(request, response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
System.out.println("post");
doProcess(request, response);
}
}
member.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="mymember">
<!-- 회원가입 -->
<insert id="insert" parameterType="member">
insert into member0609 values(#{id},#{passwd},#{name},#{jumin1},#{jumin2},
#{mailid},#{domain},#{tel1},#{tel2},#{tel3},#{phone1},#{phone2},#{phone3},
#{post},#{address},#{gender},#{hobby},#{intro},sysdate)
</insert>
<!-- ID중복검사, 회원인증 -->
<select id="idcheck" parameterType="String" resultType="member">
select * from member0609 where id = #{id}
</select>
<!-- 회원정보 수정 -->
<update id="update" parameterType="member">
update member0609 set name=#{name}, jumin1=#{jumin1}, jumin2=#{jumin2},
mailid=#{mailid}, domain=#{domain}, tel1=#{tel1}, tel2=#{tel2}, tel3=#{tel3},
phone1=#{phone1}, phone2=#{phone2}, phone3=#{phone3}, post=#{post}, address=#{address},
gender=#{gender}, hobby=#{hobby}, intro=#{intro} where id = #{id}
</update>
<!-- 회원 삭제 -->
<delete id="delete" parameterType="String">
delete from member0609 where id = #{id}
</delete>
</mapper>
index.jsp
This file is connected to the loginForm.
<%@ 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>
<!-- 모델2 회원관리 -->
<script>
location.href="./LoginForm.do";
</script>
</body>
</html>
loginform.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>로그인 폼</title>
<script src="http://code.jquery.com/jquery-latest.js"></script>
<!-- 외부 자바스크립트 파일 불러오기 -->
<script src="<%=request.getContextPath() %>/member/login.js"></script>
</head>
<body>
<form method="post" action="<%=request.getContextPath() %>/Login.do">
<table border=1 width=350 align=center>
<caption>로그인</caption>
<tr>
<td>ID</td>
<td><input type=text size=30 id="id" name="id" autofocus="autofocus"></td>
</tr>
<tr>
<td>비밀번호</td>
<td><input type="password" size=30 id="passwd" name="passwd"></td>
</tr>
<tr>
<td colspan=2 align=center>
<input type="button" value="회원가입"
onClick="location.href='<%=request.getContextPath()%>/MemberForm.do' ">
<input type="submit" value="로그인">
<input type="reset" value="취소">
</td>
</tr>
</table>
</form>
</body>
</html>
login.js
$(document).ready(function(){
$("form").submit(function(){
if($.trim($("#id").val())==""){
alert("ID를 입력하세요");
$("#id").focus();
return false;
}
if($.trim($("#passwd").val())==""){
alert("비밀번호를 입력하세요");
$("#passwd").focus();
return false;
}
});
});
Login.java
package service;
import java.io.PrintWriter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import dao.MemberDAO;
public class Login implements Action{
@Override
public ActionForward execute(HttpServletRequest request, HttpServletResponse response) throws Exception {
// TODO Auto-generated method stub
System.out.println("Login");
response.setContentType("text/html; charset=utf-8");
request.setCharacterEncoding("utf-8");
HttpSession session = request.getSession();
PrintWriter out = response.getWriter();
String id = request.getParameter("id");
String passwd = request.getParameter("passwd");
MemberDAO dao = MemberDAO.getInstance();
int result = dao.memberAuth(id, passwd);
if(result == 1) System.out.println("회원인증 성공");
if(result == 1) { // 회원인증 성공
session.setAttribute("id", id);
}else { // 회원인증 실패
out.println("<script>");
out.println("alert('로그인 실패');");
out.println("history.go(-1)");
out.println("</script>");
out.close();
return null;
}
ActionForward forward = new ActionForward();
forward.setRedirect(false);
forward.setPath("/member/main.jsp");
return forward;
}
}
DAO Class login part
// 로그인(회원인증)
public int memberAuth(String id, String passwd) throws Exception {
int result = 0;
SqlSession session = getSession();
MemberDTO member = session.selectOne("idcheck", id);
if(member != null) { // 중복 ID
if(member.getPasswd().equals(passwd)) {
result = 1; // 회원인증 성공
}else {
result = -1; // 회원인증 실패
}
}
return result;
}
memberform.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>회원 가입 폼</title>
<script src="http://code.jquery.com/jquery-latest.js"></script>
<script src="http://dmaps.daum.net/map_js_init/postcode.v2.js"></script>
<script>
function openDaumPostcode() {
new daum.Postcode({
oncomplete : function(data) {
// 팝업에서 검색결과 항목을 클릭했을때 실행할 코드를 작성하는 부분.
// 우편번호와 주소 정보를 해당 필드에 넣고, 커서를 상세주소 필드로 이동한다.
// document.getElementById('join_zip1').value = data.postcode1;
// document.getElementById('join_zip2').value = data.postcode2;
document.getElementById('post').value = data.zonecode;
document.getElementById('address').value = data.address;
}
}).open();
}
</script>
<!-- 외부 자바스크립트 파일 불러오기 -->
<script src="<%=request.getContextPath() %>/member/member.js"></script>
</head>
<body>
<form method="post" action="<%=request.getContextPath() %>/MemberInsert.do">
<table border=1 width=500 align=center>
<caption>회원 가입</caption>
<tr><td>ID</td>
<td><input type=text autofocus="autofocus" id="id" name="id">
<input type=button value="ID중복검사" id="idcheck">
<div id="myid"></div>
</td>
</tr>
<tr><td>비밀번호</td>
<td><input type=password id="passwd" name="passwd"></td>
</tr>
<tr><td>성명</td>
<td><input type=text id="name" name="name"></td>
</tr>
<tr><td>주민번호</td>
<td><input type=text size=6 maxlength=6 id="jumin1" name="jumin1">-
<input type=text size=7 maxlength=7 id="jumin2" name="jumin2">
</td>
</tr>
<tr><td>E-Mail</td>
<td><input type=text size=10 id="mailid" name="mailid">@
<input type=text size=10 id="domain" name="domain">
<select id="email">
<option value="">직접입력</option>
<option value="naver.com">네이버</option>
<option value="daum.net">다음</option>
<option value="nate.com">네이트</option>
<option value="gmail.com">gmail</option>
</select>
</td>
</tr>
<tr><td>전화번호</td>
<td><input type=text size=4 id="tel1" name="tel1" maxlength=4>-
<input type=text size=4 id="tel2" name="tel2" maxlength=4>-
<input type=text size=4 id="tel3" name="tel3" maxlength=4>
</td>
</tr>
<tr><td>핸드폰</td>
<td><select id="phone1" name="phone1">
<option value="">번호선택</option>
<option value="010">010</option>
<option value="011">011</option>
<option value="016">016</option>
<option value="018">018</option>
<option value="019">019</option>
</select>-
<input type=text size=4 id="phone2" name="phone2" maxlength=4>-
<input type=text size=4 id="phone3" name="phone3" maxlength=4>
</td>
</tr>
<tr><td>우편번호</td>
<td><input type=text size=5 id="post" name="post">
<input type=button value="우편번호검색"
onClick="openDaumPostcode()">
</td>
</tr>
<tr><td>주소</td>
<td><input type=text size=45 id="address" name="address"></td>
</tr>
<tr><td>성별</td>
<td>
<input type=radio id="male" name="gender" value="남자">남자
<input type=radio id="female" name="gender" value="여자">여자
<input type=radio id="others" name="gender" value="기타">기타
</td>
</tr>
<tr><td>취미</td>
<td>
<input type="checkbox" id="h1" name="hobby" value="공부" checked>공부
<input type="checkbox" id="h2" name="hobby" value="게임">게임
<input type="checkbox" id="h3" name="hobby" value="등산">등산
<input type="checkbox" id="h4" name="hobby" value="낚시">낚시
<input type="checkbox" id="h5" name="hobby" value="쇼핑">쇼핑
</td>
</tr>
<tr><td>자기소개</td>
<td>
<textarea id="intro" name="intro" rows="5" cols="50" placeholder="자기소개를 100자 이내로 입력하세요"></textarea>
</td>
</tr>
<tr><td colspan=2 align=center>
<input type=submit value="회원가입">
<input type=reset value="취소">
</td>
</tr>
</table>
</form>
</body>
</html>
MemberInsert.java
package service;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import dao.MemberDAO;
import model.MemberDTO;
public class MemberInsert implements Action{
@Override
public ActionForward execute(HttpServletRequest request, HttpServletResponse response) throws Exception {
// TODO Auto-generated method stub
System.out.println("MemberInsert");
request.setCharacterEncoding("utf-8");
MemberDTO member = new MemberDTO();
member.setId(request.getParameter("id"));
member.setPasswd(request.getParameter("passwd"));
member.setName(request.getParameter("name"));
member.setJumin1(request.getParameter("jumin1"));
member.setJumin2(request.getParameter("jumin2"));
member.setMailid(request.getParameter("mailid"));
member.setDomain(request.getParameter("domain"));
member.setTel1(request.getParameter("tel1"));
member.setTel2(request.getParameter("tel2"));
member.setTel3(request.getParameter("tel3"));
member.setPhone1(request.getParameter("phone1"));
member.setPhone2(request.getParameter("phone2"));
member.setPhone3(request.getParameter("phone3"));
member.setPost(request.getParameter("post"));
member.setAddress(request.getParameter("address"));
member.setGender(request.getParameter("gender"));
String h = "";
String[] h1 = request.getParameterValues("hobby");
for(String h2 : h1) {
h += h2+"-"; // 공부-게임-
}
member.setHobby(h);
member.setIntro(request.getParameter("intro"));
MemberDAO dao = MemberDAO.getInstance();
int result = dao.insert(member);
if(result == 1) {
System.out.println("회원가입 성공");
}
ActionForward forward = new ActionForward();
forward.setRedirect(false);
forward.setPath("/member/loginform.jsp");
return forward;
}
}
Idcheck.java
package service;
import java.io.PrintWriter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import dao.MemberDAO;
public class Idcheck implements Action{
@Override
public ActionForward execute(HttpServletRequest request, HttpServletResponse response) throws Exception {
// TODO Auto-generated method stub
System.out.println("Idcheck");
request.setCharacterEncoding("utf-8");
PrintWriter out = response.getWriter();
String id = request.getParameter("id");
System.out.println("id:"+ id);
MemberDAO dao = MemberDAO.getInstance();
int result = dao.idcheck(id);
System.out.println("result:"+ result); // 1 : 중복ID
// -1 : 사용가능한 ID
out.println(result); // 브라우저에 출력되는 값이 callback함수로 리턴된다.
return null;
}
}
DAO Class Sign up / Id Check parts
// 회원가입
public int insert(MemberDTO member) throws Exception{
int result=0;
SqlSession session = getSession();
result = session.insert("insert", member);
System.out.println("result:"+result);
return result;
}
// ID중복검사
public int idcheck(String id) throws Exception{
int result = 0;
SqlSession session = getSession();
MemberDTO member = session.selectOne("idcheck", id);
if(member != null) { // 중복 ID
result = 1;
}else { // 사용가능한 ID
result = -1;
}
return result;
}
main.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%-- <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %> --%> <!-- 안됨 -->
<!-- 세션이 있으면 -->
<%-- <c:if test="${not empty sessionScope.id}"> --%> <!-- 2개 모두 잘됨 -->
<c:if test="${sessionScope.id != null }">
${sessionScope.id} 님 환영 합니다. <br><br>
<a href="<%=request.getContextPath() %>/UpdateMember.do">회원정보 수정</a> <br><br>
<a href="<%=request.getContextPath() %>/Logout.do">로그아웃</a> <br><br>
<a href="<%=request.getContextPath() %>/DeleteMember.do">회원탈퇴</a> <br><br>
</c:if>
<!-- 세션이 없으면 -->
<%-- <c:if test="${empty sessionScope.id}"> --%>
<c:if test="${sessionScope.id == null}">
<a href="<%=request.getContextPath() %>/MemberForm.do">회원가입</a> <br><br>
<a href="<%=request.getContextPath() %>/LoginForm.do">로그인</a> <br><br>
</c:if>
With session
Without session
The next steps will be demonstrated in the next post.