WEB/JSTL

[JSTL] interface를 이용한 login

hvoon 2022. 9. 9. 20:40

*.jsp파일 - background color 검정

접속할 로그인 창(주소창 표시 안함)

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>index.jsp</title>
</head>
<body>
<%
	response.sendRedirect("member.do?command=loginForm");
// member.do: 현재 프로젝트의 있는 유일한 servlet의 이름(URL mapping)
// 유일한 servlet을 호출하고 
// 지금 하고자하는 작업의 제목을 command라는 파라미터로 보내서
// 해당 기능을 다른 기능과 구분하여 실행되게 함.
%>
</body>
</html>
 

main servlet 생성

package com.mgr.member.controller;

import java.io.IOException;

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 com.mgr.member.controller.action.Action;

@WebServlet("/member.do")
public class MemberServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
    public MemberServlet() {
        super();
    }
	protected void doGet(HttpServletRequest request, 
			HttpServletResponse response) 
			throws ServletException, IOException {
		
		request.setCharacterEncoding("UTF-8");
		response.setCharacterEncoding("UTF-8");
		
		// 같이 전달된 command 파라미터를 getParameter 메서드로 받음
		String command = request.getParameter("command");
		// command: "loginForm"

		/*
		if(command.equals("loginForm")) {
			LoginFormAction lfa=new LoginFormAction();
			lfa.execute(request,response);
		} else if(command.equals("logout")) {
			LogoutAction loa=new LogoutAction();
			loa.execute(request, response);
		} else if(command.equals("joinForm")) {
		}
		*/

		Action ac=null;
		
		/*
		if(command.equals("loginForm")) ac=new LoginFormAction();
		else if(command.equals("logOut")) ac=new LogOutAction();
		else if(command.equals("joinForm"))ac=new JoinFormAction();
		*/
		
		ActionFactory af=ActionFactory.getInstance();
		ac=af.getAction(command);
		
		if(ac!=null) ac.execute(request, response);
		else System.out.println("command: "+command+
				" - command 값을 확인하시오");
		// index에 있는 command 주소창에 오타가 날 경우 출력함
		
// command에 전달된 값에 따라 어떤 작업을 할지가 결정이 되어 실행됨.
// 각 command별 실행할 작업들은 해당 실행코드가 들어있는 클래스 내부 
// 그 중에서도 execute 메서드 안에 있음.
// 각 기능별로 클래스가 제작되어 실행되기를 기다리고
// command 값에 따라 선택되어 실행되는 형식.
		
// 각 기능이 내장된 객체들의 인스턴스들은 
// 클래스들이 상속(implements)받은 
// 부모 인터페이스(Action)의 래퍼런스 변수에 저장하고
// 래퍼런스 변수명.execute로 실행함.
		
// 각 클래스에 있는 execute 메서드는 Action 인터페이스에 존재하는 
// 추상메서드를 오버라이딩한 메서드임.
// 각 클래스가 Action 인터페이스를 상속(implement)하여
// execute 메서드가 오버라이딩되면 Action 인터페이스의 래퍼런스 변수로 
// 자식 클래스의 execute 메서드를 호출하여 사용함
	}
	
	protected void doPost(HttpServletRequest request, 
			HttpServletResponse response) 
			throws ServletException, IOException {
		request.setCharacterEncoding("UTF-8");
		response.setCharacterEncoding("UTF-8");
		doGet(request, response);
	}
}
 

Action interface 생성

package com.mgr.member.controller.action;

import java.io.IOException;

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

public interface Action {
	
	public void execute(HttpServletRequest request,
			HttpServletResponse response)
		throws ServletException, IOException;
}
 

ActionFactory servlet 생성

package com.mgr.member.controller;

import com.mgr.member.controller.action.Action;
import com.mgr.member.controller.action.DeleteMemberAction;
import com.mgr.member.controller.action.EditAdminAction;
import com.mgr.member.controller.action.IdCheckAction;
import com.mgr.member.controller.action.JoinAction;
import com.mgr.member.controller.action.JoinFormAction;
import com.mgr.member.controller.action.LogOutAction;
import com.mgr.member.controller.action.LoginAction;
import com.mgr.member.controller.action.LoginFormAction;
import com.mgr.member.controller.action.MainAction;
import com.mgr.member.controller.action.UpdateAction;
import com.mgr.member.controller.action.UpdateFormAction;

public class ActionFactory {
	private ActionFactory() {};
	private static ActionFactory itc=new ActionFactory();
	public static ActionFactory getInstance() {return itc;}
	
	public Action getAction(String command) {
		Action ac=null;
// 여기에 불러올 command 생성
		return ac;
	}
}
 
 

 

*Action getAction(String command){Action ac=null; 코드 return ac;}

-코드 내용 배경색 회색

 

로그인 화면

if(command.equals("loginForm")) ac=new LoginFormAction();
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>loginForm.jsp</title>
<script src="script/member.js"></script>
</head>
<body>
<form action="member.do" method="post" name="frm">
	<input type="hidden" name="command" value="login"/>
	<table>
		<tr><td> 아이디 </td><td>
			<input type="text" name="userid"></td></tr>
		<tr><td> 암&nbsp;&nbsp;&nbsp;호 </td><td>
			<input type="password" name="pwd"></td></tr>
		<tr><td colspan="2" align="center">
			<input type="submit" value="로그인" 
				onClick="return loginCheck();">
			<input type="reset" value="취소">
			<input type="button" value="회원가입"
			 onClick="location.href='member.do?command=joinForm'">
			</td></tr>
		<tr><td colspan="2">${message}</td></tr>
	</table>
</form>
</body>
</html>
 
 
package com.mgr.member.controller.action;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class LoginFormAction implements Action{

	@Override
	public void execute(HttpServletRequest request, 
			HttpServletResponse response) 
			throws ServletException, IOException {
		String url="member/loginForm.jsp";
		
		HttpSession session=request.getSession();
		if(session.getAttribute("loginUser")!=null)	
			url="member.do?command=main";
		
		RequestDispatcher dp
			=request.getRequestDispatcher(url);
		dp.forward(request, response);
	}
}

 

File 생성하여 member.js로 파일 생성

function loginCheck(){
	if( document.frm.userid.value == "" ){
		alert("아이디를 입력하세요");
		document.frm.userid.focus();
		return false;
	}
	if( document.frm.pwd.value == ""){
		alert("암호를 입력하세요");
		document.frm.pwd.focus();
		return false;
	}
	return true;
}

 

member Dto 생성

package com.mgr.member.dto;

public class MemberDto {

	private String name;
	private String userid;
	private String pwd;
	private String email;
	private String phone;
	private int admin;
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getUserid() {
		return userid;
	}
	public void setUserid(String userid) {
		this.userid = userid;
	}
	public String getPwd() {
		return pwd;
	}
	public void setPwd(String pwd) {
		this.pwd = pwd;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	public String getPhone() {
		return phone;
	}
	public void setPhone(String phone) {
		this.phone = phone;
	}
	public int getAdmin() {
		return admin;
	}
	public void setAdmin(int admin) {
		this.admin = admin;
	}
}

 

Member Dao 생성

package com.mgr.member.dao;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import com.mgr.member.dto.MemberDto;

public class MemberDao {
	
	// 싱글턴 코드
	private MemberDao() {}
	private static MemberDao ist=new MemberDao();
	public static MemberDao getInstance() {return ist;}
	
	// 데이터베이스 Access에 필요한 객체 및 변수
	Connection con=null;
	PreparedStatement pstmt=null;
	ResultSet rs=null;
	String driver="oracle.jdbc.OracleDriver";
	String url="jdbc:oracle:thin:@localhost:1521:xe";
	
	// getConnection과 close
	private Connection getConnection() {
		Connection con=null;
		try{
			Class.forName(driver);
			con=DriverManager.getConnection(url,"scott", "tiger");
		} catch(ClassNotFoundException e){e.printStackTrace();
		} catch(SQLException e){e.printStackTrace();} 
		return con;
	}
	private void close() {
		try{
			if(con!=null) con.close();
			if(pstmt!=null) pstmt.close();
			if(rs!=null) rs.close();
		} catch(Exception e){e.printStackTrace();}
	}
}

 

로그인 실행

else if(command.equals("login")) ac=new LoginAction();
package com.mgr.member.controller.action;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import com.mgr.member.dao.MemberDao;
import com.mgr.member.dto.MemberDto;

public class LoginAction implements Action {
	@Override
	public void execute(HttpServletRequest request, 
			HttpServletResponse response) 
			throws ServletException, IOException {
		
		String userid=request.getParameter("userid");
		String pwd=request.getParameter("pwd");
		
		MemberDao mdao=MemberDao.getInstance();
		MemberDto mdto=mdao.getMember(userid);
		
		String url="member/loginForm.jsp";
		
		if(mdto==null) 
			request.setAttribute("message", "입력한 아이디가 존재하지 않습니다");
		else if(mdto.getPwd()==null) 
			request.setAttribute("message", "비밀번호 오류");
		else if(!mdto.getPwd().equals(pwd)) 
			request.setAttribute("message", "입력한 비밀번호가 틀립니다");
		else if(mdto.getPwd().equals(pwd)) {
			url="member.do?command=main";
			HttpSession session=request.getSession();
			session.setAttribute("loginUser", mdto);
		} else 
			request.setAttribute("message", "관리자에게 문의하세요");
		
		RequestDispatcher dp=request.getRequestDispatcher(url);
		dp.forward(request, response);
	}
}
 

MemberDao에 getMember 생성

public MemberDto getMember(String userid) {
	MemberDto mdto=null;
	String sql="select*from member where userid=?";
	con=getConnection();
	try {
		pstmt=con.prepareStatement(sql);
		pstmt.setString(1, userid);
		rs=pstmt.executeQuery();
		if(rs.next()) {
			mdto=new MemberDto();
			mdto.setUserid(rs.getString("userid"));
			mdto.setName(rs.getString("name"));
			mdto.setPwd(rs.getString("pwd"));
			mdto.setPhone(rs.getString("phone"));
			mdto.setEmail(rs.getString("email"));
			mdto.setAdmin(rs.getInt("admin"));
		}
	} catch(SQLException e){e.printStackTrace();
	} finally{close();}  
	return mdto;
}

 

로그인 후 창

else if(command.equals("main")) ac=new MainAction();
 
package com.mgr.member.controller.action;

import java.io.IOException;
import java.util.ArrayList;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import com.mgr.member.dao.MemberDao;
import com.mgr.member.dto.MemberDto;

public class MainAction implements Action {

	@Override
	public void execute(HttpServletRequest request, 
			HttpServletResponse response) 
			throws ServletException, IOException {
		String url="member/main.jsp"; 
		
		HttpSession session=request.getSession();
		if(session.getAttribute("loginUser")==null) 
			url="member/loginForm.jsp";
		
		MemberDao mdao=MemberDao.getInstance();
		ArrayList<MemberDto> list=mdao.selectMember();
		
		request.setAttribute("mList", list);
		RequestDispatcher rd=request.getRequestDispatcher(url);
		rd.forward(request, response);
	}
}

 

MemberDao에 selectMember 생성

public ArrayList<MemberDto> selectMember() {
	ArrayList<MemberDto> list=new ArrayList<>();
	String sql="select*from member order by admin, userid";
	con=getConnection();
	try {
		pstmt=con.prepareStatement(sql);
		rs=pstmt.executeQuery();
		while(rs.next()) {
			MemberDto mdto=new MemberDto();
			mdto.setUserid(rs.getString("userid"));
			mdto.setName(rs.getString("name"));
			mdto.setPwd(rs.getString("pwd"));
			mdto.setPhone(rs.getString("phone"));
			mdto.setEmail(rs.getString("email"));
			mdto.setAdmin(rs.getInt("admin"));
			list.add(mdto); 
		}
	} catch(SQLException e){e.printStackTrace();
	} finally{close();}  
	return list;
}
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 
<c:if test="${empty loginUser}">
	<jsp:forward page='../member.do?command=loginForm'/>
</c:if>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>main.jsp</title>
<script src="script/member.js"></script>
</head>
<body>
<table>
	<tr><td>${loginUser.name}(${loginUser.userid })님</td></tr>
	<tr><td> email: ${loginUser.email }</td></tr>
	<tr><td> 전화번호: ${loginUser.phone }</td></tr>
	<tr><td>
		<input type="button" value="로그아웃" 
			onclick="location.href='member.do?command=logout'">
		<input type="button" value="회원정보변경" 
			onclick="location.href='member.do?command=updateForm'">
		<input type="button" value="회원 탈퇴" 
			onclick="deleteMember();">
	</td></tr>
</table>
<br><br>

<c:if test="${loginUser.admin==1 }">
	<table align="left" width="800" bgcolor="black" cellspacing="1">
		<tr bgcolor="white"><th>아이디</th><th>이름</th>
										<th>전화번호</th><th>이메일</th>
										<th>등급</th><th>등급변경</th>
		</tr>
		<c:forEach var="member" items="${mList}">
			<tr bgcolor="white" align="center">
				<td>${member.userid}</td><td>${member.name}</td>
				<td>${member.phone}</td><td>${member.email}</td>
				<td>
					<c:if test="${member.admin==1}">관리자</c:if>
					<c:if test="${member.admin==0}">일반회원</c:if></td>
				<td width="180">
					<c:if test="${loginUser.userid!=member.userid}">
					<c:if test="${member.admin==0}">
						<input type="button" value="관리자로 변경"
						onClick="location.href='member.do?command=editAdmin&userid=${member.userid}'">
					</c:if>
					<c:if test="${member.admin==1}">
						<input type="button" value="일반회원으로 변경"
						onClick="location.href='member.do?command=editAdmin&userid=${member.userid}'">
					</c:if>
				</c:if></td>
			</tr>
		</c:forEach>
	</table>
</c:if>

</body>
</html>
 

 

로그아웃

else if(command.equals("logout")) ac=new LogOutAction();
package com.mgr.member.controller.action;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class LogOutAction implements Action{
	@Override
	public void execute(HttpServletRequest request, 
			HttpServletResponse response) 
			throws ServletException, IOException {
		HttpSession session=request.getSession();
		session.invalidate();
		RequestDispatcher dp
			=request.getRequestDispatcher("member/loginForm.jsp");
		dp.forward(request, response);
	}
}

 

회원가입 화면

else if(command.equals("joinForm")) ac=new JoinFormAction();
package com.mgr.member.controller.action;

import java.io.IOException;

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

public class JoinFormAction implements Action {

	@Override
	public void execute(HttpServletRequest request, 
			HttpServletResponse response) 
			throws ServletException, IOException {
		RequestDispatcher dp
		=request.getRequestDispatcher("member/joinForm.jsp");
	dp.forward(request, response);
	}
}
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>joinForm.jsp</title>
<script src="script/member.js"></script>
</head>
<body>

<h2>회원 가입</h2> 
'*' 표시 항목은 필수 입력 항목입니다.

<form action="member.do" method="post" name="frm">
	<input type="hidden" name="command" value="join">
	<table>
		<tr><td>이름</td><td>
			<input type="text" name="name" size="20">&nbsp;*</td></tr>
		<tr><td>아이디</td><td>
			<input type="text" name="userid" size="20">&nbsp;*
			<input type="button" value="중복 체크" onClick="idCheck();"/>
			<input type="hidden" name="reid" value=""></td></tr>
		<tr><td>비밀번호</td><td>
			<input type="password" name="pwd" size="20">&nbsp;*</td></tr>
		<tr><td>비밀번호  확인</td><td>
			<input type="password" name="pwd_check" size="20">&nbsp;*</td></tr>
		<tr><td>이메일</td><td>
			<input type="text" name="email" size="20">&nbsp;</td></tr>
		<tr><td>전화번호</td><td>
			<input type="text" name="phone" size="20">&nbsp;</td></tr>
		<tr><td>등급</td><td>
			<input type="radio" name="admin" value="0" 
				checked="checked">일반회원&nbsp;
			<input type="radio" name="admin" value="1">관리자</td></tr>
		<tr><td colspan="2" align="center">
			<input type="submit" value="회원 가입" 
				onClick="return joinCheck()"/>
			<input type="reset" value="취소"></td></tr>
	</table>
</form>

</body>
</html>

 

아이디 중복 확인

package com.mgr.member.controller.action;

import java.io.IOException;

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

import com.mgr.member.dao.MemberDao;
import com.mgr.member.dto.MemberDto;

public class IdCheckAction implements Action {

	@Override
	public void execute(HttpServletRequest request, 
			HttpServletResponse response)
			throws ServletException, IOException {
		
		String userid=request.getParameter("userid");
		MemberDao mdao=MemberDao.getInstance();
		MemberDto mdto=mdao.getMember(userid);
		int result=1;
		if(mdto==null) result=-1;
		
		request.setAttribute("result", result);
		request.setAttribute("userid", userid);
		
		RequestDispatcher rd
		=request.getRequestDispatcher("member/idcheck.jsp");
		rd.forward(request, response);	
	}
}
<%@ 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>idcheck.jsp</title>
<script src="script/member.js"></script>
</head>
<body>

<c:if test="${result==1}">
	<script type="text/javascript">
		opener.document.frm.userid.value="";
		opener.document.frm.reid.value="";
	</script>
	${userid}는 이미 사용 중인 아이디입니다.
</c:if>

<c:if test="${result==-1}">
	${userid}는 사용 가능한 아이디입니다. 
	<input type="button" value="사용" class="cancel"
		onclick="idok('${userid}')">
</c:if>
<br><br><br>

<form action="member.do" name="frm">
	<input type="hidden" name="command" value="idCheck">
	아이디 <input type="text" name="userid" value="${userid}">
				<input type="submit" value="중복 체크">
</form><br>

</body>
</html>

 

member.js에 추가

function idCheck(){
	if(document.frm.userid.value.length==0){
		alert('아이디를 입력해주세요');
		document.frm.userid.focus();
		return;
	}
	var inputid=document.frm.userid.value;
	var opt=
		'toolbar=no, menubar=no, scrollbars=yes, resizable=no, '
		+'width=500, height=200';
	window.open("member.do?command=idcheck&userid="
							+inputid, "idcheck", opt);
}

function joinCheck(){
	if(document.frm.name.value.length==0){
		alert('이름은 필수입력 사항입니다');
		document.frm.name.focus();
		return false;
	} else if(document.frm.userid.value.length==0){
		alert('아이디는 필수입력 사항입니다');
		document.frm.userid.focus();
		return false;
	} else if(document.frm.userid.value!=
				document.frm.reid.value){
		alert("아이디 중복체크를 하지 않으셨습니다");
		document.frm.userid.focus();
		return false;
	}else if(document.frm.pwd.value.length==0){
		alert('비밀번호는 필수입력 사항입니다');
		document.frm.pwd.focus();
		return false;
	} else if(document.frm.pwd.value!=
				document.frm.pwd_check.value){
		alert("비밀번호 확인이 일치하지 않습니다");
		document.frm.pwd.focus();
		return false;
	} else{
		return true;
	}
}

 

회원가입 실행

else if(command.equals("join")) ac=new JoinAction();
package com.mgr.member.controller.action;

import java.io.IOException;

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

import com.mgr.member.dao.MemberDao;
import com.mgr.member.dto.MemberDto;

public class JoinAction implements Action {

	@Override
	public void execute(HttpServletRequest request, 
			HttpServletResponse response) 
			throws ServletException, IOException {
		
		MemberDto mdto=new MemberDto();
		
		mdto.setName(request.getParameter("name"));
		mdto.setUserid(request.getParameter("userid"));
		mdto.setPwd(request.getParameter("pwd"));
		mdto.setEmail(request.getParameter("email"));
		mdto.setPhone(request.getParameter("phone"));
		mdto.setAdmin(Integer.parseInt(request.getParameter("admin")));
		MemberDao mdao=MemberDao.getInstance();
		
		int result=mdao.insertMember(mdto);
		
		if(result==1) request.setAttribute("message", "회원가입 완료");
		else request.setAttribute("message", "회원가입 실패");
		
		//RequestDispatcher dp
		//	=request.getRequestDispatcher("member/loginForm.jsp");
		//dp.forward(request, response);
		
// 리퀘스트 포워딩으로 insert하고 이동한 경우, 
// 새로고침(F5)을 누르면 request에 담겨 있는 같은 값으로 
// 다시 insert하는 동작이 새로 동작함. 
// 그래서 기본키 또는 unique 값 제한에 위배되는 경우가 많음.
// 따라서 insert 명령에 한해서만 response.sendRedirect로 이동함.
		response.sendRedirect("member/loginForm.jsp");
	}
}

 

MemberDao에 insertMember 생성

public int insertMember(MemberDto mdto) {
	int result=0;
	String sql="insert into member values(?,?,?,?,?,?)";
	con=getConnection();
	try {
		pstmt=con.prepareStatement(sql);
		pstmt.setString(1,mdto.getName());
		pstmt.setString(2,mdto.getUserid());
		pstmt.setString(3,mdto.getPwd());
		pstmt.setString(4,mdto.getEmail());
		pstmt.setString(5,mdto.getPhone());
		pstmt.setInt(6,mdto.getAdmin());
		
		result=pstmt.executeUpdate();
	} catch (Exception e) { e.printStackTrace();
	} finally {close();}
	return result;
}
 

 

member list에 update 하기

else if(command.equals("update")) ac=new UpdateAction();
package com.mgr.member.controller.action;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import com.mgr.member.dao.MemberDao;
import com.mgr.member.dto.MemberDto;


public class UpdateAction implements Action {

	@Override
	public void execute(HttpServletRequest request, 
			HttpServletResponse response) throws ServletException, 
			IOException {
		
		MemberDto mdto=new MemberDto();
		mdto.setName(request.getParameter("name"));
		mdto.setUserid(request.getParameter("userid"));
		mdto.setPwd(request.getParameter("pwd"));
		mdto.setEmail(request.getParameter("email"));
		mdto.setPhone(request.getParameter("phone"));
		mdto.setAdmin(Integer.parseInt(request.getParameter("admin")));
		
		MemberDao mdao=MemberDao.getInstance();
		int result=mdao.updateMember(mdto);
		HttpSession session =request.getSession();
		
		if(result==1) {
			request.setAttribute("message", 
					"회원정보를 수정하였습니다");
			session.setAttribute("loginUser", mdto); 
			// 세션 로그인 정보를 수정된 내용으로 교체
		} else {
			request.setAttribute("message", "회원정보 수정하지 못했습니다");
		}
		
		RequestDispatcher dp
			=request.getRequestDispatcher("member.do?command=main");
		dp.forward(request, response);
	}
}

 

MemberDao에 updateMember 추가

public int updateMember(MemberDto mdto) {
	int result=0;
	con=getConnection();
	String sql="update member set name=?, "
			+ "pwd=?, email=?, phone=?, admin=?"
			+ " where userid=?";
	try {
		pstmt=con.prepareStatement(sql);
		pstmt.setString(1,mdto.getName());
		pstmt.setString(2,mdto.getPwd());
		pstmt.setString(3,mdto.getEmail());
		pstmt.setString(4,mdto.getPhone());
		pstmt.setInt(5,mdto.getAdmin());
		pstmt.setString(6,mdto.getUserid());
		result=pstmt.executeUpdate();
	} catch (Exception e) { e.printStackTrace();
	} finally {close();}
	return result;
}
<%@ 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>updateForm</title>
<script src="script/member.js"></script>
</head>
<body>

<h2>회원 정보 수정</h2>
<form action="member.do" method="post" name="frm">
	<input type="hidden" name="command" value="update">
	<table>
		<tr><td>이름</td><td><input type="text" name="name"
				value="${loginUser.name }"></td></tr>
		<tr><td>아이디</td><td>${loginUser.userid }
			<input type="hidden" name="userid" 
				value="${loginUser.userid}"></td></tr>
		<tr><td>암호</td><td>
			<input type="password" name="pwd"
				size="20"></td></tr>
		<tr><td>암호확인</td><td>
			<input type="password" name="pwd_check"
				size="20"></td></tr>
		<tr><td>이메일</td><td>
			<input type="text" name="email" 
				value="${loginUser.email}"></td></tr>
		<tr><td>전화번호</td><td>
			<input type="text" name="phone" 
				value="${loginUser.phone}"></td></tr>
		<tr><td>등급</td><td>
			<c:choose>
				<c:when test="${mdto.admin==0 }">
					<input type="radio" name="admin" value="0" 
						checked="checked">일반회원
					<input type="radio" name="admin" value="1">
					관리자
				</c:when>
				<c:otherwise>
					<input type="radio" name="admin" value="0">
					일반회원
					<input type="radio" name="admin" value="1" 
						checked="checked">관리자
				</c:otherwise>
			</c:choose></td></tr>
			<tr><td colspan="2" align="center">
				<input type="submit" value="확인" 
					onClick="return updateCheck()">&nbsp;&nbsp;
				<input type="reset" value="취소">
				<input type="button" value="메인으로" 
					onClick="member.do?command=main"/></td></tr>
	</table>
</form>
</body>
</html>

 

일반회원, 관리자 전환하기

else if(command.equals("editAdmin")) ac=new EditAdminAction();
package com.mgr.member.controller.action;

import java.io.IOException;

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

import com.mgr.member.dao.MemberDao;
import com.mgr.member.dto.MemberDto;

public class EditAdminAction implements Action {

	@Override
	public void execute(HttpServletRequest request, 
			HttpServletResponse response) 
			throws ServletException, IOException {
		// 전달된 userid로 회원을 검색하여 리턴받은 후
		String userid = request.getParameter("userid");
		MemberDao mdao = MemberDao.getInstance();
		MemberDto mdto=mdao.getMember(userid);

		// 해당 회원의 admin 값의 반대값으로 수정하는 메서드 호출함
		int admin=mdto.getAdmin();
		if(admin==0) admin=1;
		else admin=0;
		
		mdao.editAdmin(userid,admin);
		// main으로 되돌아감
		
		RequestDispatcher rd
			=request.getRequestDispatcher("member.do?command=main");
		rd.forward(request, response);
	}
}

MemberDao에 editAdmin 추가

public void editAdmin(String userid, int admin) {
	String sql="update member set admin=? where userid=?";
	con=getConnection();
		try {
			pstmt=con.prepareStatement(sql);
			pstmt.setInt(1,admin);
			pstmt.setString(2,userid);
			pstmt.executeUpdate();
		} catch (SQLException e) { e.printStackTrace();
		} finally {close();}
}
김두울 등급 변경 클릭
일반회원에서 관리자로 변경됨을 확인

 

회원탈퇴

else if(command.equals("deleteMember")) ac=new DeleteMemberAction();
package com.mgr.member.controller.action;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import com.mgr.member.dao.MemberDao;
import com.mgr.member.dto.MemberDto;

public class DeleteMemberAction implements Action {

	@Override
	public void execute(HttpServletRequest request, 
			HttpServletResponse response) 
			throws ServletException, IOException {
		HttpSession session=request.getSession();
		MemberDto mdto=(MemberDto)session.getAttribute("loginUser");
		
		MemberDao mdao=MemberDao.getInstance();
		mdao.deleteMember(mdto.getUserid());
		session.invalidate();
		
		request.setAttribute("message", mdto.getUserid()+"회원 탈퇴 정상 실행");
		
		// 로그인 페이지로 이동
		RequestDispatcher dp=request.getRequestDispatcher("member/loginForm.jsp");
		dp.forward(request, response);
	}
}

 

MemberDao에 deleteMember 생성

public void deleteMember(String userid) {
	String sql = "delete from member where userid=?";
	con = getConnection();
	try {
		pstmt = con.prepareStatement(sql);
		pstmt.setString(1,  userid);
		pstmt.executeUpdate();
	} catch (SQLException e) { e.printStackTrace();
	} finally { close();  }		
}

 


최종 파일