MyBatis + MVC 실습 (7) : 회원수정/회원탈퇴(소스코드만 정리)
부트캠프(END)/-Web 실습2022. 8. 12. 11:45
로그인 처리
member-mapper.xml
<!-- 로그인 처리(ID 존재여부 확인) -->
<select id="memberIdCount" resultType="int" parameterType="String">
SELECT COUNT(*)
FROM project_member
WHERE id=#{id}
</select>
<!-- 로그인 처리(비밀번호 확인) -->
<select id="memberInfoData" resultType="MemberVO" parameterType="String">
SELECT pwd, id, name, admin
FROM project_member
WHERE id=#{id}
</select>
MemberDAO.java(Class)
package doo.doo.dao;
import doo.doo.vo.*;
import java.io.*;
import java.util.*;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class MemberDAO {
private static SqlSessionFactory ssf;
static {
try {
Reader reader = Resources.getResourceAsReader("Config.xml");
ssf = new SqlSessionFactoryBuilder().build(reader);
} catch (Exception ex) {
ex.printStackTrace();
}
}
public static MemberVO isLogin(String id, String pwd) {
MemberVO vo = new MemberVO();
SqlSession session = null;
try {
session = ssf.openSession();
int count = session.selectOne("memberIdCount", id);
if (count == 0) {
vo.setMsg("NOID");
} else {
vo = session.selectOne("memberInfoData", id);
if (pwd.equals(vo.getPwd())) {
vo.setMsg("OK");
} else {
vo.setMsg("NOPWD");
}
}
} catch (Exception ex) {
ex.printStackTrace();
} finally {
if (session != null)
session.close();
}
return vo;
}
}
MemberModel.java(Class)
//화면 출력만 해줌
@RequestMapping("member/login.do")
public String member_login(HttpServletRequest request, HttpServletResponse response) {
return "../member/login.jsp";
//main에 출력하는거 아님! shadowBox에 올릴것임. -> shadowBox 안에서 처리를 해야 한다.
}
@RequestMapping("member/login_ok.do")
public String member_login_ok(HttpServletRequest request, HttpServletResponse response) {
//사용자 요청값을 받아온다.
String id = request.getParameter("id");
String pwd = request.getParameter("pwd");
//DAO연동 -> mapper로 SQL 만들어놓고 DAO에서 메서드 처리
MemberVO vo = MemberDAO.isLogin(id, pwd);
String result = vo.getMsg();
if (result.equals("OK")) {
HttpSession session = request.getSession(); //세션에 저장해야 로그인 유지가 가능함
session.setAttribute("id", vo.getId());
session.setAttribute("name", vo.getName());
session.setAttribute("admin", vo.getAdmin());
}
request.setAttribute("result", result);
return "../member/login_ok.jsp"; //ajax에서 읽어갈것임
}
@RequestMapping("member/logout.do")
public String member_logout(HttpServletRequest request, HttpServletResponse response) {
HttpSession session = request.getSession();
session.invalidate(); //session에 저장된 모든 데이터를 지운다.
return "redirect:../main/main.do";
}
login.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Login</title>
<link href="https://fonts.googleapis.com/css?family=Asap" rel="stylesheet">
<link rel="stylesheet" href="./style.css">
<script type="text/javascript" src="http://code.jquery.com/jquery.js"></script>
<script type="text/javascript">
$(function(){
$('#logBtn').on("click",function(){
let id=$('#id').val();
if(id.trim()==""){
$('#id').focus();
return;
}
let pwd=$('#pwd').val();
if(pwd.trim()==""){
$('#pwd').focus();
return;
}
//서버로 전송
$.ajax({
type:'post',
url:'../member/login_ok.do',
data:{"id":id,"pwd":pwd},
success:function(result){
let res=result.trim();
if(res==='NOID'){
//ID가 없습니다.
alert("ID 업슴!");
$('#id').val("");
$('#pwd').val("");
$('#id').focus();
}else if(res==='NOPWD'){
//비밀번호가 틀립니다.
alert("비번틀림!");
$('#pwd').val("");
$('#pwd').focus();
}else{
//정상 수행
parent.location.href="../main/main.do";
}
}
})
})
})
</script>
</head>
<body>
<!-- partial:index.partial.html -->
<form class="login">
<input type="text" placeholder="ID" id="id">
<input type="password" placeholder="Password" id="pwd">
<input type=button value="로그인" id="logBtn" class="button">
</form>
</body>
</html>
login_ok.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
${result}
회원 수정
member-mapper.xml
<!-- 회원 수정-회원 정보 읽기 -->
<select id="memberDetailData" resultType="MemberVO" parameterType="String">
SELECT * FROM project_member
WHERE id=#{id}
</select>
<!-- 회원 수정 - UPDATE -->
<update id="memberUpdate" parameterType="MemberVO">
UPDATE project_member SET
name=#{name}, sex=#{sex}, email=#{email}, addr1=#{addr1}, addr2=#{addr2},
tel=#{tel}, content=#{content}
WHERE id = #{id}
</update>
MemberDAO.java(Class)
//회원수정시 회원상세정보 가져오기
public static MemberVO memberDetailData(String id) {
MemberVO vo = new MemberVO();
SqlSession session = null;
try {
session = ssf.openSession();
vo = session.selectOne("memberDetailData", id);
} catch (Exception ex) {
ex.printStackTrace();
} finally {
if (session != null)
session.close();
}
return vo;
}
//회원수정시 비밀번호 확인 후 업데이트
public static boolean memberUpdate(MemberVO vo) {
boolean bCheck = false;
SqlSession session = null;
try {
session = ssf.openSession();
MemberVO pvo = session.selectOne("memberDetailData", vo.getId());
if (pvo.getPwd().equals(vo.getPwd())) {
bCheck = true;
session.update("memberUpdate", vo);
session.commit();
} else {
bCheck = false;
}
} catch (Exception ex) {
ex.printStackTrace();
} finally {
if (session != null)
session.close();
}
return bCheck;
}
MyPageModel.java(Class)
package doo.doo.model;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import doo.doo.dao.MemberDAO;
import doo.doo.vo.MemberVO;
import controller.Controller;
import controller.RequestMapping;
@Controller
public class MyPageModel {
@RequestMapping("mypage/mypage.do")
public String mypage_main(HttpServletRequest request, HttpServletResponse response) {
request.setAttribute("main_jsp", "../mypage/mypage.jsp");
return "../main/main.jsp";
}
@RequestMapping("member/join_update.do")
public String member_join_update(HttpServletRequest request, HttpServletResponse response) {
HttpSession session = request.getSession();
String id = (String) session.getAttribute("id");
MemberVO vo = MemberDAO.memberDetailData(id);
String tel = vo.getTel();
tel = tel.substring(tel.indexOf("-") + 1);
vo.setTel(tel);
request.setAttribute("vo", vo);
request.setAttribute("mypage_jsp", "../member/join_update.jsp");
request.setAttribute("main_jsp", "../mypage/mypage.jsp");
return "../main/main.jsp";
}
@RequestMapping("member/join_update_ok.do")
public String member_join_update_ok(HttpServletRequest request, HttpServletResponse response) {
//사용자 전송값 받기
try {
request.setCharacterEncoding("UTF-8");
} catch (Exception ex) {
ex.printStackTrace();
}
String id = request.getParameter("id");
String pwd = request.getParameter("pwd");
String name = request.getParameter("name");
String sex = request.getParameter("sex");
// String birthday=request.getParameter("birthday");
String email = request.getParameter("email");
String post = request.getParameter("post");
String addr1 = request.getParameter("addr1");
String addr2 = request.getParameter("addr2");
String tel1 = request.getParameter("tel1");
String tel2 = request.getParameter("tel2");
String content = request.getParameter("content");
MemberVO vo = new MemberVO();
vo.setId(id);
vo.setPwd(pwd);
vo.setName(name);
vo.setSex(sex);
// vo.setBirthday(birthday);
vo.setEmail(email);
vo.setPost(post);
vo.setAddr1(addr1);
vo.setAddr2(addr2);
vo.setTel(tel1 + "-" + tel2);
vo.setContent(content);
//수정처리 요청
boolean bCheck = MemberDAO.memberUpdate(vo);
if (bCheck == true) {
HttpSession session = request.getSession();
session.setAttribute("name", vo.getName());
}
request.setAttribute("bCheck", bCheck);
return "../member/join_update_ok.jsp";
}
}
join_update.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>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
<script type="text/javascript" src="//t1.daumcdn.net/mapjsapi/bundle/postcode/prod/postcode.v2.js"></script>
<script type="text/javascript">
$(function(){
$('#postBtn').click(function(){
// 우편번호 검색 처리
new daum.Postcode({
oncomplete:function(data)
{
$('#post').val(data.zonecode)
$('#addr1').val(data.address)
}
}).open()
})
//유효성 검사!
/*$('#joinBtn').click(function(){
})*/
$('#eBtn').click(function(){
let email=$('#email').val();
if(email.trim()==""){
$('#email').focus();
$('#ePrint').text("이메일을 입력하세요~");
return;
}
$.ajax({
type:'post',
url:'../member/emailcheck_ok.do',
data:{"email":email},
success:function(result){
console.log(result);
let count=parseInt(result.trim());
if(count==0){
$('#ePrint').text("사용가능한 이메일입니다.");
$('#email').attr('disable','true');
}else{
$('#ePrint').text("사용중인 이메일입니다.");
$('#email').val("");
$('#email').focus();
}
}
})
})
$('#tBtn').click(function(){
let tel=$('#tel2').val();
if(tel.trim()==""){
$('#tel2').focus();
$('#tPrint').text("전화번호를 입력하세요.");
return;
}
$.ajax({
type:'post',
url:'../member/tel_check.do',
data:{"tel":"010-"+tel},
success:function(result){
console.log(result);
let count=parseInt(result.trim());
if(count==0){
$('#tPrint').text("사용가능한 전화번호입니다.");
$('#tel').attr('disable','true');
}else{
$('#tPrint').text("사용중인 전화번호입니다.");
$('#tel').val("");
$('#tel').focus();
}
}
})
})
$('#joinBtn').click(function(){
//체크는 끝났다는 가정 하에 진행
$('#join_frm').submit();
})
})
</script>
</head>
<body>
<h2 class="sectiontitle">회원수정</h2>
<form method="post" action="../member/join_update_ok.do" name="join_frm" id="join_frm">
<table class="table">
<tr>
<th class="text-right" width=15%>아이디</th>
<td width=85% class="inline">
<input type=text name=id id="join_id" size=30 class="input-sm" readonly value="${vo.id}">
</td>
</tr>
<tr>
<th class="text-right" width=15%>비밀번호</th>
<td width=85% class="inline">
<input type=password name=pwd id=join_pwd size=30 class="input-sm">
</td>
</tr>
<tr>
<th class="text-right" width=15%>이름</th>
<td width=85%>
<input type=text name=name id=name size=30 class="input-sm" value="${vo.name }">
</td>
</tr>
<tr>
<th class="text-right" width=15%>성별</th>
<td width=85% class="inline">
<input type=radio value="남자" name=sex ${vo.sex=='남자'?"checked":"" }>남자
<input type=radio value="남자" name=sex ${vo.sex=='여자'?"checked":"" }>여자
</td>
</tr>
<tr>
<th class="text-right" width=15%>이메일</th>
<td width=85% class="inline">
<input type=text name=email id=email size=70 class="input-sm" value="${vo.email }">
<input type=button id="eBtn" class="btn btn-sm btn-success" value="이메일 확인">
<span style="color:blue;" id="ePrint"></span>
</td>
</tr>
<tr>
<th class="text-right" width=15%>우편번호</th>
<td width=85% class='inline'>
<input type=text name=post id=post size=30 class="input-sm" readonly value=${vo.post }>
<input type=button id="postBtn" value="우편번호찾기"
class="btn btn-sm btn-danger">
</td>
</tr>
<tr>
<th class="text-right" width=15%>주소</th>
<td width=85%>
<input type=text name=addr1 id=addr1 size=95 class="input-sm" readonly value=${vo.addr1 }>
</td>
</tr>
<tr>
<th class="text-right" width=15%>상세주소</th>
<td width=85%>
<input type=text name=addr2 id=addr2 size=95 class="input-sm" value=${vo.addr2 }>
</td>
</tr>
<tr>
<th class="text-right" width=15%>전화번호</th>
<td width=85% class="inline">
<input type=text name=tel1 id=tel1 size=15 class="input-sm" value="010">
<input type=text name=tel2 id=tel2 size=30 class="input-sm" value=${vo.tel }>
<input type=button id="tBtn" class="btn btn-sm btn-info" value="전화 확인">
<span style="color:blue;" id="tPrint"></span>
</td>
</tr>
<tr>
<th class="text-right" width=15%>소개</th>
<td width=85%>
<textarea rows="10" cols="100" id="content" name="content">${vo.content }</textarea>
</td>
</tr>
<tr>
<td colspan="2" class="text-center">
<input type=button class="btn btn-sm btn-primary" value="회원수정" id="joinBtn">
<input type=button class="btn btn-sm btn-danger" value="취소" onclick="javascript:history.back()">
</td>
</tr>
</table>
</form>
</body>
</html>
join_update_ok.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<c:choose>
<c:when test="${bCheck==true }">
<c:redirect url="../mypage/mypage.do"/>
</c:when>
<c:otherwise>
<script>
alert("비밀번호가 틀립니다");
history.back();
</script>
</c:otherwise>
</c:choose>
회원 탈퇴
member-mapper.xml
<!-- 회원 탈퇴 -->
<delete id="memberDelete" parameterType="String">
DELETE FROM project_member
WHERE id=#{id}
</delete>
MemberDAO.java(Class)
//회원탈퇴
public static boolean memberDelete(String id, String pwd) {
boolean bCheck = false;
SqlSession session = null;
try {
session = ssf.openSession();
MemberVO pvo = session.selectOne("memberInfoData", id);
if (pvo.getPwd().equals(pwd)) {
bCheck = true;
session.delete("memberDelete", id);
session.commit();
} else {
bCheck = false;
}
} catch (Exception ex) {
ex.printStackTrace();
} finally {
if (session != null)
session.close();
}
return bCheck;
}
MyPageModel.java(Class)
@RequestMapping("member/join_delete.do")
public String member_join_delete(HttpServletRequest request, HttpServletResponse response) {
request.setAttribute("mypage_jsp", "../member/join_delete.jsp");
request.setAttribute("main_jsp", "../mypage/mypage.jsp");
return "../main/main.jsp";
}
@RequestMapping("member/join_delete_ok.do")
public String member_join_delete_ok(HttpServletRequest request, HttpServletResponse response) {
HttpSession session = request.getSession();
String id = (String) session.getAttribute("id");
String pwd = request.getParameter("pwd");
boolean bCheck = MemberDAO.memberDelete(id, pwd);
if (bCheck == true) {
session.invalidate(); //로그아웃처리
}
request.setAttribute("bCheck", bCheck);
return "../member/join_delete_ok.jsp";
}
join_delete.jsp
<%@ 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>
<style type="text/css">
.t{
width:350px;
}
</style>
<script type="text/javascript" src="http://code.jquery.com/jquery.js"></script>
<script type="text/javascript">
$(function(){
$('#delBtn').click(function(){
let pwd = $('#join_pwd').val();
if(pwd.trim()==""){
$('#join_pwd').focus();
return;
}
$('#join_frm').submit();
})
})
</script>
</head>
<body>
<h2 class="sectiontitle">회원수정</h2>
<form method="post" action="../member/join_delete_ok.do" name="join_frm" id="join_frm">
<table class="table t">
<tr>
<th class="text-right" width=15%>비밀번호</th>
<td width=85% class="text-center">
<input type=password name=pwd id="join_pwd" size=30 class="input-sm">
</td>
</tr>
<tr>
<td colspan="2" class="text-center">
<input type="button" value="회원탈퇴" class="btn btn-sm btn-primary" id="delBtn">
<input type="button" value="취소" class="btn btn-sm btn-danger" onclick="javscript:history.back()">
</td>
</tr>
</table>
</form>
</body>
</html>
join_delete_ok.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<c:choose>
<c:when test="${bCheck==true }">
<c:redirect url="../main/main.do"/>
</c:when>
<c:otherwise>
<script>
alert("비밀번호가 틀립니다");
history.back();
</script>
</c:otherwise>
</c:choose>
'부트캠프(END) > -Web 실습' 카테고리의 다른 글
MyBatis + MVC 실습 (8) : 묻고답하기 게시판(소스코드만 정리) (0) | 2022.08.16 |
---|---|
JSP로 달력 만들기(코드 참고용) (0) | 2022.08.11 |
MyBatis + MVC 실습 (6) : 검색 기능 (0) | 2022.08.08 |
댓글()