본문 바로가기

JSP(Java Server Page)/session

session을 이해하는 회원가입과 탈퇴 로그인 예제

index.jsp


<%@ page contentType="text/html; charset=UTF-8"%>

<%@ page trimDirectiveWhitespaces="true" %>

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<%

   String cp = request.getContextPath();

%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>Insert title here</title>

</head>

<body>

반갑습니다. 허접 홈페이지 입니다.<br/>

<c:if test="${empty sessionScope.member}"> <!-- member라는 세션이 존재하지 않으면 -->

<a href="<%=cp %>/member/member.kp">회원가입</a>

|

<a href="<%=cp %>/member/login.kp">로그인</a>

</c:if>


<c:if test="${not empty sessionScope.member}">

${sessionScope.member.userName}님   <!-- member라는 세션이 존재하면 -->

<a href="<%=cp %>/member/update.kp">정보수정</a>

|

<a href="<%=cp %>/member/logout.kp">로그아웃</a>

|

<a href="<%=cp %>/member/delete.kp">회원탈퇴</a>

</c:if>

<br/>

재미있게 놀다 가삼....


</body>

</html>


==================================================================================================================================
login.jsp

<%@ page contentType="text/html; charset=UTF-8"%>
<%@ page trimDirectiveWhitespaces="true" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%
   String cp = request.getContextPath();
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>

<form action="<%=cp%>/member/login_ok.kp" method="post">
아이디 : <input type="text" name="userId"><br/>
패스워드 : <input type="password" name="userPwd"> <br/>
<input type="submit" value="로그인"><br/>
<input type="button" value="돌아가기" onclick="javascript:location.href='<%=cp %>';"><br/>
<font color="red">${msg}</font>

</form>
</body>
</html>
==================================================================================================================================
created.jsp

<%@ page contentType="text/html; charset=UTF-8"%>
<%@ page trimDirectiveWhitespaces="true" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%
   String cp = request.getContextPath();
%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>회원가입</title>
<script type="text/javascript">
String.prototype.trim=function(){
var TRIM_PATTERN=/(^\s*)|(\s*$)/g; 
return this.replace(TRIM_PATTERN,"");
};

function sendIt(){
var f=document.forms[0];
// 아이디
var str = f.userId.value;
    str = str.trim();
if(! /^[a-z][a-z0-9_!@#$%^&*]{4,14}$/i.test(f.userId.value)){ 
alert("아이디는 영문자로 시작 5~15이내");
f.userId.focus();
return;
}
f.userId.value = str;

//패스워드검사
var str = f.userPwd.value;
    str = str.trim();
if(! /(?=.*[_!@#$%^&*]|.*[0-14]).{0,14}$/i.test(f.userPwd.value)){
alert("패스워드는 하나이상의 특수문자를 포함이며 5~15이내 ");
f.userPwd.focus();
return;
}
f.userPwd.value = str;
//패스워드 확인
if(f.userPwd2.value!=f.userPwd.value){
alert("패스워드를 확인해주세요 ");
f.userPwd2.focus();
return;
}
// 이름
var str = f.userName.value;
    str = str.trim();
if(! /^[\uac00-\ud7a3]*$/g.test(f.userName.value)){ 
alert("이름을 제대로 입력하쇼");
f.userName.focus();
return;
}
f.userName.value = str;
//전화번호
if(f.tel1.value==""){
alert("앞번호를 선택하세요");
f.tel1.focus();
return;
}
if(! f.tel2.value){
alert("가운데번호를 입력하세요");
f.tel2.focus();
return;
}
var mode="${mode}";
if(mode=="created")
f.action="<%=cp%>/member/member_ok.kp";
else if(mode=="update")
f.action="<%=cp%>/member/update_ok.kp";
f.submit();
}

</script>
</head>
<body>
<br/><br/>
<form action="" method="post"> 
<table align="center" width="312" border="2" cellspacing="0" cellpadding="0" bordercolor="#acacac">
<tr height="40">
<td style="padding-left:20px;" align="left"><b>회 원 가 입</b></td>
</tr>
</table>
<br/>
<table  width="400" align="center"  border="1" cellspacing="0" cellpadding="0" bordercolor="#kkkkkk">
<tr align="center"> 
      <td width="100px" height="30" bgcolor="#EEEEEE" >아이디</td>
      <td width="200px" style="padding-left:5px;" align="left"> 
        <input type="text" name="userId" size="20" maxlength="100" value="${dto.userId}" ${mode=="update"?"readonly='readonly' style='border:0px solid #ffffff;'":"" }/>
      </td>
</tr>
<tr align="center"> 
      <td width="100" height="30" bgcolor="#EEEEEE" >패스워드</td>
      <td width="100" style="padding-left:5px;" align="left"> 
        <input type="password" name="userPwd" size="20" maxlength="100" value="${dto.userPwd}"/>
      </td>
</tr>
<tr align="center"> 
      <td width="100" height="30" bgcolor="#EEEEEE" >패스워드 확인</td>
      <td width="100" style="padding-left:5px;" align="left"> 
        <input type="password" name="userPwd2" size="20" maxlength="100" value="${dto.userPwd}"/>
      </td>
</tr>
<tr align="center"> 
<td width="100" height="30" bgcolor="#EEEEEE" >이름</td>
<td width="100" style="padding-left:5px;" align="left"> 
 <input type="text" name="userName" size="20" maxlength="100" value="${dto.userName}" ${mode=="update"?"readonly='readonly' style='border:0px solid #ffffff;'":"" }/>
</td>
</tr>
<tr align="center"> 
<td width="100" height="30" bgcolor="#EEEEEE" >전화번호</td>
<td align="left" >
<select name="tel1"  >
<option value="" style="padding-left: 10"> 선택 </option>
<option value="010" ${dto.tel1=="010"?"selected='selected'":"" }>010</option>
<option value="011" ${dto.tel1=="011"?"selected='selected'":"" }>011</option>
<option value="016" ${dto.tel1=="016"?"selected='selected'":"" }>016</option>
<option value="017" ${dto.tel1=="017"?"selected='selected'":"" }>017</option>
</select>
<input type="text" name="tel2" size="4" maxlength="4" style="margin-left: 3px" value="${dto.tel2}"> -
<input type="text" name="tel3" size="4" maxlength="4" class="boxTF" value="${dto.tel3}">
     </td>
</tr>
</table>
<table align="center">
<tr>
<td colspan="2">
<input type="button" value="${mode=='created'?'회원가입':'정보수정' }" onclick="sendIt()"/>
<input type="reset" value="다시입력"/>
<input type="button" value="${mode=='created'?'가입취소':'수정취소' }" onclick="javascript:location.href='<%=cp%>';"/>
</td>
</tr>

<tr align="center">
<td height="30" style="color:blue;">${msg}</td>
</tr>
</table>
  </form>
</body>
</html>
==================================================================================================================================
MemberServlet.java

package com.member;

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 javax.servlet.http.HttpSession;

@WebServlet("/member/*")
public class MemberServlet extends HttpServlet{
private static final long serialVersionUID = 1L;

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
process(req, resp);
}

@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
process(req, resp);
}

protected void forward(HttpServletRequest req, 
HttpServletResponse resp, String path)
throws ServletException, IOException {
// 포워딩을 위한 메소드
RequestDispatcher rd=req.getRequestDispatcher(path);
rd.forward(req, resp);
}
protected void process(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
// cp부터 끝까지 주소
String uri=req.getRequestURI();
MemberDAO dao=new MemberDAO();
if(uri.indexOf("member.kp")!=-1) {
req.setAttribute("mode", "created");
forward(req, resp, "/WEB-INF/views/member/created.jsp");
}else if(uri.indexOf("member_ok.kp")!=-1){
MemberDTO dto=new MemberDTO();
dto.setUserId(req.getParameter("userId"));
dto.setUserPwd(req.getParameter("userPwd"));
dto.setUserName(req.getParameter("userName"));
String tel="";
tel=req.getParameter("tel1")+"-"+req.getParameter("tel2")+"-"+req.getParameter("tel3");
dto.setTel(tel);
int result=dao.insertMember(dto);
if(result==1){
String cp=req.getContextPath();
resp.sendRedirect(cp);
return;
}
//가입을 실패하면 다시 가입폼으로
req.setAttribute("mode", "created");
req.setAttribute("msg", "회원가입을 실패했습니다.");
forward(req, resp, "/WEB-INF/views/member/created.jsp");
}else if(uri.indexOf("login.kp")!=-1){
// 로그인 폼
forward(req, resp, "/WEB-INF/views/member/login.jsp");
}else if(uri.indexOf("login_ok.kp")!=-1){
// 로그인 처리
String userId=req.getParameter("userId");
String userPwd=req.getParameter("userPwd");
MemberDTO dto=dao.readMember(userId);
if(dto!=null){ // DB에 로그인 화면에서 입력한 userId의 데이터가 존재하면
if(dto.getUserPwd().equals(userPwd)){ // 존재하는 데이터와 넘어온 데이터가 같으면
//로그인 처리. 세션에 정보를 저장
HttpSession session=req.getSession();
session.setMaxInactiveInterval(20*60); //20*60초 -> 20분 로그인 상태 지속할 수 있게 설정함.
SessionInfo info=new SessionInfo();
info.setUserId(dto.getUserId());
info.setUserName(dto.getUserName());
// member 라는 이름으로 로그인한 사람 저장
session.setAttribute("member", info);
String cp=req.getContextPath();
//로그인 후, 로그아웃 후
//테이블에 추가, 수정, 삭제후에는 리다이렉트
resp.sendRedirect(cp);
return; // 메소드 전체를 빠져나온다.
}
}
//로그인 실패한 경우
req.setAttribute("msg", "아이디 또는 패스워드가 일치하지 않습니다.");
forward(req, resp, "/WEB-INF/views/member/login.jsp");
}else if(uri.indexOf("logout.kp")!=-1){
// 로그아웃
HttpSession session=req.getSession();
session.removeAttribute("member");
session.invalidate();
String cp=req.getContextPath();
resp.sendRedirect(cp);
}else if(uri.indexOf("update.kp")!=-1){
// 수정 폼
HttpSession session=req.getSession();
SessionInfo info=(SessionInfo)session.getAttribute("member"); // member의 세션 데이터를 SessionInfo에 담아둔다.
String cp=req.getContextPath();
if(info==null){
//로그인이 안된 상태. 로그인 페이지로 포워딩
forward(req, resp, "/WEB-INF/views/member/login.jsp");
return;
}
MemberDTO dto=dao.readMember(info.getUserId());
if(dto==null){
session.invalidate(); // 모든것을 지우고 초기화
resp.sendRedirect(cp);
return;
}
//수정페이지로 포워딩
req.setAttribute("mode", "update");
req.setAttribute("dto", dto);
forward(req, resp, "/WEB-INF/views/member/created.jsp");
}else if(uri.indexOf("update_ok.kp")!=-1){
MemberDTO dto=new MemberDTO();
dto.setUserId(req.getParameter("userId"));
dto.setUserPwd(req.getParameter("userPwd"));
String tel="";
tel=req.getParameter("tel1")+"-"+req.getParameter("tel2")+"-"+req.getParameter("tel3");
dto.setTel(tel);
int result=dao.updateMember(dto);
if(result==1){
String cp=req.getContextPath();
resp.sendRedirect(cp);
return;
}
//수정을 실패하면 다시 가입폼으로
req.setAttribute("mode", "update");
req.setAttribute("msg", "수정을 실패했습니다.");
forward(req, resp, "/WEB-INF/views/member/update.jsp");
}else if(uri.indexOf("delete.kp")!=-1){
HttpSession session=req.getSession();
SessionInfo info=(SessionInfo)session.getAttribute("member");
String cp=req.getContextPath();
if(info==null){ // 로그인 안된 상태
forward(req, resp, "/WEB-INF/views/member/login.jsp");
return;
}
MemberDTO dto=dao.readMember(info.getUserId());
if(dto==null){ //데이터가 없을 때(이미 삭제된경우)
session.invalidate(); // 모든것을 지우고 초기화
resp.sendRedirect(cp);
return;
}
String userId=dto.getUserId();
dao.deleteMember(userId);
session.invalidate();
resp.sendRedirect(cp);
}
}
}
==================================================================================================================================
MemberDAO.java

package com.member;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

import com.util.DBConn;

public class MemberDAO {
private Connection conn=DBConn.getConnection();
public int insertMember(MemberDTO dto){
int result=0;
PreparedStatement pstmt=null;
String sql;
try{
sql="INSERT INTO join(userId,userPwd,userName,tel) VALUES(?,?,?,?)";
pstmt=conn.prepareStatement(sql);
pstmt.setString(1, dto.getUserId());
pstmt.setString(2, dto.getUserPwd());
pstmt.setString(3, dto.getUserName());
pstmt.setString(4, dto.getTel());
result=pstmt.executeUpdate();
pstmt.close();
}catch(Exception e){
System.out.println(e.toString());
}
return result;
}
public MemberDTO readMember(String userId){
MemberDTO dto=null;
PreparedStatement pstmt=null;
ResultSet rs= null;
String sql;
try{
sql="SELECT userId,userPwd,userName,tel FROM join WHERE userId=?";
pstmt=conn.prepareStatement(sql);
pstmt.setString(1, userId);
rs=pstmt.executeQuery();
if(rs.next()){
dto=new MemberDTO();
dto.setUserId(rs.getString("userId"));
dto.setUserPwd(rs.getString("userPwd"));
dto.setUserName(rs.getString("userName"));
dto.setTel(rs.getString("tel"));
if(dto.getTel()!=null){ //tel이 te1,tel2,tel3으로 합쳐져 있는 것을 수정을 위해 분리하였다. 전화번호 분리
String t[]=dto.getTel().split("-");
if(t.length==3){
dto.setTel1(t[0]);
dto.setTel2(t[1]);
dto.setTel3(t[2]);
}
}
}
rs.close();
pstmt.close();
}catch(Exception e){
System.out.println(e.toString());
}
return dto;
}
public int updateMember(MemberDTO dto){
int result=0;
PreparedStatement pstmt=null;
String sql;
try{
sql="UPDATE join SET userPwd=?, tel=? WHERE userId=?";
pstmt=conn.prepareStatement(sql);
pstmt.setString(1,dto.getUserPwd());
pstmt.setString(2, dto.getTel());
pstmt.setString(3, dto.getUserId());
result=pstmt.executeUpdate();
pstmt.close();
}catch(Exception e){
System.out.println(e.toString());
}
return result;
}
public int deleteMember(String userId){
int result=0;

PreparedStatement pstmt=null;
String sql;
try{
sql="DELETE FROM join WHERE userId=?";
pstmt=conn.prepareStatement(sql);
pstmt.setString(1, userId);
result=pstmt.executeUpdate();
pstmt.close();
}catch(Exception e){
System.out.println(e.toString());
}
return result;
}
}
==================================================================================================================================

MemberDTO.java


package com.member;


public class MemberDTO {

private String userId,userPwd,userName, tel1,tel2,tel3,tel;


public String getUserId() {

return userId;

}


public void setUserId(String userId) {

this.userId = userId;

}


public String getUserPwd() {

return userPwd;

}


public void setUserPwd(String userPwd) {

this.userPwd = userPwd;

}


public String getUserName() {

return userName;

}


public void setUserName(String userName) {

this.userName = userName;

}


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 getTel() {

return tel;

}


public void setTel(String tel) {

this.tel = tel;

}

}

==================================================================================================================================
SessionInfo.java

package com.member;

//세션에 저장할 객체(DTO형식으로 세션 객체를 저장한다고 생각하면 됨)
public class SessionInfo {
private String userId, userName, roll;  //roll은 권한을 위한 변수

public String getUserId() {
return userId;
}

public void setUserId(String userId) {
this.userId = userId;
}

public String getUserName() {
return userName;
}

public void setUserName(String userName) {
this.userName = userName;
}

public String getRoll() {
return roll;
}

public void setRoll(String roll) {
this.roll = roll;
}
}


'JSP(Java Server Page) > session' 카테고리의 다른 글

session을 이해하는 예제  (0) 2013.07.02