반응형
01. 회원가입 페이지 (member > member_join.jsp) - 입력
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
//<%-- 사용자로부터 회원정보를 입력받기 위한 JSP 문서 --%>
//<%-- => [회원가입]을 클릭한 경우 회원정보 삽입페이지(member_join_action.jsp)로 이동 - 입력값 전달 --%>
//<%-- => [아이디 중복 검사]를 클릭한 경우 팝업창을 실행하여 아이디 중복 검사페이지(id_check.jsp)를 요청 - 아이디 전달 --%>
//<%-- => [우편번호 검색]를 클릭한 경우 팝업창을 실행하여 우편번호 검색페이지(post_search.jsp)를 요청 --%>
<style type="text/css">
fieldset { text-align: left; margin: 10px auto; width: 1100px; }
legend { font-size: 1.2em; }
#join label { width: 150px; text-align: right; float: left; margin-right: 10px; }
#join ul li { list-style-type: none; margin: 15px 0; }
#fs { text-align: center; }
.error { color: red; position: relative; left: 160px; display: none; }
#idCheck, #postSearch { font-size: 12px; font-weight: bold; cursor: pointer; margin-left: 10px; padding: 2px 10px; border: 1px solid black; }
#idCheck:hover, #postSearch:hover { background: aqua; }
</style>
<!--클라가 폼태그를 통해 index.jsp 요청 하면 실제처리는 work과 workgroup으로 만들어진 JSP 문서가 함 -->
<!--클라가 폼태그를 통해 index.jsp 요청 하면 실제처리는 member폴더명 밑 member_join_action.jsp가 처리 -->
<form id="join" action="index.jsp?workgroup=member&work=member_join_action" method="post">
<!--
<%-- 아이디 사용 여부를 구분하기 위한 값을 저장하는 입력태그 --%>
<%-- => 0 : 아이디 중복검사 미실행 - 아이디 사용 불가능 --%>
<%-- => 1 : 아이디 중복검사 실행 - 아이디 사용 가능 --%>
-->
<input type="hidden" id="idCheckResult" value="0">
<fieldset>
<legend>회원가입 정보</legend>
<ul>
<li>
<label for="id">아이디</label>
<input type="text" name="id" id="id"><span id="idCheck">아이디 중복 검사</span>
<div id="idMsg" class="error">아이디를 입력해 주세요.</div>
<div id="idRegMsg" class="error">아이디는 영문자로 시작되는 영문자,숫자,_의 6~20범위의 문자로만 작성 가능합니다.</div>
<div id="idCheckMsg" class="error">아이디 중복 검사를 반드시 실행해 주세요.</div>
</li>
<li>
<label for="passwd">비밀번호</label>
<input type="password" name="passwd" id="passwd">
<div id="passwdMsg" class="error">비밀번호를 입력해 주세요.</div>
<div id="passwdRegMsg" class="error">비밀번호는 영문자,숫자,특수문자가 반드시 하나이상 포함된 6~20 범위의 문자로만 작성 가능합니다.</div>
</li>
<li>
<label for="passwd">비밀번호 확인</label>
<input type="password" name="repasswd" id="repasswd">
<div id="repasswdMsg" class="error">비밀번호 확인을 입력해 주세요.</div>
<div id="repasswdMatchMsg" class="error">비밀번호와 비밀번호 확인이 서로 맞지 않습니다.</div>
</li>
<li>
<label for="name">이름</label>
<input type="text" name="name" id="name">
<div id="nameMsg" class="error">이름을 입력해 주세요.</div>
</li>
<li>
<label for="email">이메일</label>
<input type="text" name="email" id="email">
<div id="emailMsg" class="error">이메일을 입력해 주세요.</div>
<div id="emailRegMsg" class="error">입력한 이메일이 형식에 맞지 않습니다.</div>
</li>
<li>
<label for="mobile">전화번호</label>
<select name="mobile1">
<option value="010" selected> 010 </option>
<option value="011"> 011 </option>
<option value="016"> 016 </option>
<option value="017"> 017 </option>
<option value="018"> 018 </option>
<option value="019"> 019 </option>
</select>
- <input type="text" name="mobile2" id="mobile2" size="4" maxlength="4">
- <input type="text" name="mobile3" id="mobile3" size="4" maxlength="4">
<div id="mobileMsg" class="error">전화번호를 입력해 입력해 주세요.</div>
<div id="mobileRegMsg" class="error">전화번호는 3~4 자리의 숫자로만 입력해 주세요.</div>
</li>
<li>
<label>우편번호</label>
<input type="text" name="zipcode" id="zipcode" size="7" readonly="readonly">
<span id="postSearch">우편번호 검색</span>
<div id="zipcodeMsg" class="error">우편번호를 입력해 주세요.</div>
</li>
<li>
<label for="address1">기본주소</label>
<input type="text" name="address1" id="address1" size="50" readonly="readonly">
<div id="address1Msg" class="error">기본주소를 입력해 주세요.</div>
</li>
<li>
<label for="address2">상세주소</label>
<input type="text" name="address2" id="address2" size="50">
<div id="address2Msg" class="error">상세주소를 입력해 주세요.</div>
</li>
</ul>
</fieldset>
<div id="fs">
<button type="submit">회원가입</button>
<button type="reset">다시입력</button>
</div>
</form>
<script type="text/javascript">
- $("#join").submit 이벤트 발생 함수
$("#id").focus();
//1.
//[회원가입]을 클릭한 경우 submit이벤트가 발생되어 회원정보 삽입페이지(member_join_action.jsp)로 이동
//=> 입력값 전달
$("#join").submit(function() {
var submitResult=true; //폼이벤트 발생 유무 판단하기 위한 변수
$(".error").css("display","none"); //에러메세지 기본적으로 안보이게
var idReg=/^[a-zA-Z]\\w{5,19}$/g;
if($("#id").val()=="") {//입력값이 없는 경우
$("#idMsg").css("display","block");
submitResult=false;
} else if(!idReg.test($("#id").val())) {//입력값이 형식에 맞지 않는 경우
$("#idRegMsg").css("display","block");
submitResult=false;
} else if($("#idCheckResult").val()=="0") { //아이디 중복 검사를 실행하지 않은 경우
$("#idCheckMsg").css("display","block");
submitResult=false;
}
var passwdReg=/^(?=.*[a-zA-Z])(?=.*[0-9])(?=.*[~!@#$%^&*_-]).{6,20}$/g;
if($("#passwd").val()=="") {//입력값이 없는 경우
$("#passwdMsg").css("display","block");
submitResult=false;
} else if(!passwdReg.test($("#passwd").val())) {//입력값이 형식에 맞지 않는 경우
$("#passwdRegMsg").css("display","block");
submitResult=false;
}
if($("#repasswd").val()=="") {//입력값이 없는 경우
$("#repasswdMsg").css("display","block");
submitResult=false;
} else if($("#passwd").val()!=$("#repasswd").val()) {//repasswd입력값과 passwd입력값이 다른 경우
$("#repasswdMatchMsg").css("display","block");
submitResult=false;
}
if($("#name").val()=="") {//입력값이 없는 경우
$("#nameMsg").css("display","block");
submitResult=false;
}
var emailReg=/^([a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+(\\.[-a-zA-Z0-9]+)+)*$/g;
if($("#email").val()=="") {//입력값이 없는 경우
$("#emailMsg").css("display","block");
submitResult=false;
} else if(!emailReg.test($("#email").val())) {//입력값이 형식에 맞지 않는 경우
$("#emailRegMsg").css("display","block");
submitResult=false;
}
var mobile2Reg=/\\d{3,4}/;
var mobile3Reg=/\\d{4}/;
if($("#mobile2").val()=="" || $("#mobile3").val()=="") {//입력값이 없는 경우
$("#mobileMsg").css("display","block");
submitResult=false;
} else if(!mobile2Reg.test($("#mobile2").val()) || !mobile3Reg.test($("#mobile3").val())) {//입력값이 형식에 맞지 않는 경우
$("#mobileRegMsg").css("display","block");
submitResult=false;
}
if($("#zipcode").val()=="") {//입력값이 없는 경우
$("#zipcodeMsg").css("display","block");
submitResult=false;
}
if($("#address1").val()=="") {//입력값이 없는 경우
$("#address1Msg").css("display","block");
submitResult=false;
}
if($("#address2").val()=="") {//입력값이 없는 경우
$("#address2Msg").css("display","block");
submitResult=false;
}
return submitResult; //[false] 반환 - 폼이벤트 발생 중지
});
- $("#idCheck").click 이벤트 발생 함수
//2.
//[아이디 중복 검사]를 클릭한 경우 팝업창을 실행하여 아이디 중복 검사페이지(id_check.jsp)를 요청
//=> 아이디 전달
$("#idCheck").click(function() {
//아이디 관련 에러메세지가 보여지지 않도록 설정
$("#idMsg").css("display","none");
$("#idRegMsg").css("display","none");
//아이디 입력값이 없거나, 아이디 형식이 틀리면 [아이디 중복 검사] 못하고 바로 메소드 종료
var idReg=/^[a-zA-Z]\\w{5,19}$/g;
if($("#id").val()=="") {//입력값이 없는 경우
$("#idMsg").css("display","block");
return;
} else if(!idReg.test($("#id").val())) {//입력값이 형식에 맞지 않는 경우
$("#idRegMsg").css("display","block");
return;
}
//팝업창 실행하여 아이디 중복 검사 페이지(id_check.jsp) 요청 - 아이디 전달
//클라가 [index.jsp]에게 요청하는 것이 아닌 [id_check.jsp]에게 직접 요청
window.open("<%=request.getContextPath()%>/member/id_check.jsp?id="+$("#id").val()
,"idcheck","width=450,height=150,left=700,top=400");
});
- $("#id").change 이벤트 발생 함수
//3.
//입력태그(아이디)의 "입력값이 변경된 경우" 호출될 이벤트 처리 함수 등록
$("#id").change(function(){
//입력태그(검사결과)의 입력값 변경 - 아이디 중복 검사 미실행으로 설정
$("#idCheckResult").val("0");
})
- zip 테이블 생성해 이용 VS daum open api 이용
<script>
/*
//방법1. zip 테이블 생성해 이용
//=> 문제점: 우편번호는 계속 바뀌므로 관리해야한다!
//=> 해결책: 다음 우편번호 서비스 API를 이용하자!
$("#postSearch").click(function() {
//팝업창 실행하여 우편번호 검색페이지(post_search.jsp) 요청 - 전달값 없음
window.open("<%=request.getContextPath()%>/member/post_search.jsp","postSearch"
,"width=600,height=600,left=600,top=250");
});
*/
//방법2. daum open api 이용
<script src="//t1.daumcdn.net/mapjsapi/bundle/postcode/prod/postcode.v2.js"></script>
$("#postSearch").click(function() {
new daum.Postcode({
oncomplete: function(data) {
$("#zipcode").val(data.zonecode);
$("#address1").val(data.address);
}
}).open();
});
</script>
02. 회원가입 처리 (member > member_join_action.jsp) - 처리
<%@page import="xyz.itwill.util.Utility"%>
<%@page import="xyz.itwill.dao.MemberDAO"%>
<%@page import="xyz.itwill.dto.MemberDTO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
//<%-- 회원정보를 전달받아 MEMBER 테이블에 삽입하고 로그인정보 입력페이지(member_login.jsp)로 이동하기 위한 URL 주소 전달하는 JSP 문서 --%>
<%
//1.
//비정상적인 요청에 대한 응답 처리
if(request.getMethod().equals("GET")){
//문제점) include 태그에 의해 스레드가 이동된 JSP 문서는 클라이언트에게 에러코드나 URL 주소 전달 불가능
//response.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED); //불가능
//return;
//해결법) 자바스크립트를 이용하여 처리
out.println("<script type='text/javascript'>");
out.println("location.href='"+request.getContextPath()+"/index.jsp?workgroup=error&work=error_400';");
out.println("</script>");
return;
}
//2.
//[POST]방식으로 요청하여 전달되는 값에 대한 캐릭터셋 변경
//include 태그에 의해 스레드가 이동된 JSP 문서는 request 객체의 캐릭터셋 변경 불가능
//=> 요청 JSP문서(index.jsp - 템플릿페이지)에서 request 객체의 캐릭터셋 변경하여 사용 가능
//request.setCharacterEncoding("utf-8"); //불가능
//3.
//전달값을 반환받아 저장
String id=request.getParameter("id");
//전달받은 비밀번호를 암호화 처리하여 저장
String passwd=Utility.encrypt(request.getParameter("passwd"));
String name=request.getParameter("name");
String email=request.getParameter("email");
String mobile=request.getParameter("mobile1")+"-"+request.getParameter("mobile2")+"-"+request.getParameter("mobile3");
String zipcode=request.getParameter("zipcode");
String address1=request.getParameter("address1");
String address2=request.getParameter("address2");
//4.
//MemberDTO 객체를 생성하여 전달값으로 필드값 변경
MemberDTO member=new MemberDTO();
member.setId(id);
member.setPasswd(passwd);
member.setName(name);
member.setEmail(email);
member.setMobile(mobile);
member.setZipcode(zipcode);
member.setAddress1(address1);
member.setAddress2(address2);
//5.
//회원정보를 전달받아 MEMBER 테이블에 삽입하는 DAO 클래스의 메소드 호출
MemberDAO.getDAO().insertMember(member);
//6.
//클라이언트에게 URL 주소 전달 - 리다이렉트 안되므로 자바스크립트로 처리
out.println("<script type='text/javascript'>");
out.println("location.href='"+request.getContextPath()+"/index.jsp?workgroup=member&work=member_login';");
out.println("</script>");
%>
03. [팝업창] member > id_check.jsp
<%@page import="xyz.itwill.dao.MemberDAO"%>
<%@page import="xyz.itwill.dto.MemberDTO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
//<%-- 아이디를 전달받아 MEMBER 테이블에 저장된 기존 회원정보의 아이디와 비교하여 중복 유무를 클라이언트에게 전달하는 JSP 문서 --%>
//<%-- => 아이디 미중복 : 아이디 사용 가능 메세지 - [아이디 사용]를 클릭한 경우 부모창의 입력태그의 입력값 변경 --%>
//<%-- => 아이디 중복 : 아이디 사용 불가능 메세지 - 아이디를 입력받아 현재 JSP 문서를 재요청 --%>
<%
//1.
//비정상적인 요청에 대한 응답 처리
if(request.getParameter("id")==null) {
response.sendError(HttpServletResponse.SC_BAD_REQUEST);
return;
}
//2.
//전달값을 반환받아 저장
String id=request.getParameter("id");
//3.
//아이디를 전달받아 MEMBER 테이블에 저장된 해당 아이디의 회원정보를 검색하여 반환하는 DAO 클래스의 메소드 호출
// => null 반환 : 전달받은 아이디의 회원정보가 미검색 - 아이디 미중복(아이디 사용 가능)
// => MemberDTO 객체 반환 : 전달받은 아이디의 회원정보 검색 - 아이디 중복(아이디 사용 불가능)
MemberDTO member=MemberDAO.getDAO().selectMember(id);
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP</title>
<style type="text/css">
div{ text-align: center; margin: 10px; }
.id{ font-weight: bold; color: red; }
</style>
</head>
<body>
<% if(member==null){//전달받은 아이디가 중복되지 않은 경우 %>
<div>입력된 <span class="id">[<%=id %>]</span>는 사용 가능한 아이디입니다.</div>
<div>
<button type="button" onclick="selectId();">아이디사용</button>
</div>
<script type="text/javascript">
function selectId() {
//opener: 팝입창을 실행한 부모창을 표현하는 자바스크립트 객체
opener.join.id.value="<%=id%>"; //입력태그(아이디)의 입력값 변경
opener.join.idCheckResult.value="1"; //입력태그(검사결과)의 입력값 변경
window.close(); //창닫기 - 팝업창 종료
}
</script>
<%} else {//전달받은 아이디가 중복된 경우 %>
<div>입력된 <span class="id">[<%=id %>]</span>는 이미 사용중인 아이디입니다.<br>
다른 아이디를 입력하고 [확인] 버튼을 눌러주세요.</div>
<div>
// <%-- form 태그의 action 속성이 생략된 경우 현재 요청 JSP 문서를 재요청 --%>
// <%-- form 태그의 method 속성이 생략된 경우 [GET] 방식으로 요청 --%>
<form name="checkForm">
<input type="text" name="id">
<button type="button" onclick="idCheck();">확인</button>
</form>
</div>
<div id="message" style="color:red;"></div>
<script type="text/javascript">
function idCheck() {
var id =checkForm.id.value;
if(id==""){
document.getElementById("message").innerHTML = "아이디를 입력해 주세요.";
return;
}
var idReg=/^[a-zA-Z]\\\\w{5,19}$/g;
if(!idReg.test(id)){
document.getElementById("message").innerHTML = "아이디를 형식에 맞게 입력해주세요.";
return;
}
checkForm.submit();
}
</script>
<%} %>
</body>
</html>
04. [팝업창] member > post_search.jsp
<%@page import="java.util.ArrayList"%>
<%@page import="xyz.itwill.dao.ZipDAO"%>
<%@page import="xyz.itwill.dto.ZipDTO"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
//<%-- 사용자로부터 동이름을 입력받아 ZIP 테이블에 저장된 해당 동이름이 포함된 우편번호 관련 정보를 검색하여 클라이언트에게 전달하는 JSP 문서 --%>
//<%-- => [기본주소]를 클릭한 경우 부모창의 입력태그(우편번호,기본주소)의 입력값 변경 --%>
<%
//1.
//전달값을 반환받아 저장
String dong=request.getParameter("dong");
//2.
//동이름을 전달받아 ZIP 테이블에서 해당 동이름으로 시작되는 우편번호 관련 정보를
//검색하여 반환하는 DAO 클래스의 메소드 호출
List<ZipDTO> zipList=new ArrayList<ZipDTO>();
if(dong!=null) {//전달값이 있는 경우
zipList=ZipDAO.getDAO().selectZipList(dong);
}
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP</title>
<style type="text/css">
#search { width: 550px; text-align: center; }
table { margin: 10px auto; border: 1px solid black; border-collapse: collapse; font-size: 14px; }
td { border: 1px solid black; text-align: center; }
.zipcode { width: 100px; }
.address { width: 450px; text-align: left; padding: 2px; }
</style>
</head>
<body>
<div id="search">
<form name="postForm">
동이름 : <input type="text" name="dong">
<button type="button" id="searchBtn">주소검색</button>
</form>
</div>
//<%-- 검색된 우편번호 관련 정보를 클라이언트에게 전달 --%>
<%if(!zipList.isEmpty()){ //검색된 우편번호 관련 정보가 있는 경우 %>
<table>
<tr>
<td class="zipcode">우편번호</td>
<td class="address" style="text-align:center;">기본주소</td>
</tr>
<% for(ZipDTO zip:zipList){ %>
<tr>
<td class="zipcode"><%=zip.getZipcode() %></td>
//<%-- a태그를 이용하여 자바스크립트 명령을 작성할 경우 반드시 javascript 접두사를
//사용해야만 실행 가능 --%>
<td class="address">
<a href="javascript:searchPost('<%=zip.getZipcode()%>','<%=zip.getAddress()%>');"><%=zip.getAddress() %></a>
</td>
<%} %>
</table>
<%} %>
<script type="text/javascript">
postForm.dong.focus();
document.getElementById("searchBtn").onclick=function() {
if(postForm.dong.value=="") {
postForm.dong.focus();
return;
}
postForm.submit();
}
function searchPost(code, addr) {
opener.join.zipcode.value=code;
opener.join.address1.value=addr;
window.close();
}
</script>
</body>
</html>
05. 로그인 페이지 (member > member_login.jsp) - 입력
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
//<%-- 사용자로부터 로그인정보를 입력받기 위한 JSP 문서 --%>
//<%-- => [로그인]을 클릭한 경우 로그인 처리페이지(member_login_action.jsp)로 이동 - 입력값 전달 --%>
<%
//전달값이 있는 경우(쿼리스트링으로 전달받은 login=1을 의미)
if(request.getParameter("login")!=null){
//메인페이지로 이동되도록 세션에 저장된 기존 요청 URL 주소 제거
session.removeAttribute("returnUrl");
}
String message=(String)session.getAttribute("message");
if(message==null) {
message="";
} else {
//session객체 가져다쓰고 다른곳에서 사용못하도록 반드시 제거
session.removeAttribute("message");
}
String id=(String)session.getAttribute("id");
if(id==null) {
id="";
} else {
session.removeAttribute("id");
}
%>
<style type="text/css">
#space { height: 50px; }
.login_tag { margin: 5px auto; width: 300px; }
#login label { text-align: right; width: 100px; float: left; }
#login ul li { list-style-type: none; margin-bottom: 10px; }
#login input:focus { border: 2px solid aqua; }
#login_btn { margin: 0 auto; padding: 5px; width: 300px; background-color: aqua; font-size: 1.2em; cursor: pointer; letter-spacing: 20px; font-weight: bold; }
#search { margin-top: 10px; margin-bottom: 20px; }
#message { color: red; font-weight: bold; }
a:hover { background-color: orange; }
</style>
<div id="space"></div>
<form id="login" name="loginForm" action="index.jsp?workgroup=member&work=member_login_action" method="post">
<ul class="login_tag">
<li>
<label for="id">아이디</label>
<input type="text" name="id" id="id" value="<%=id%>">
</li>
<li>
<label for="id">비밀번호</label>
<input type="password" name="passwd" id="passwd">
</li>
</ul>
<div id="login_btn">로그인</div>
<div id="search">
<a href="#">아이디 찾기</a> |
<a href="#">비밀번호 찾기</a>
</div>
<div id="message"><%=message %></div>
</form>
<script type="text/javascript">
$("#id").focus();
$("#login_btn").click(function() {
if($("#id").val()=="") {
$("#message").text("아이디를 입력해 주세요.");
$("#id").focus();
return;
}
if($("#passwd").val()=="") {
$("#message").text("비밀번호를 입력해 주세요.");
$("#passwd").focus();
return;
}
$("#login").submit();
});
</script>
06. 로그인 처리 (member > member_login_action.jsp) - 처리
<%@page import="xyz.itwill.dto.MemberDTO"%>
<%@page import="xyz.itwill.dao.MemberDAO"%>
<%@page import="xyz.itwill.util.Utility"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
//<%-- 로그인정보를 전달받아 MEMBER 테이블에 저장된 회원정보와 비교하여 인증처리하고 처리결과를 이용하여 클라이언트에게 URL 주소를 전달하는 JSP 문서 --%>
//<%-- => 인증실패 : 로그인정보 입력페이지(member_login.jsp)로 이동 --%>
//<%-- => 인증성공 : 세션에 권한 관련 정보를 저장하고 기존 요청 페이지로 이동하거나 또는 메인페이지(main_page.jsp)로 이동 --%>
<%
//1.
//비정상적인 요청에 대한 응답 처리
if(request.getMethod().equals("GET")){
//해결법) 자바스크립트를 이용하여 처리
out.println("<script type='text/javascript'>");
out.println("location.href='"+request.getContextPath()+"/index.jsp?workgroup=error&work=error_400';");
out.println("</script>");
return;
}
//2.
//전달값을 반환받아 저장
String id=request.getParameter("id");
String passwd=Utility.encrypt(request.getParameter("passwd"));
//3.
//아이디를 전달받아 MEMBER 테이블에 저장된 해당 아이디의 회원정보를 검색하여 반환하는 DAO 클래스의 메소드 호출
MemberDTO member=MemberDAO.getDAO().selectMember(id);
//4.
//인증실패 - 메세지 같게 하고 싶다면 4-1 & 4-2 합쳐서 작성하기
//if(member==null || member.getStatus()==0 || !member.getPasswd().equals(passwd))
//전달받은 아이디로 검색된 회원정보가 없거나 탈퇴회원인 경우 - 아이디 인증 실패
if(member==null || member.getStatus()==0){
session.setAttribute("message", "입력한 아이디가 존재하지 않습니다."); //세션에 에러메세지 저장
session.setAttribute("id", id); //세션에 아이디 입력값 저장
out.println("<script type='text/javascript'>");
out.println("location.href='"+request.getContextPath()+"/index.jsp?workgroup=member&work=member_login';");
out.println("</script>");
return;
}
//검색된 회원정보의 비밀번호와 전달받은 비밀번호가 맞지 않는 경우 - 비밀번호 인증 실패
if(!member.getPasswd().equals(passwd)){
session.setAttribute("message", "입력한 아이디가 잘못 되었거나 비밀번호가 맞지 않습니다.");
session.setAttribute("id", id); //세션에 아이디 입력값 저장
out.println("<script type='text/javascript'>");
out.println("location.href='"+request.getContextPath()+"/index.jsp?workgroup=member&work=member_login';");
out.println("</script>");
return;
}
//5.
//인증 성공
//아이디를 전달받아 MEMBER 테이블에 저장된 해당 아이디의 회원정보에서 마지막 로그인 날짜를 변경하는 DAO 클래스의 메소드 호출
MemberDAO.getDAO().updateLastLogin(id);
//🔥🔥🔥[세션]에 권한 관련 정보(회원정보) 저장 - 서버 메모리 많이 차지함
//=> (대형시스템) "세션"이용 줄이고 세션보다 리퀘스트 객체 등을 이용해 아이디만 저장하는 것 권장(효율적) - 서버부담줄이기
session.setAttribute("loginMember", MemberDAO.getDAO().selectMember(id));
//페이지 이동 처리 - 로그인하지 않는 사용자가 구매하려고 장바구니페이지 이동 시 session객체에 url 저장해두기
//=> : session.setAttribute("url","");
//세션에 저장된 요청 페이지의 URL 주소를 반환받아 저장
String returnUrl = (String) session.getAttribute("returnUrl");
if(returnUrl==null){ //요청 페이지가 없는 경우
out.println("<script type='text/javascript'>");
//메인페이지(main_page.jsp)로 이동
out.println("location.href='"+request.getContextPath()+"/index.jsp?workgroup=main&work=main_page';");
out.println("</script>");
} else { //요청 페이지가 있는 경우
session.removeAttribute("url");
//기존 요청 페이지로 이동
out.println("<script type='text/javascript'>");
out.println("location.href='"+returnUrl + "';");
out.println("</script>");
}
%>
06. 로그아웃 처리 (member > member_logout_action.jsp) - 처리
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
//<%-- 로그아웃 처리 후 로그인정보 입력페이지(member_login.jsp)로 이동하기 위한 URL 주소를 전달하는 JSP 문서 --%>
<%
//로그아웃 처리 - 세션에 저장된 권한 관련 정보 제거하거나 세션을 언바인딩 처리
//session.removeAttribute("loginMember");
session.invalidate();
//페이지 이동
out.println("<script type='text/javascript'>");
out.println("location.href='"+request.getContextPath()+"/index.jsp?workgroup=member&work=member_login';");
out.println("</script>");
%>
반응형
'jsp' 카테고리의 다른 글
[jsp] 21. 웹사이트 제작법7_ 제품목록, 장바구니,구매목록 페이지 제작 (feat. JSP) (0) | 2024.07.14 |
---|---|
[jsp] 20. 웹사이트 제작법6_ 마이페이지 제작 (feat. JSP) (0) | 2024.07.13 |
[jsp] 18. 웹사이트 제작법4_Utility제작 (feat. JSP) (0) | 2024.07.13 |
[jsp] 17. 웹사이트 제작법3_DAO제작 (feat. JSP) (0) | 2024.07.12 |
[jsp] 16. 웹사이트 제작법2_테이블,DTO제작 (feat. JSP) (0) | 2024.07.12 |