index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!-- index.jsp -->

<html>
<head>
	<title>회원관리</title>
</head>
<body>
	<h1 align="center">스프링으로 공부하는 회원관리프로그램</h1>
	<ul><li>
		<h3><a href="index_member.do">회원관리 프로그램으로 가기</a></h3>
	</li></ul>
</body>
</html>
MemberController.java
package member;

import java.util.List;
import java.util.Map;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;

import member.dao.MemberDAO;
import member.dto.MemberDTO;
import member.mybatis.MemberMapper;

@Controller // annotation
public class MemberController {	

	// 메서드
	@RequestMapping("/index_member.do")
	public String IndexMember() {
		return "index_member";
	}	
}

 

// 회원 조회(memberAll.do)

memberAll.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!-- memberAll.jsp -->
<%@ include file="top.jsp"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<div align="center">
	<hr color="green" width="300">
	<c:if test="${empty param.mode}">
		<h2>회 원 목 록 페 이 지</h2>
	</c:if>	
	<c:if test="${not empty param.mode}">
		<h2>회 원 찾 기</h2>
		<form name="f" action="memberAll.do" method="post">
			<input type="hidden" name="mode" value="${param.mode}"/>
			<select name="search">
				<option value="name">회원명</option>
				<option value="id">아이디</option>
			</select>
			<input type="text" name="searchString">
			<input type="submit" value="찾기">
		</form>
	</c:if>
	<hr color="green" width="300">
	<table border="0" width="100%" class="outline">
		<tr>
			<th class="m1">번호</th>
			<th class="m1">이름</th>
			<th class="m1">아이디</th>
			<th class="m1">이메일</th>
			<th class="m1">전화번호</th>
			<th class="m1">가입일</th>
			<th class="m1">수정 | 삭제</th>
		</tr>
	<c:if test="${empty listMember}">
		<tr>
			<td colspan="7">등록된(찾으시는) 회원이 없습니다.</td>
		</tr>
	</c:if>	
	<c:forEach var="dto" items="${listMember}">
		<tr>
			<td align="center">${dto.no}	</td>
			<td align="center">${dto.name}</td>
			<td align="center">${dto.id}</td>
			<td align="center">${dto.email}</td>
			<td align="center">${dto.allHp}</td>
			<td align="center">${dto.joindate}</td>
			<td align="center">
				<a href="member_update.do?no=${dto.no}">수정</a> | 
				<a href="member_delete.do?no=${dto.no}">삭제</a>
			</td>
		</tr>
	</c:forEach>			
	</table>
</div>
<%@ include file="bottom.jsp"%>

 

// 회원가입 여부 확인 입력 폼(memberSsn.do)

MemberController.java
@RequestMapping("/memberSsn.do")
public String SSnMember() {
    return "memberSsn";
}
memberSsn.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!-- memberSsn.jsp -->
<html>
<head>
	<title>회원가입유무</title>
	<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
	<div align="center">
		<hr color="green" width="300">
		<h2>회 원 가 입 유 무</h2>
		<hr color="green" width="300">
		<form name="f" action="checkMember.do" method="post">
			<table border="0" width="500" class="outline">
				<tr>
					<th>회원명</th>
					<td><input type="text" name="name" class="box"></td>
				</tr>
				<tr>
					<th>주민번호</th>
					<td><input type="text" name="ssn1" class="box">
					- <input type="password" name="ssn2" class="box"></td>
				</tr>
				<tr>
					<td colspan="2" align="center">
						<input type="submit" value="전송">
						<input type="reset" value="취소">
					</td>
				</tr>
			</table>
		</form>
	</div>
</body>
</html>

 

// 회원가입 여부 확인 처리(checkMember.do)

MemberController.java
@RequestMapping("/checkMember.do")
public String CheckMember(HttpServletRequest req, @RequestParam Map<String, String> params) {
    boolean isMember = MemberMapper.checkMember(params);
    if(isMember) {
        req.setAttribute("msg", "회원가입되어 있습니다. 로그인해주세요.");
        return "forward:windowClose.jsp";
    }else {
        HttpSession session = req.getSession();
        session.setAttribute("name", params.get("name"));
        session.setAttribute("ssn1", params.get("ssn1"));
        session.setAttribute("ssn2", params.get("ssn2"));

        req.setAttribute("msg", "회원가입 페이지로 이동합니다.");
        req.setAttribute("url", "member_input.do");
        return "forward:message.jsp";
    }
}

 

// 회원가입 입력 폼(member_input.do - GET)

MemberController.java
@RequestMapping(value="/member_input.do", method=RequestMethod.GET)
public String InputMember() {
    return "member_input";
}
member_input.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<html>
	<head>
		<title>회원가입</title>
		<link rel="stylesheet" type="text/css" href="style.css">
		<script type="text/javascript">
			function check(){
				if (f.id.value==""){
					alert("아이디를 입력해 주세요")
					f.id.focus()
					return
				}
				if (f.passwd.value==""){
					alert("비밀번호를 입력해 주세요")
					f.passwd.focus()
					return
				}
				document.f.submit()	
			}
		</script>
	</head>
	<body onload="f.id.focus()">
		<form name="f" method="POST" action="member_input.do">
			<table width="600" align="center" class="outline">
  				<tr>
					<td colspan="2" align=center class="m2">회원가입</td>
 				</tr>
				<tr>
					<td width="150" class="m3">이름</td>
					<td class="m3">
						<input type="text" name="name" class="box" value="${name}" disabled>
						<input type="hidden" name="name" value="${name}"/>
					</td>
				</tr>
				<tr>
					<td width="150" class="m3">아이디</td>
					<td class="m3">
						<input type="text" name="id" class="box">
					</td>
  				</tr>
  				<tr>
					<td width="150" class="m3">비밀번호</td>
					<td class="m3">
						<input type="password" name="passwd" class="box">
					</td>
  				</tr>
  				<tr>
					<td width="150" class="m3">주민번호</td>
					<td class="m3">
						<input type="text" name="ssn1" class="box" value="${ssn1}" readOnly> -
				<input type="password" name="ssn2" class="box" value="${ssn2}" readOnly>
					</td>
  				</tr>
  				<tr>
					<td width="150" class="m3">이메일</td>
					<td class="m3">
						<input type="text" name="email" class="box">
					</td>
  				</tr>
  				<tr>
					<td width="150" class="m3">연락처</td>
					<td class="m3">
						<input type="text" name="hp1" class="box" size="3" maxlength="3"> -
						<input type="text" name="hp2" class="box" size="4" maxlength="4"> -
						<input type="text" name="hp3" class="box" size="4" maxlength="4">
					</td>
  				</tr>
  				<tr>
					<td colspan="2" align="center">
						<a href="javascript:check()">[전송]</a>
						<a href="#">[취소]</a>
					</td>
  				</tr>
  			</table>
		</form>
	</body>
</html>

 

// 회원가입 처리(member_input.do - POST)

MemberController.java
@RequestMapping(value="/member_input.do", method=RequestMethod.POST)
public String InputOkMember(HttpServletRequest req, @ModelAttribute MemberDTO dto) {
    int res = MemberMapper.insertMember(dto);
    if(res>0) {
        req.setAttribute("msg", "회원 가입 성공!");
        return "forward:windowClose.jsp";
    } else {
        req.setAttribute("msg", "회원 가입 실패! 회원가입 페이지로 이동합니다.");
        req.setAttribute("url", "memberSsn.do");
        return "forward:message.jsp";
    }
}

 

// 회원 삭제 (member_delete.do)

MemberController.java
@RequestMapping("/member_delete.do")
	public String DeleteMember(HttpServletRequest req, String no) {
		int res = MemberMapper.deleteMember(Integer.parseInt(no));
		if(res>0) {
			req.setAttribute("msg", "회원 삭제 성공! 회원 목록 페이지로 이동합니다.");
			req.setAttribute("url", "memberAll.do");
			return "forward:message.jsp";
		} else {
			req.setAttribute("msg", "회원 삭제 실패! 회원 목록 페이지로 이동합니다.");
			req.setAttribute("url", "memberAll.do");
			return "forward:message.jsp";
		}
	}

 

// 회원 수정 폼 (member_update.do - GET)

MemberController.java
@RequestMapping(value="/member_update.do", method=RequestMethod.GET)
public String UpdateMember(HttpServletRequest req, @RequestParam int no) {
    MemberDTO dto = MemberMapper.getMemberNo(no);
    req.setAttribute("getMember", dto);
    return "member_update";
}
member_update.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!-- member_update.jsp -->
<%@ include file="top.jsp"%>
<link rel="stylesheet" type="text/css" href="style.css"> 
<script type="text/javascript">
	function check(){
		if (f.passwd.value == ""){
			alert("비밀번호를 입력해 주세요!!")
			f.passwd.focus()
			return false
		}	
		document.f.submit()
	}	
</script>
	<form name="f" method="POST" action="member_update.do">
		<input type="hidden" name="no" value="${getMember.no}"/>
		<table width="600" align="center" class="outline">
 			<tr>
				<td colspan="2" align=center class="m2">회원수정</td>
				</tr>
			<tr>
				<td width="150" class="m3">이름</td>
				<td class="m3">
					<input type="text" name="name" class="box" value="${getMember.name}" disabled>
					<input type="hidden" name="name" value="${getMember.name}"/>
				</td>
			</tr>
			<tr>
				<td width="150" class="m3">아이디</td>
				<td class="m3">
					<input type="text" name="id" class="box" value="${getMember.id}" readOnly>
				</td>
 				</tr>
 				<tr>
				<td width="150" class="m3">비밀번호</td>
				<td class="m3">
					<input type="password" name="passwd" class="box" value="${getMember.passwd}">
				</td>
 				</tr>
 				<tr>
				<td width="150" class="m3">주민번호</td>
				<td class="m3">
					<input type="text" name="ssn1" class="box" value="${getMember.ssn1}" readOnly> -
			<input type="password" name="ssn2" class="box" value="${getMember.ssn2}" readOnly>
				</td>
 				</tr>
 				<tr>
				<td width="150" class="m3">이메일</td>
				<td class="m3">
					<input type="text" name="email" class="box" value="${getMember.email}">
				</td>
 				</tr>
 				<tr>
				<td width="150" class="m3">연락처</td>
				<td class="m3">
					<input type="text" name="hp1" class="box" size="3" maxlength="3" value="${getMember.hp1}"> -
					<input type="text" name="hp2" class="box" size="4" maxlength="4" value="${getMember.hp2}"> -
					<input type="text" name="hp3" class="box" size="4" maxlength="4" value="${getMember.hp3}">
				</td>
 				</tr>
 				<tr>
				<td colspan="2" align="center">
					<a href="javascript:check()">[수정]</a>
					<a href="#">[취소]</a>
				</td>
 				</tr>
 			</table>
	</form>
<%@ include file="bottom.jsp"%>

 

// 회원 수정 처리 (member_update.do - POST)

MemberController.java
@RequestMapping(value="/member_update.do", method=RequestMethod.POST)
public String UpdateOkMember(HttpServletRequest req, @ModelAttribute MemberDTO dto) {
    int res = MemberMapper.updateMember(dto);
    if(res>0) {
        req.setAttribute("msg", "회원 수정 성공! 회원 목록 페이지로 이동합니다.");
        req.setAttribute("url", "memberAll.do");
        return "forward:message.jsp";
    } else {
        req.setAttribute("msg", "회원 수정 실패! 회원 목록 페이지로 이동합니다.");
        req.setAttribute("url", "memberAll.do");
        return "forward:message.jsp";
    }
}

 

// 로그인 폼 (login.do - GET)

MemberController.java
@RequestMapping(value="/login.do", method=RequestMethod.GET)
public String LoginMember() {
    return "login";
}
login.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ include file="../member/top.jsp"%>
<!-- login.jsp-->
<link rel="stylesheet" type="text/css" href="style.css">
<script type="text/javascript">
	function checkMember(){
		window.open("memberSsn.do", "check", "width=640, height=400")
	}
	function searchMember(mode){
		window.open("searchMember.do?mode="+mode, "search", "width=650, height=400")
	}
	function loginCheck(){
		if (f.id.value==""){
			alert("아이디를 입력해 주세요!!")
			f.id.focus()
			return
		}
		if (f.passwd.value==""){
			alert("비밀번호를 입력해 주세요!!")
			f.passwd.focus()
			return
		}
		document.f.submit()
	}
</script>
<div align="center">
<br>
<img src="img/bottom.gif" width=570 height="40" border="0" alt="">
<br>
<p>
<img src="img/tm_login.gif" width=100 height="13" border="0" align="center" ALT="회원 로그인">
<form name="f" action="login.do" method="post">
	<table width="60%" align="center" height="120">
		<tr>
			<td align="right" width="30%">
				<img src="img/id01.gif" 
				width="28" height="11" border="0" alt="아이디">&nbsp;&nbsp;
			</td>
			<td width="40%">
			<c:if test="${empty cookie['saveId']}">
			<!-- cookie라는 객체안에 savID라는 이름이 있나? -->
				<input type="text" name="id" tabindex="1">
			</c:if>	
			<c:if test="${not empty cookie['saveId']}">
				<input type="text" name="id" tabindex="1" value="${cookie['saveId'].value}">
				<!-- cookie라는 객체의 savID의 value를 가져옴(name이나 value 중에 가져옴) -->
				<!-- cookie.saveId.value로 해도 동일함 -->
			</c:if>
			</td>
			<td rowspan="2" width="30%" valign="middle">
				<a href="javascript:loginCheck()">
					<img src="img/bt_login.gif" border="0" alt="로그인"  tabindex="3">&nbsp;&nbsp;<br>
				</a>
				<nobr>
		<c:if test="${empty cookie['saveId']}">				
					<input type="checkbox" name="saveId">
		</c:if>
		<c:if test="${not empty cookie['saveId']}">
					<input type="checkbox" name="saveId" checked>
		</c:if>				
					<font face="굴림" size="2">아이디 기억하기</font>
				</nobr>
			</td>
		</tr>
		<tr>
			<td align="right">
				<img src="img/pwd.gif" 
							width="37" height="11" alt="비밀번호">
			</td>
			<td>
				<input type="password" name="passwd"  tabindex="2">
			</td>
		</tr>
		<tr>
			<td colspan="3" align="center">
				<a href="javascript:checkMember()">
					<img src="img/bt_join.gif" width="60" height="22" alt="회원가입">
				</a>	
				<a href="javascript:searchMember('id')">
 					<img src="img/bt_search_id.gif" width="60" height="22" alt="아이디 찾기">
 				</a>
 				<a href="javascript:searchMember('pw')">
					<img src="img/bt_search_pw.gif" width="60" height="22" alt="비밀번호 찾기">
				</a>				
			</td>
		</tr>
	</table>
</form> 
</div>
<%@ include file="../member/bottom.jsp"%>
MemberController.java
@RequestMapping(value="/login.do", method=RequestMethod.POST)
public String LoginOkMember(HttpServletRequest req, HttpServletResponse resp, @RequestParam Map<String, String> params) {
    int res = MemberMapper.loginCheck(params.get("id"), params.get("passwd"));
    switch(res) {
        case MemberDAO.OK :
            MemberDTO dto = MemberMapper.getMemberId(params.get("id"));							
            Cookie ck = new Cookie("saveId", params.get("id"));
            if (params.get("saveId") == null) {
                ck.setMaxAge(0);
            }else {
                ck.setMaxAge(24*60*60);
            }
            resp.addCookie(ck);				
            HttpSession session = req.getSession();
            session.setAttribute("mbId", dto);	
            req.setAttribute("msg", dto.getName()+"님이 로그인 하셨습니다.");
            req.setAttribute("url", "index_member.do");
            break;
        case MemberDAO.NOT_ID :
            req.setAttribute("msg", "없는 아이디 입니다. 다시 확인 후 로그인을 해 주세요");
            req.setAttribute("url", "login.do");
            break;
        case MemberDAO.NOT_PW :
            req.setAttribute("msg", "비밀번호가 틀렸습니다. 다시 확인 후 로그인을 해 주세요");
            req.setAttribute("url", "login.do");
            break;
    }

    return "forward:message.jsp";
}

 

// 로그아웃 (logout.do)

MemberController.java
@RequestMapping("/logout.do")
public ModelAndView LogoutMember(HttpServletRequest req) {
    HttpSession session = req.getSession();
    session.invalidate();
    ModelAndView mav = new ModelAndView("forward:message.jsp");
    mav.addObject("msg", "로그아웃 완료");
    mav.addObject("url", "index_member.do");
    return mav;
}

[ 작업 순서 ]

1. lib : mybatis-3.2.3.jar
2. db.properties 파일 생성 → DB 속성
3. configuration.xml 생성 → db.properties 파일을 가지고 DB 환경설정
4. studentMapper.xml → 쿼리문을 id로 분류해서 모아둔 곳
5. studentMapper.java → 쿼리문이 실행될 수 있게 메서드 형태로 모아둔 곳
6. StudentController.java (또는 Servlet) → 주소값에 맞춰 실행될 메서드를 정의


1. 학생관리

configuration.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> 

	<!-- 아래 environments에서 사용할 DB정보가 여기에 저장되어있음(New>General>File) -->
	<properties resource="student/mybatis/db.properties"/>


	<!-- DTO 별칭 지정 -->
	<typeAliases>
		<typeAlias type="student.dto.StudentDTO" alias="studentDTO"/>
	</typeAliases>
	
	
	<!-- 공통부분 -->
	<environments default="development"> 
		<environment id="development"> 
			<transactionManager type="JDBC"/> 
			<dataSource type="POOLED"> 
				<property name="driver" value="${driver}"/> 
				<property name="url" value="${url}"/> 
				<property name="username" value="${username}"/> 
				<property name="password" value="${password}"/> 
			</dataSource> 
		</environment> 
	</environments> 
	
	
	<!-- 실제 쿼리문이 위치하는 곳 : mapper -->
	<mappers> 		
		<mapper resource="student/mybatis/studentMapper.xml"/> 
	</mappers> 
</configuration>
studentMapper.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="student.mybatis.studentMapper">  
	<select id="listStudent" resultType="studentDTO">
		<!-- configuration.xml에서 alias 줬기 때문에 student.dto.StudentDTO 안써도됨 -->
		select * from student
	</select>
	
	<select id="findStudent" parameterType="String" resultType="studentDTO">
		select * from student where cname = #{cname}
	</select>
	
	<insert id="insertStudent" parameterType="studentDTO">
		<!-- int형의 resultType은 별도로 지정안해줘도됨. 알아서 1, 0으로 반환함 -->
		insert into student values(#{id}, #{name}, #{cname})
	</insert>
	
	<delete id="deleteStudent" parameterType="String">
		delete from student where id = #{id}
	</delete>

</mapper>
StudentMapper.java
package student.mybatis;

import java.io.IOException;
import java.io.Reader;
import java.util.List;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import student.dto.StudentDTO;

public class StudentMapper {
	private static SqlSessionFactory sqlSessionFactory;
	
	// SqlSessionFactory 객체 만들기
	static {
		try {
			String resource = "configuration.xml";  // src폴더 안에 있음
			Reader reader = Resources.getResourceAsReader(resource);
			sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
		}catch(IOException e) {
			throw new RuntimeException("configuration 인스턴스 생성 중 오류 발생!" + e.getMessage(), e);
		}
	}
	
	
	// opensession 메소드를 통해 쿼리문 실행
	public static List<StudentDTO> listStudent(){
		SqlSession sqlSession = sqlSessionFactory.openSession();
		try {
			List<StudentDTO> list = sqlSession.selectList("listStudent");
			return list;
		}finally {
			sqlSession.close();
		}
	}
	
	public static int insertStudent(StudentDTO dto) {
		SqlSession sqlSession = sqlSessionFactory.openSession();
		try {
			int res = sqlSession.insert("insertStudent", dto);
			sqlSession.commit(); // insert, delete, update는 DB에 영향 주므로 commit 필수
			return res;
		} finally {
			sqlSession.close();
		}
	}
	
	public static int deleteStudent(String id) {
		SqlSession sqlSession = sqlSessionFactory.openSession();
		try {
			int res = sqlSession.delete("deleteStudent", id);
			sqlSession.commit();
			return res;
		} finally {
			sqlSession.close();
		}
	}
	
	public static List<StudentDTO> findStudent(String cname){
		SqlSession sqlSession = sqlSessionFactory.openSession();
		try {
			List<StudentDTO> find = sqlSession.selectList("findStudent", cname);
			//하나만 반환하는 거면 sqlSession.selectOne()
			return find;
		} finally {
			sqlSession.close();
		}
	}
}
StudentServlet.java
package student;

import java.util.List;

import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import student.dao.StudentDAO;
import student.dto.StudentDTO;
import student.mybatis.StudentMapper;

@Controller // annotation
public class StudentServlet {
	
	// StudentDAO 주입
//	@Autowired // springStudent-servlet.xml에 등록되어있는 여러 빈 중에 자동으로 가져와짐
//	private StudentDAO studentDAO;
	
	
	// 메서드
	@RequestMapping("/student.do") 
	public String index() {
		return "student";
	}
	
	@RequestMapping("/insert_student.do")
	public String insertStudent(StudentDTO dto) { // @ModelAttribute가 생략되어있어서 알아서 값을 세팅해줌
		//int res = studentDAO.insertStudent(dto);
		int res = StudentMapper.insertStudent(dto);
		return "redirect:list_student.do";
	}
	
	@RequestMapping("/list_student.do")
	public String listStudent(HttpServletRequest req) { // 매개변수에 req 써주면 
		//List<StudentDTO> list = studentDAO.listStudent();
		List<StudentDTO> list = StudentMapper.listStudent();
		req.setAttribute("listStudent", list);
		return "list";
	}
	
	@RequestMapping("/delete_student.do")
	public String deleteStudent(@RequestParam String id) { // @Requestparam 생략되어있음. Reqest중에 id라는 parameter가 있는데 넣어줘
		//int res = studentDAO.deleteStudent(id);
		int res = StudentMapper.deleteStudent(id);
		return "redirect:list_student.do";
	}
	
	@RequestMapping("/find_student.do")
	public String findStudent(HttpServletRequest req, String cname) {
		//List<StudentDTO> list = studentDAO.findStudent(cname);
		List<StudentDTO> list = StudentMapper.findStudent(cname);
		req.setAttribute("listStudent", list);
		return "list";
	}	
}

 


2. 게시판 관리

configuration.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> 

	<!-- 아래 environments에서 사용할 DB정보가 여기에 저장되어있음(New>General>File) -->
	<properties resource="board/mybatis/db.properties"/>


	<!-- DTO 별칭 지정 -->
	<typeAliases>
		<typeAlias type="board.dto.BoardDTO" alias="boardDTO"/>
	</typeAliases>
	
	
	<!-- 공통부분 -->
	<environments default="development"> 
		<environment id="development"> 
			<transactionManager type="JDBC"/> 
			<dataSource type="POOLED"> 
				<property name="driver" value="${driver}"/> 
				<property name="url" value="${url}"/> 
				<property name="username" value="${username}"/> 
				<property name="password" value="${password}"/> 
			</dataSource> 
		</environment> 
	</environments> 
	
	
	<!-- 실제 쿼리문이 위치하는 곳 : mapper -->
	<mappers> 		
		<mapper resource="board/mybatis/boardMapper.xml"/> 
	</mappers> 
</configuration>
boardMapper.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="board.mybatis.boardMapper">  
	<select id="listBoard" resultType="boardDTO"><!-- configuration.xml에서 alias 줬기 때문에 student.dto.StudentDTO 안써도됨 -->
		select * from board1 order by num desc
	</select>
	
	<insert id="insertBoard" parameterType="boardDTO">
		<!-- int형의 resultType은 별도로 지정안해줘도됨. 알아서 1, 0으로 반환함 -->
		insert into board1 values(board1_seq.nextval, #{writer}, #{email}, #{subject}, #{passwd}, sysdate, 0, #{content},#{ip})
	</insert>
	
	<select id="getBoard" parameterType="int" resultType="boardDTO">
		select * from board1 where num = #{num}
	</select>
	
	<select id="plusReadcount" parameterType="int">
		update board1 set readcount = readcount + 1 where num = #{num}
	</select>
		
	<delete id="deleteBoard" parameterType="int">
		delete from board1 where num = #{num}
	</delete>
	
 	<update id="updateBoard" parameterType="boardDTO">
 		update board1 set subject=#{subject}, email=#{email}, content=#{content} where num=#{num}
	</update>
</mapper>
BoardMapper.java
package board.mybatis;

import java.io.IOException;
import java.io.Reader;
import java.util.List;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import board.dto.BoardDTO;

public class BoardMapper {
	private static SqlSessionFactory sqlSessionFactory;
	
	// SqlSessionFactory 객체 만들기
	static {
		try {
			String resource = "configuration.xml";  // src폴더 안에 있음
			Reader reader = Resources.getResourceAsReader(resource);
			sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
		}catch(IOException e) {
			throw new RuntimeException("configuration 인스턴스 생성 중 오류 발생!" + e.getMessage(), e);
		}
	}
	
	// opensession 메소드를 통해 쿼리문 실행
	public static List<BoardDTO> listBoard(){
		SqlSession sqlSession = sqlSessionFactory.openSession();
		try {
			List<BoardDTO> list = sqlSession.selectList("listBoard");
			return list;
		}finally{
			sqlSession.close();
		}
	}	
	
	public static int insertBoard(BoardDTO dto) {
		SqlSession sqlSession = sqlSessionFactory.openSession();
		try {
			int res = sqlSession.insert("insertBoard", dto);
			sqlSession.commit(); // insert, delete, update는 DB에 영향 주므로 commit 필수
			return res;
		} finally {
			sqlSession.close();
		}
	}
		
	public static BoardDTO getBoard(int num){
		SqlSession sqlSession = sqlSessionFactory.openSession();
		try {
			BoardDTO dto = sqlSession.selectOne("getBoard", num);
			return dto;
		}finally {
			sqlSession.close();
		}
	}
	
	public static int plusReadcount(int num) {
		SqlSession sqlSession = sqlSessionFactory.openSession();
		try {
			int res = sqlSession.update("plusReadcount", num);
			sqlSession.commit();
			return res;
		}finally {
			sqlSession.close();
		}
	}
		
	public static int deleteBoard(int num) {
		SqlSession sqlSession = sqlSessionFactory.openSession();
		try {
			int res = sqlSession.delete("deleteBoard", num);
			sqlSession.commit();
			return res;
		}finally {
			sqlSession.close();
		}
	}
	
	public static int updateBoard(BoardDTO dto) {
		SqlSession sqlSession = sqlSessionFactory.openSession();
		try {
			int res = sqlSession.update("updateBoard", dto);
			sqlSession.commit(); // insert, delete, update는 DB에 영향 주므로 commit 필수
			return res;
		} finally {
			sqlSession.close();
		}
	}
	
}
BoardController.java
package board;

import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindException;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;

import board.dao.BoardDAO;
import board.dto.BoardDTO;
import board.mybatis.BoardMapper;

@Controller // annotation
public class BoardController {
	
	// DB : BoardDAO 주입
//	@Autowired // springBoard-servlet.xml에 등록되어있는 여러 빈 중에 자동으로 가져와짐
//	private BoardDAO boardDAO;
	
	// 메서드
	@RequestMapping("/list_board.do")
	public String listBoard(HttpServletRequest req) {
		//List<BoardDTO> list = boardDAO.listBoard();
		List<BoardDTO> list = BoardMapper.listBoard();
		req.setAttribute("listBoard", list);
		return "list";
	}
	
	@RequestMapping(value="/write_board.do", method=RequestMethod.GET) 
	public String wirteFormBoard() {
		return "writeForm";
	}
	
	@RequestMapping(value="/write_board.do", method=RequestMethod.POST) 
	public String wirteProBoard(HttpServletRequest req, BoardDTO dto) {
		dto.setIp(req.getRemoteAddr()); // IP주소 세팅		
		//int res = boardDAO.insertBoard(dto);
		int res = BoardMapper.insertBoard(dto);
		return "redirect:list_board.do";
	}
	
	@RequestMapping("/content.do") 
	public String contentBoard(HttpServletRequest req, int num) {
		//BoardDTO dto = boardDAO.getBoard(num, "content");
		int res = BoardMapper.plusReadcount(num);
		BoardDTO dto = BoardMapper.getBoard(num);
		req.setAttribute("getBoard", dto);
		return "content";		
	}
	
	@RequestMapping(value="/update.do", method=RequestMethod.GET)
	public String updateFormBoard(HttpServletRequest req, int num) {
		//BoardDTO dto = boardDAO.getBoard(num, "update");
		BoardDTO dto = BoardMapper.getBoard(num);
		req.setAttribute("getBoard", dto);
		return "updateForm";		
	}
	
	@RequestMapping(value="/update.do", method=RequestMethod.POST) 
	public String updateProBoard(@ModelAttribute BoardDTO dto, BindingResult result) { 
		// 예측가능한(null 세팅) 에러가 날 것 같으면 미리 처리해둘 수 있음. 
		// 에러가 나면 BindingResult에 담아두겠다.
		if(result.hasErrors()) { // dto객체를 만드는 중 에러가 난다면
			dto.setNum(0); // 0으로 세팅한다. 내가 알아서 해결하는 코드
		}		
		//int res = boardDAO.updateBoard(dto);
		int res = BoardMapper.updateBoard(dto);
		return "redirect:list_board.do";
	}
	
	@RequestMapping(value="/delete.do", method=RequestMethod.GET) 
	public String deleteFormBoard() {
		return "deleteForm";
	}
	
	@RequestMapping(value="/delete.do", method=RequestMethod.POST) 
	public String deleteProBoard(@RequestParam Map<String, String> params) {
		// @RequestParam : 파라미터명이 Key, 파라미터값이 Value로 저장. 
		// 인자가 많을 경우 Map타입으로 작성해볼 수 있음
		// params에는 num : num값, passwd : passwd값이 들어가있음
		
		//int res = boardDAO.deleteBoard(Integer.parseInt(params.get("num")), params.get("passwd")); // .get(Key) = value값 꺼내짐
		BoardDTO dto = BoardMapper.getBoard(Integer.parseInt(params.get("num")));
		if (dto.getPasswd().equals(params.get("passwd"))) {
			int res = BoardMapper.deleteBoard(Integer.parseInt(params.get("num")));
		}
		return "redirect:list_board.do";
	}
	
}

'KDT - 풀스택 개발 과정 > MyBatis' 카테고리의 다른 글

[DAY_47] MyBatis - 회원관리  (0) 2024.05.30
index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!-- index.jsp -->

<html>
<head>
	<title>회원관리</title>
</head>
<body>
	<h1 align="center">스프링으로 공부하는 회원관리프로그램</h1>
	<ul><li>
		<h3><a href="index_member.do">회원관리 프로그램으로 가기</a></h3>
	</li></ul>
</body>
</html>
springMember-servlet.xml
<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd">

	<!-- Namespaces 탭에서 context체크 후 추가 -->
	<context:annotation-config/>


	<!-- viewResolver -->
	<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="prefix">
			<value>WEB-INF/member/</value>
		</property>
		<property name="suffix">
			<value>.jsp</value>
		</property>
	</bean>
    
    <!-- jdbcTemplate -->
	<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
		<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
		<property name="url" value="jdbc:oracle:thin:@localhost:1521:xe"/>
		<property name="username" value="fin02"/>
		<property name="password" value="fin02"/>
	</bean>
	
	
	<!-- jdbcTemplate에 dataSource 세팅 -->
	<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
		<property name="dataSource" ref="dataSource"/>
	</bean>
	
	
	<!-- dao에 jdbcTemplate 세팅  -->
	<bean id="memberDAO" class="member.dao.MemberDAOImpl">
		<property name="jdbcTemplate">
			<ref bean="jdbcTemplate"/>
		</property>
	</bean>
	
	<!-- Controller 클래스 등록 -->
	<bean class="member.MemberController"/>	
</beans>
MemberController.java
package member;

import java.util.List;
import java.util.Map;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;

import member.dao.MemberDAO;
import member.dto.MemberDTO;

@Controller // annotation
public class MemberController {
	
	// DB : BoardDAO 주입
	@Autowired // springMember-servlet.xml에 등록되어있는 여러 빈 중에 자동으로 가져와짐
	private MemberDAO memberDAO;
	
	// 메서드
	@RequestMapping("/index_member.do")
	public String IndexMember() {
		return "index_member";
	}
    	
}
index_member.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ include file="top.jsp"%>

<%@ include file="bottom.jsp"%>
bottom.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!-- bottom.jsp -->
</td>
		</tr>
		<tr height="10%">
			<td colspan="5" align="center"> 509호 핀테크반</td>
		</tr>
	</table>
	</div>
</body>
</html>
top.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!-- top.jsp -->
<html>
<head>
	<title>멤버관리</title>
	<link rel="stylesheet" type="text/css" href="style.css">
	<script type="text/javascript">
		function checkMember(){
			window.open("memberSsn.do", "check", "width=640, height=400")
		}
	</script>
</head>
<body>
	<div align="center">
	<table border="1" width="800" height="600">
		<tr height="10%">
			<th width="20%"><a href="javascript:checkMember()">회원가입</a></th>
			<th width="20%"><a href="memberAll.do">회원보기</a></th>
			<th width="20%"><a href="memberAll.do?mode=find">회원찾기</a></th>
			
			<c:if test="${empty sessionScope.mbId}"><!-- session에 mbID있어? -->
				<th width="20%"><a href="login.do">로그인</a></th>
			</c:if>
			<c:if test="${not empty sessionScope.mbId}"><!-- session에 mbID있어? -->
				<th width="20%"><a href="logout.do">로그아웃</a></th>
			</c:if>
			<th width="20%"><a href="index.do">메인페이지</a></th>
		</tr>
		<tr height="80%">
			<td colspan="5">

 

// 회원가입 여부 판단을 위한 입력 창(MemberSsn.do)

MemberController.java
@RequestMapping("/memberSsn.do")
	public String SSnMember() {
		return "memberSsn";
	}
memberSsn.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!-- memberSsn.jsp -->
<html>
<head>
	<title>회원가입유무</title>
	<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
	<div align="center">
		<hr color="green" width="300">
		<h2>회 원 가 입 유 무</h2>
		<hr color="green" width="300">
		<form name="f" action="checkMember.do" method="post">
			<table border="0" width="500" class="outline">
				<tr>
					<th>회원명</th>
					<td><input type="text" name="name" class="box"></td>
				</tr>
				<tr>
					<th>주민번호</th>
					<td><input type="text" name="ssn1" class="box">
					- <input type="password" name="ssn2" class="box"></td>
				</tr>
				<tr>
					<td colspan="2" align="center">
						<input type="submit" value="전송">
						<input type="reset" value="취소">
					</td>
				</tr>
			</table>
		</form>
	</div>
</body>
</html>

 

// 회원가입 여부 판단(checkMember.do)

MemberController.java
@RequestMapping("/checkMember.do")
	public String CheckMember(HttpServletRequest req, @RequestParam Map<String, String> params) {
		boolean isMember = memberDAO.checkMember(params);
		System.out.println(isMember);
		if(isMember) {
			req.setAttribute("msg", "회원가입되어 있습니다. 로그인해주세요.");
			return "forward:windowClose.jsp";
		}else {
			HttpSession session = req.getSession();
			session.setAttribute("name", params.get("name"));
			session.setAttribute("ssn1", params.get("ssn1"));
			session.setAttribute("ssn2", params.get("ssn2"));
			
			req.setAttribute("msg", "회원가입 페이지로 이동합니다.");
			req.setAttribute("url", "member_input.do");
			return "forward:message.jsp";
		}
	}

 

// 회원가입 폼(member_input.do - GET)

MemberController.java
@RequestMapping(value="/member_input.do", method=RequestMethod.GET)
	public String InputMember() {
		return "member_input";
	}
member_input.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<html>
	<head>
		<title>회원가입</title>
		<link rel="stylesheet" type="text/css" href="style.css">
		<script type="text/javascript">
			function check(){
				if (f.id.value==""){
					alert("아이디를 입력해 주세요")
					f.id.focus()
					return
				}
				if (f.passwd.value==""){
					alert("비밀번호를 입력해 주세요")
					f.passwd.focus()
					return
				}
				document.f.submit()	
			}
		</script>
	</head>
	<body onload="f.id.focus()">
		<form name="f" method="POST" action="member_input.do">
			<table width="600" align="center" class="outline">
  				<tr>
					<td colspan="2" align=center class="m2">회원가입</td>
 				</tr>
				<tr>
					<td width="150" class="m3">이름</td>
					<td class="m3">
						<input type="text" name="name" class="box" value="${name}" disabled>
						<input type="hidden" name="name" value="${name}"/>
					</td>
				</tr>
				<tr>
					<td width="150" class="m3">아이디</td>
					<td class="m3">
						<input type="text" name="id" class="box">
					</td>
  				</tr>
  				<tr>
					<td width="150" class="m3">비밀번호</td>
					<td class="m3">
						<input type="password" name="passwd" class="box">
					</td>
  				</tr>
  				<tr>
					<td width="150" class="m3">주민번호</td>
					<td class="m3">
						<input type="text" name="ssn1" class="box" value="${ssn1}" readOnly> -
				<input type="password" name="ssn2" class="box" value="${ssn2}" readOnly>
					</td>
  				</tr>
  				<tr>
					<td width="150" class="m3">이메일</td>
					<td class="m3">
						<input type="text" name="email" class="box">
					</td>
  				</tr>
  				<tr>
					<td width="150" class="m3">연락처</td>
					<td class="m3">
						<input type="text" name="hp1" class="box" size="3" maxlength="3"> -
						<input type="text" name="hp2" class="box" size="4" maxlength="4"> -
						<input type="text" name="hp3" class="box" size="4" maxlength="4">
					</td>
  				</tr>
  				<tr>
					<td colspan="2" align="center">
						<a href="javascript:check()">[전송]</a>
						<a href="#">[취소]</a>
					</td>
  				</tr>
  			</table>
		</form>
	</body>
</html>

 

// 회원가입 처리(member_input.do - POST)

MemberController.java
	@RequestMapping(value="/member_input.do", method=RequestMethod.POST)
	public String InputOkMember(HttpServletRequest req, @ModelAttribute MemberDTO dto) {
		int res = memberDAO.insertMember(dto);
		if(res>0) {
			req.setAttribute("msg", "회원 가입 성공!");
			return "forward:windowClose.jsp";
		} else {
			req.setAttribute("msg", "회원 가입 실패! 회원가입 페이지로 이동합니다.");
			req.setAttribute("url", "memberSsn.do");
			return "forward:message.jsp";
		}
	}

 

// 회원 보기(memberAll.do)

MemberController.java
@RequestMapping("/memberAll.do")
public String ListMember(HttpServletRequest req, @RequestParam(required=false) String mode, String search, String searchString) {
// required=false : 만약 해당 파라미터값이 없으면 무시하고 넘어가라고 설정
// 이거 안쓰고 아래 코드에서 if (mode=null)이면 처리를 추가해도 상관없음
    List<MemberDTO> list = null;		
    if (mode != null) {
        if (search != null && searchString != null) {
            list = memberDAO.findMember(search, searchString);
        }
    } else {
        list = memberDAO.listMember();
    }
    req.setAttribute("listMember", list);
    return "memberAll";
}
meberAll.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!-- memberAll.jsp -->
<%@ include file="top.jsp"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<div align="center">
	<hr color="green" width="300">
	<c:if test="${empty param.mode}">
		<h2>회 원 목 록 페 이 지</h2>
	</c:if>	
	<c:if test="${not empty param.mode}">
		<h2>회 원 찾 기</h2>
		<form name="f" action="memberAll.do" method="post">
			<input type="hidden" name="mode" value="${param.mode}"/>
			<select name="search">
				<option value="name">회원명</option>
				<option value="id">아이디</option>
			</select>
			<input type="text" name="searchString">
			<input type="submit" value="찾기">
		</form>
	</c:if>
	<hr color="green" width="300">
	<table border="0" width="100%" class="outline">
		<tr>
			<th class="m1">번호</th>
			<th class="m1">이름</th>
			<th class="m1">아이디</th>
			<th class="m1">이메일</th>
			<th class="m1">전화번호</th>
			<th class="m1">가입일</th>
			<th class="m1">수정 | 삭제</th>
		</tr>
	<c:if test="${empty listMember}">
		<tr>
			<td colspan="7">등록된(찾으시는) 회원이 없습니다.</td>
		</tr>
	</c:if>	
	<c:forEach var="dto" items="${listMember}">
		<tr>
			<td align="center">${dto.no}	</td>
			<td align="center">${dto.name}</td>
			<td align="center">${dto.id}</td>
			<td align="center">${dto.email}</td>
			<td align="center">${dto.allHp}</td>
			<td align="center">${dto.joindate}</td>
			<td align="center">
				<a href="member_update.do?no=${dto.no}">수정</a> | 
				<a href="member_delete.do?no=${dto.no}">삭제</a>
			</td>
		</tr>
	</c:forEach>			
	</table>
</div>
<%@ include file="bottom.jsp"%>

 

// 삭제(member_delete.do)

MemberController.java
@RequestMapping("/member_delete.do")
public String DeleteMember(HttpServletRequest req, String no) {
    int res = memberDAO.deleteMember(Integer.parseInt(no));
    if(res>0) {
        req.setAttribute("msg", "회원 삭제 성공! 회원 목록 페이지로 이동합니다.");
        req.setAttribute("url", "memberAll.do");
        return "forward:message.jsp";
    } else {
        req.setAttribute("msg", "회원 삭제 실패! 회원 목록 페이지로 이동합니다.");
        req.setAttribute("url", "memberAll.do");
        return "forward:message.jsp";
    }
}

 

// 수정(member_update.do)

MemberController.java
@RequestMapping(value="/member_update.do", method=RequestMethod.GET)
public String UpdateMember(HttpServletRequest req, @RequestParam int no) {
    MemberDTO dto = memberDAO.getMember(no);
    req.setAttribute("getMember", dto);
    return "member_update";
}
member_update.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!-- member_update.jsp -->
<%@ include file="top.jsp"%>
<link rel="stylesheet" type="text/css" href="style.css"> 
<script type="text/javascript">
	function check(){
		if (f.passwd.value == ""){
			alert("비밀번호를 입력해 주세요!!")
			f.passwd.focus()
			return false
		}	
		document.f.submit()
	}	
</script>
	<form name="f" method="POST" action="member_update.do">
		<input type="hidden" name="no" value="${getMember.no}"/>
		<table width="600" align="center" class="outline">
 			<tr>
				<td colspan="2" align=center class="m2">회원수정</td>
				</tr>
			<tr>
				<td width="150" class="m3">이름</td>
				<td class="m3">
					<input type="text" name="name" class="box" value="${getMember.name}" disabled>
					<input type="hidden" name="name" value="${getMember.name}"/>
				</td>
			</tr>
			<tr>
				<td width="150" class="m3">아이디</td>
				<td class="m3">
					<input type="text" name="id" class="box" value="${getMember.id}" readOnly>
				</td>
 				</tr>
 				<tr>
				<td width="150" class="m3">비밀번호</td>
				<td class="m3">
					<input type="password" name="passwd" class="box" value="${getMember.passwd}">
				</td>
 				</tr>
 				<tr>
				<td width="150" class="m3">주민번호</td>
				<td class="m3">
					<input type="text" name="ssn1" class="box" value="${getMember.ssn1}" readOnly> -
			<input type="password" name="ssn2" class="box" value="${getMember.ssn2}" readOnly>
				</td>
 				</tr>
 				<tr>
				<td width="150" class="m3">이메일</td>
				<td class="m3">
					<input type="text" name="email" class="box" value="${getMember.email}">
				</td>
 				</tr>
 				<tr>
				<td width="150" class="m3">연락처</td>
				<td class="m3">
					<input type="text" name="hp1" class="box" size="3" maxlength="3" value="${getMember.hp1}"> -
					<input type="text" name="hp2" class="box" size="4" maxlength="4" value="${getMember.hp2}"> -
					<input type="text" name="hp3" class="box" size="4" maxlength="4" value="${getMember.hp3}">
				</td>
 				</tr>
 				<tr>
				<td colspan="2" align="center">
					<a href="javascript:check()">[수정]</a>
					<a href="#">[취소]</a>
				</td>
 				</tr>
 			</table>
	</form>
<%@ include file="bottom.jsp"%>
MemberController.java
@RequestMapping(value="/member_update.do", method=RequestMethod.POST)
public String UpdateOkMember(HttpServletRequest req, @ModelAttribute MemberDTO dto) {
    int res = memberDAO.updateMember(dto);
    if(res>0) {
        req.setAttribute("msg", "회원 수정 성공! 회원 목록 페이지로 이동합니다.");
        req.setAttribute("url", "memberAll.do");
        return "forward:message.jsp";
    } else {
        req.setAttribute("msg", "회원 수정 실패! 회원 목록 페이지로 이동합니다.");
        req.setAttribute("url", "memberAll.do");
        return "forward:message.jsp";
    }
}

 

// 로그인 화면 (login.do) - GET 

MemberController.java
@RequestMapping(value="/login.do", method=RequestMethod.GET)
public String LoginMember() {
    return "login";
}
login.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ include file="../member/top.jsp"%>
<!-- login.jsp-->
<link rel="stylesheet" type="text/css" href="style.css">
<script type="text/javascript">
	function checkMember(){
		window.open("memberSsn.do", "check", "width=640, height=400")
	}
	function searchMember(mode){
		window.open("searchMember.do?mode="+mode, "search", "width=650, height=400")
	}
	function loginCheck(){
		if (f.id.value==""){
			alert("아이디를 입력해 주세요!!")
			f.id.focus()
			return
		}
		if (f.passwd.value==""){
			alert("비밀번호를 입력해 주세요!!")
			f.passwd.focus()
			return
		}
		document.f.submit()
	}
</script>
<div align="center">
<br>
<img src="img/bottom.gif" width=570 height="40" border="0" alt="">
<br>
<p>
<img src="img/tm_login.gif" width=100 height="13" border="0" align="center" ALT="회원 로그인">
<form name="f" action="login.do" method="post">
	<table width="60%" align="center" height="120">
		<tr>
			<td align="right" width="30%">
				<img src="img/id01.gif" 
				width="28" height="11" border="0" alt="아이디">&nbsp;&nbsp;
			</td>
			<td width="40%">
			<c:if test="${empty cookie['saveId']}">
			<!-- cookie라는 객체안에 savID라는 이름이 있나? -->
				<input type="text" name="id" tabindex="1">
			</c:if>	
			<c:if test="${not empty cookie['saveId']}">
				<input type="text" name="id" tabindex="1" value="${cookie['saveId'].value}">
				<!-- cookie라는 객체의 savID의 value를 가져옴(name이나 value 중에 가져옴) -->
				<!-- cookie.saveId.value로 해도 동일함 -->
			</c:if>
			</td>
			<td rowspan="2" width="30%" valign="middle">
				<a href="javascript:loginCheck()">
					<img src="img/bt_login.gif" border="0" alt="로그인"  tabindex="3">&nbsp;&nbsp;<br>
				</a>
				<nobr>
		<c:if test="${empty cookie['saveId']}">				
					<input type="checkbox" name="saveId">
		</c:if>
		<c:if test="${not empty cookie['saveId']}">
					<input type="checkbox" name="saveId" checked>
		</c:if>				
					<font face="굴림" size="2">아이디 기억하기</font>
				</nobr>
			</td>
		</tr>
		<tr>
			<td align="right">
				<img src="img/pwd.gif" 
							width="37" height="11" alt="비밀번호">
			</td>
			<td>
				<input type="password" name="passwd"  tabindex="2">
			</td>
		</tr>
		<tr>
			<td colspan="3" align="center">
				<a href="javascript:checkMember()">
					<img src="img/bt_join.gif" width="60" height="22" alt="회원가입">
				</a>	
				<a href="javascript:searchMember('id')">
 					<img src="img/bt_search_id.gif" width="60" height="22" alt="아이디 찾기">
 				</a>
 				<a href="javascript:searchMember('pw')">
					<img src="img/bt_search_pw.gif" width="60" height="22" alt="비밀번호 찾기">
				</a>				
			</td>
		</tr>
	</table>
</form> 
</div>
<%@ include file="../member/bottom.jsp"%>

 

// 로그인 처리 (login.do) - POST 

MemberController.java
@RequestMapping(value="/login.do", method=RequestMethod.POST)
public String LoginOkMember(HttpServletRequest req, HttpServletResponse resp, @RequestParam Map<String, String> params) {
    int res = memberDAO.loginCheck(params.get("id"), params.get("passwd"));
    switch(res) {
        case MemberDAO.OK :
            MemberDTO dto = memberDAO.getMember(params.get("id"));							
            Cookie ck = new Cookie("saveId", params.get("id"));
            if (params.get("saveId") == null) {
                ck.setMaxAge(0);
            }else {
                ck.setMaxAge(24*60*60);
            }
            resp.addCookie(ck);				
            HttpSession session = req.getSession();
            session.setAttribute("mbId", dto);	
            req.setAttribute("msg", dto.getName()+"님이 로그인 하셨습니다.");
            req.setAttribute("url", "index_member.do");
            break;
        case MemberDAO.NOT_ID :
            req.setAttribute("msg", "없는 아이디 입니다. 다시 확인 후 로그인을 해 주세요");
            req.setAttribute("url", "login.do");
            break;
        case MemberDAO.NOT_PW :
            req.setAttribute("msg", "비밀번호가 틀렸습니다. 다시 확인 후 로그인을 해 주세요");
            req.setAttribute("url", "login.do");
            break;
    }

    return "forward:message.jsp";
}

 

// 로그아웃 (logout.do)

MemberController.java
@RequestMapping("/logout.do")
public ModelAndView LogoutMember(HttpServletRequest req) {
    HttpSession session = req.getSession();
    session.invalidate();
    ModelAndView mav = new ModelAndView("forward:message.jsp");
    mav.addObject("msg", "로그아웃 완료");
    mav.addObject("url", "index_member.do");
    return mav;
}

+ Recent posts