✿∘˚˳°∘°
55일차 : mvc2WebProject - 2 본문
20230215
1. 마이페이지( + 정보수정 )
header.jsp
이름 버튼을 클릭하면 마이페이지화면으로 이동
<div class="header-link">
<%if(m == null){%>
<!-- 모달 id와 target 이름 맞추기 -->
<button class="btn bc11 modal-open-btn" target="#login-modal">SIGN IN</button>
<a class="btn bc11" href="/signupFrm.do">SIGN UP</a>
<%}else {%>
<!-- 로그인 성공시 회원 이름 출력 -->
<!-- 마이페이지1 : /mypage1.do -->
<!-- <a class="btn bc11" href="/mypage1.do"><%=m.getMemberName() %></a> -->
<!-- 마이페이지2 : 세션에서 꺼낸 memberId를 키값에넣어 보내줌 -->
<a class="btn bc11" href="/mypage2.do?memberId=<%=m.getMemberId()%>"><%=m.getMemberName() %></a>
<a class="btn bc11" href="/logout.do">LOGOUT</a>
<%} %>
</div>
1 - 1 ) 마이페이지 1 : 세션에 등록되어있는 현재 로그인정보를 이용해 정보수정하기
페이지 이동을 위한 Servlet
package kr.or.iei.member.controller;
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;
/**
* Servlet implementation class Mypage1Servlet
*/
@WebServlet(name = "Mypage1", urlPatterns = { "/mypage1.do" })
public class Mypage1Servlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public Mypage1Servlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//마이페이지 화면에 필요한 데이터는 session에 저장된 정보로 출력
//1. 인코딩
request.setCharacterEncoding("utf-8");
//2. 값추출 - 생략
//3. 비즈니스로직 - session에 저장된 정보를 이용할것 이므로 db작업 필요없음
//4. 결과처리
RequestDispatcher view = request.getRequestDispatcher("/WEB-INF/views/member/mypage1.jsp");
view.forward(request, response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}
mypage1.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>
.input-wrap{
padding: 15px;
}
.input-wrap>label{
font-size: 1.1em;
margin-bottom: 10px;
display: block;
}
.btn-box{
text-align: center;
}
</style>
</head>
<body>
<%@ include file="/WEB-INF/views/common/header.jsp" %>
<div class="page-content">
<div class="page-title">마이페이지1</div>
<form action="/updateMember1.do" method="post">
<div class="input-wrap">
<!-- disable : 수정불가/데이터넘김X | readonly : 수정불가/데이터넘김O -->
<label for="memberNo">회원번호</label>
<!-- 헤더에서 이미 세션에 저장된 정보를 꺼내놨으므로 바로m을 사용할 수 있다. -->
<!-- value주의점 : 자동완성 시 공백이 생기는데 따옴표 안에 공백이 있으면 된단다 value="user02 "공백이 있으면 이렇게 인식된다 -->
<input type="text" name="memberNo" id="memberNo" class="input-form" value="<%=m.getMemberNo()%>" disabled>
</div>
<div class="input-wrap">
<label for="memberId">아이디</label>
<input type="text" name="memberId" id="memberId" class="input-form" value="<%=m.getMemberId()%>" readonly>
</div>
<div class="input-wrap">
<label for="memberPw">비밀번호</label>
<input type="password" name="memberPw" id="memberPw" class="input-form" value="<%=m.getMemberPw()%>">
</div>
<div class="input-wrap">
<label for="memberName">이름</label>
<input type="text" name="memberName" id="memberName" class="input-form" value="<%=m.getMemberName()%>"disabled>
</div>
<div class="input-wrap">
<label for="memberPhone">전화번호</label>
<input type="text" name="memberPhone" id="memberPhone" class="input-form" value="<%=m.getMemberPhone()%>">
</div>
<div class="input-wrap">
<label for="memberAddr">주소</label>
<input type="text" name="memberAddr" id="memberAddr" class="input-form" value="<%=m.getMemberAddr()%>">
</div>
<div class="input-wrap">
<label for="memberLevel">회원등급</label>
<%if(m.getMemberLevel() == 1) {%>
<input type="text" name="memberLevel" id="memberLevel" class="input-form" value="관리자" disabled>
<%}else if(m.getMemberLevel() == 2) {%>
<input type="text" name="memberLevel" id="memberLevel" class="input-form" value="정회원" disabled>
<%}else if(m.getMemberLevel() == 3) {%>
<input type="text" name="memberLevel" id="memberLevel" class="input-form" value="준회원" disabled>
<%} %>
</div>
<div class="input-wrap">
<label for="enrollDate">가입일</label>
<input type="text" name="enrollDate" id="enrollDate" class="input-form" value="<%=m.getEnrollDate() %>" disabled>
</div>
<div class="btn-box">
<button type="submit" class="btn bc66 bs2">정보수정</button>
</div>
</form>
</div>
<%@ include file="/WEB-INF/views/common/footer.jsp" %>
</body>
</html>
정보수정 Servlet
package kr.or.iei.member.controller;
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;
import kr.or.iei.member.model.service.MemberService;
import kr.or.iei.member.model.vo.Member;
/**
* Servlet implementation class UpdateMember1Servlet
*/
@WebServlet(name = "UpdateMember1", urlPatterns = { "/updateMember1.do" })
public class UpdateMember1Servlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public UpdateMember1Servlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1. 인코딩
request.setCharacterEncoding("utf-8");
//2. 값추출
Member member = new Member();
member.setMemberId(request.getParameter("memberId"));
member.setMemberPw(request.getParameter("memberPw"));
member.setMemberPhone(request.getParameter("memberPhone"));
member.setMemberAddr(request.getParameter("memberAddr"));
//3. 비즈니스로직
MemberService service = new MemberService();
int result = service.updateMember(member);
//4. 결과처리
//-> 1) 다시 마이페이지를 바로 띄우는 방법
//RequestDispatcher view = request.getRequestDispatcher("/mypage1.do");
//view.forward(request, response);
//-> 2) msg.jsp를 이용해서 alert창을 띄우고 마이페지로 가는 방법
RequestDispatcher view = request.getRequestDispatcher("/WEB-INF/views/common/msg.jsp");
if(result > 0) {
request.setAttribute("title", "정보수정성공");
request.setAttribute("msg", "정보가 수정되었습니다.");
request.setAttribute("icon", "success");
HttpSession session = request.getSession();
//getAttribute()는 항상 Object타입
Member m = (Member)session.getAttribute("m");
m.setMemberPw(member.getMemberPw());
m.setMemberPhone(member.getMemberPhone());
m.setMemberAddr(member.getMemberAddr());
//session.setAttribute("m", m); 주소를 복사한거기때문에 없어도 된다.
}else {
request.setAttribute("title", "정보수정실패");
request.setAttribute("msg", "정보수정 실패!");
request.setAttribute("icon", "error");
}
//request.setAttribute("loc", "/WEB-INF/views/member/mypage1.jsp");
//위코드X -> 주소창에 코드가 바로 들어감 -> WEB-INF는 바로갈수없음(Servlet을 거쳐야함)
request.setAttribute("loc", "/mypage1.do");
view.forward(request, response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
Service
public int updateMember(Member member) {
Connection conn = JDBCTemplate.getConnection();
int result = dao.updateMember(conn, member);
if(result > 0) {
JDBCTemplate.commit(conn);
}else {
JDBCTemplate.rollback(conn);
}
JDBCTemplate.close(conn);
return result;
}
Dao
public int updateMember(Connection conn, Member member) {
PreparedStatement pstmt = null;
int result = 0;
String query = "update member_tbl set member_pw=?, member_phone=?, member_addr=? where member_id=?";
try {
pstmt = conn.prepareStatement(query);
pstmt.setString(1, member.getMemberPw());
pstmt.setString(2, member.getMemberPhone());
pstmt.setString(3, member.getMemberAddr());
pstmt.setString(4, member.getMemberId());
result = pstmt.executeUpdate();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
JDBCTemplate.close(pstmt);
}
return result;
}
2. 마이페이지2 : DB작업으로 현재 로그인한 사람의 정보를 불러와서 정보수정
정보를 조회하기위한 Servlet( Service와 Dao는 중복체크를 위해 작성했던 selectOneMember(memberId)메소드 이용
package kr.or.iei.member.controller;
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 kr.or.iei.member.model.service.MemberService;
import kr.or.iei.member.model.vo.Member;
/**
* Servlet implementation class Mypage2Servlet
*/
@WebServlet(name = "Mypage2", urlPatterns = { "/mypage2.do" })
public class Mypage2Servlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public Mypage2Servlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1.인코딩
request.setCharacterEncoding("utf-8");
//2.값추출
String memberId = request.getParameter("memberId");
//3.비즈니스로직 - 아이디중복체크할때 사용한걸 활용
MemberService service = new MemberService();
Member m = service.selectOneMember(memberId);
//4.결과처리
RequestDispatcher view = request.getRequestDispatcher("/WEB-INF/views/member/mypage2.jsp");
request.setAttribute("m", m);
view.forward(request, response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
mypage2.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
Member member = (Member)request.getAttribute("m");
//헤더에서 선언한 Member m과 중복되면 에러가 발생하므로 변수명을 다르게 해준다
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style>
.input-wrap{
padding: 15px;
}
.input-wrap>label{
font-size: 1.1em;
margin-bottom: 10px;
display: block;
}
.btn-box{
text-align: center;
}
</style>
</head>
<body>
<%@ include file="/WEB-INF/views/common/header.jsp" %>
<div class="page-content">
<div class="page-title">마이페이지2</div>
<form action="/updateMember2.do" method="post">
<div class="input-wrap">
<label for="memberNo">회원번호</label>
<input type="text" name="memberNo" id="memberNo" class="input-form" value="<%=member.getMemberNo()%>" disabled>
</div>
<div class="input-wrap">
<label for="memberId">아이디</label>
<input type="text" name="memberId" id="memberId" class="input-form" value="<%=member.getMemberId()%>" readonly>
</div>
<div class="input-wrap">
<label for="memberPw">비밀번호</label>
<input type="password" name="memberPw" id="memberPw" class="input-form" value="<%=member.getMemberPw()%>">
</div>
<div class="input-wrap">
<label for="memberName">이름</label>
<input type="text" name="memberName" id="memberName" class="input-form" value="<%=member.getMemberName()%>"disabled>
</div>
<div class="input-wrap">
<label for="memberPhone">전화번호</label>
<input type="text" name="memberPhone" id="memberPhone" class="input-form" value="<%=member.getMemberPhone()%>">
</div>
<div class="input-wrap">
<label for="memberAddr">주소</label>
<input type="text" name="memberAddr" id="memberAddr" class="input-form" value="<%=member.getMemberAddr()%>">
</div>
<div class="input-wrap">
<label for="memberLevel">회원등급</label>
<%if(member.getMemberLevel() == 1) {%>
<input type="text" name="memberLevel" id="memberLevel" class="input-form" value="관리자" disabled>
<%}else if(member.getMemberLevel() == 2) {%>
<input type="text" name="memberLevel" id="memberLevel" class="input-form" value="정회원" disabled>
<%}else if(member.getMemberLevel() == 3) {%>
<input type="text" name="memberLevel" id="memberLevel" class="input-form" value="준회원" disabled>
<%} %>
</div>
<div class="input-wrap">
<label for="enrollDate">가입일</label>
<input type="text" name="enrollDate" id="enrollDate" class="input-form" value="<%=member.getEnrollDate() %>" disabled>
</div>
<div class="btn-box">
<button type="submit" class="btn bc66 bs2">정보수정</button>
<%if(m.getMemberLevel() == 1) {%>
<a class="btn bc6 bs2" href="/adminPage.do">회원관리</a>
<%} else{ %>
<a class="btn bc6 bs2" href="/deleteMember.do">회원탈퇴</a>
<%} %>
</div>
</form>
</div>
<%@ include file="/WEB-INF/views/common/footer.jsp" %>
</body>
</html>
정보 수정을 진행할 Servlet(Service와 Dao는 마이페이지1에서 작성한 코드를 사용)
package kr.or.iei.member.controller;
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;
import kr.or.iei.member.model.service.MemberService;
import kr.or.iei.member.model.vo.Member;
/**
* Servlet implementation class UpdateMember2Servlet
*/
@WebServlet(name = "UpdateMember2", urlPatterns = { "/updateMember2.do" })
public class UpdateMember2Servlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public UpdateMember2Servlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1. 인코딩
request.setCharacterEncoding("utf-8");
//2. 값추출
Member member = new Member();
member.setMemberId(request.getParameter("memberId"));
member.setMemberPw(request.getParameter("memberPw"));
member.setMemberPhone(request.getParameter("memberPhone"));
member.setMemberAddr(request.getParameter("memberAddr"));
//3. 비즈니스로직
MemberService service = new MemberService();
int result = service.updateMember(member);
//4. 결과처리
RequestDispatcher view = request.getRequestDispatcher("/WEB-INF/views/common/msg.jsp");
if(result > 0) {
request.setAttribute("title", "정보수정성공");
request.setAttribute("msg", "정보가 수정되었습니다.");
request.setAttribute("icon", "success");
}else {
request.setAttribute("title", "정보수정실패");
request.setAttribute("msg", "정보수정 실패!");
request.setAttribute("icon", "error");
}
//아이디를 넘기지 않았으므로 null로 빠져서 에러발생
request.setAttribute("loc", "/mypage2.do?memberId="+member.getMemberId());
view.forward(request, response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
3. 관리자페이지
관리자에겐 회원전체정보를 확인할 수 있는 페이지를 / 일반회원에겐 회원탈퇴버튼을 만들어준다.
<%if(m.getMemberLevel() == 1) {%>
<a class="btn bc6 bs2" href="/adminPage.do">회원관리</a>
<%} else{ %>
<a class="btn bc6 bs2" href="/deleteMember.do">회원탈퇴</a>
<%} %>
3 - 1 ) 회원관리 페이지(+ 회원등급변경 )
전체회원 조회를 위한 Servlet
package kr.or.iei.member.controller;
import java.io.IOException;
import java.util.ArrayList;
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;
import kr.or.iei.member.model.service.MemberService;
import kr.or.iei.member.model.vo.Member;
/**
* Servlet implementation class AdminPageServlet
*/
@WebServlet(name = "AdminPage", urlPatterns = { "/adminPage.do" })
public class AdminPageServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public AdminPageServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1.인코딩
request.setCharacterEncoding("utf-8");
//2.값추출 - 세션을 검증해주지 않으면 주소창만 알고있어도 페이지이동+등급변경이 가능하다
//메인페이지에 들르면 자동으로 session이 생성됨 - else로 또다시 체크해줘야한다
HttpSession session = request.getSession(false);
Member m = (Member)session.getAttribute("m");
if(m != null) {
//로그인이 된 경우
if(m.getMemberLevel() != 1){
//로그인은 했으나 해당회원의 level이 1이 아닌경우(관리자가 아닌경우)
RequestDispatcher view = request.getRequestDispatcher("/WEB-INF/views/common/msg.jsp");
request.setAttribute("title", "?????");
request.setAttribute("msg", "관리자만 이용 가능합니다.");
request.setAttribute("icon", "warning");
request.setAttribute("loc", "/");
view.forward(request, response);
return;
}
}else {
//로그인이 안된 경우
RequestDispatcher view = request.getRequestDispatcher("/WEB-INF/views/common/msg.jsp");
request.setAttribute("title", "접근제한");
request.setAttribute("msg", "로그인 후 이용 가능합니다.");
request.setAttribute("icon", "info");
request.setAttribute("loc", "/");
view.forward(request, response);
return;
}
/*
if(session == null) {
//세션이 만들어지지 않은상태
RequestDispatcher view = request.getRequestDispatcher("/WEB-INF/views/common/msg.jsp");
request.setAttribute("title", "접근제한");
request.setAttribute("msg", "로그인 후 이용 가능합니다.");
request.setAttribute("icon", "info");
request.setAttribute("loc", "/");
view.forward(request, response);
return;
}else {
//세션이 만들어진 상태
Member m = (Member)session.getAttribute("m");
if(m == null) {
//로그인을 하지않은 상태
RequestDispatcher view = request.getRequestDispatcher("/WEB-INF/views/common/msg.jsp");
request.setAttribute("title", "접근제한");
request.setAttribute("msg", "로그인 후 이용 가능합니다.");
request.setAttribute("icon", "info");
request.setAttribute("loc", "/");
view.forward(request, response);
return;
}else if(m.getMemberLevel() != 1){
//로그인은 했으나 해당회원의 level이 1이 아닌경우(관리자가 아닌경우)
RequestDispatcher view = request.getRequestDispatcher("/WEB-INF/views/common/msg.jsp");
request.setAttribute("title", "?????");
request.setAttribute("msg", "관리자만 이용 가능합니다.");
request.setAttribute("icon", "warning");
request.setAttribute("loc", "/");
view.forward(request, response);
return;
}
}*/
//3.비즈니스로직
//전체회원정보 조회
MemberService service = new MemberService();
ArrayList<Member> list = service.selectAllMember();
//4.결과처리
RequestDispatcher view = request.getRequestDispatcher("/WEB-INF/views/member/adminPage.jsp");
request.setAttribute("list", list);
view.forward(request, response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
Service
public ArrayList<Member> selectAllMember() {
Connection conn = JDBCTemplate.getConnection();
ArrayList<Member> list = dao.selectAllMember(conn);
JDBCTemplate.close(conn);
return list;
}
Dao
public ArrayList<Member> selectAllMember(Connection conn) {
PreparedStatement pstmt = null;
ResultSet rset = null;
ArrayList<Member> list = new ArrayList<Member>();
String query = "select * from member_tbl order by 1";
try {
pstmt = conn.prepareStatement(query);
rset = pstmt.executeQuery();
while(rset.next()) {
Member m = new Member();
m.setEnrollDate(rset.getString("enroll_date"));
m.setMemberAddr(rset.getString("member_addr"));
m.setMemberId(rset.getString("member_id"));
m.setMemberLevel(rset.getInt("member_level"));
m.setMemberName(rset.getString("member_name"));
m.setMemberNo(rset.getInt("member_no"));
m.setMemberPhone(rset.getString("member_phone"));
m.setMemberPw(rset.getString("member_pw"));
list.add(m);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
JDBCTemplate.close(pstmt);
JDBCTemplate.close(rset);
}
return list;
}
정보를 받아와 화면에 보여줄 View
<%@page import="kr.or.iei.member.model.vo.Member"%>
<%@page import="java.util.ArrayList"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
ArrayList<Member> list = (ArrayList<Member>)request.getAttribute("list");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%@include file="/WEB-INF/views/common/header.jsp" %>
<div class="page-content">
<div class="page-title">회원관리</div>
<table class="tbl tbl-hover">
<tr class="tr-3">
<th>선택</th>
<th>회원번호</th>
<th>아이디</th>
<th>이름</th>
<th>전화번호</th>
<th>주소</th>
<th>가입일</th>
<th>회원등급</th>
<th>등급변경</th>
</tr>
<%for(Member member : list) {%>
<tr class="tr-1">
<td><input type="checkbox" class="chk"></td>
<td><%=member.getMemberNo() %></td>
<td><%=member.getMemberId() %></td>
<td><%=member.getMemberName() %></td>
<td><%=member.getMemberPhone() %></td>
<td><%=member.getMemberAddr() %></td>
<td><%=member.getEnrollDate() %></td>
<td>
<%if(member.getMemberLevel() == 1) {%>
<select class="input-form">
<option value="1" selected>관리자</option>
<option value="2">정회원</option>
<option value="3">준회원</option>
</select>
<%} else if(member.getMemberLevel() == 2) {%>
<select class="input-form">
<option value="1">관리자</option>
<option value="2" selected>정회원</option>
<option value="3">준회원</option>
</select>
<%} else if(member.getMemberLevel() == 3) {%>
<select class="input-form">
<option value="1">관리자</option>
<option value="2">정회원</option>
<option value="3" selected>준회원</option>
</select>
<%} %>
</td>
<td>
<button class="btn bc5 changeLevel">등급변경</button>
</td>
</tr>
<%} %>
<tr>
<th colspan="9">
<button class="btc bc2 bs4 checkedChangeLevel">선택회원등급변경</button>
</th>
</tr>
</table>
</div>
<script>
$(".changeLevel").on("click", function(){
//클릭한 버튼을 기준으로 해당 회원의 번호
const memberNo = $(this).parent().parent().children().eq(1).text();
//클릭한 버튼을 기준으로 선택한 등급
const memberLevel = $(this).parent().prev().children().val();
//회원등급에 필요한 정보수집은 끝 -> 회원번호, 선택한등급
//-> 서버에 update요청을 해줘야함(1. 폼태그로 요청 / 2. a태그로 요청)
//-> 지금은 form도 a태그도 아닌 javascript(폼/a태그를 만들어서 요청이 가능하긴함)
//-> a태그 요청 <a href="/서블릿주소?key1=value1&key2=value2"> -> 이역할을 해주는 javascript함수가 잇음
// location.href
location.href = "/changeLevel.do?memberNo="+memberNo+"&memberLevel="+memberLevel;
});
$(".checkedChangeLevel").on("click", function(){
const check = $(".chk:checked");
if(check.length == 0){
alert("선택된 회원이 없습니다.");
return;
}
//체크된 회원번호를 저장할 배열
const no = new Array();
//체크된 회원의 등급을 저장할 배열
const level = new Array();
//체크된 체크박스 기준으로 회원번호, 등급을 찾아서 배열에 넣는 작업
check.each(function(index, item){
const memberNo = $(item).parent().next().text();
no.push(memberNo);
//check기준으로 td -> tr -> 후손중에 select찾기
const memberLevel = $(item).parent().parent().find("select").val();
level.push(memberLevel);
});
//location.href="/checkedChangeLevel.do?no="+no+"&level="+level;
//넘겨줄값이 여러개인경우 no=1,2 level=1,2 이런식으로 값이 나감
//join()이용
location.href="/checkedChangeLevel.do?no="+no.join("/")+"&level="+level.join("/");
});
</script>
<%@include file="/WEB-INF/views/common/footer.jsp" %>
</body>
</html>
- 회원 등급 변경(등급변경 버튼을 클릭해서 변경)
<button class="btn bc5 changeLevel">등급변경</button>
버튼 관련 스크립트(현재등급과 회원번호를 서블릿에 보내주기위함)
<script>
$(".changeLevel").on("click", function(){
//클릭한 버튼을 기준으로 해당 회원의 번호
const memberNo = $(this).parent().parent().children().eq(1).text();
//클릭한 버튼을 기준으로 선택한 등급
const memberLevel = $(this).parent().prev().children().val();
//회원등급에 필요한 정보수집은 끝 -> 회원번호, 선택한등급
//-> 서버에 update요청을 해줘야함(1. 폼태그로 요청 / 2. a태그로 요청)
//-> 지금은 form도 a태그도 아닌 javascript(폼/a태그를 만들어서 요청이 가능하긴함)
//-> a태그 요청 <a href="/서블릿주소?key1=value1&key2=value2"> -> 이역할을 해주는 javascript함수가 잇음
// location.href
location.href = "/changeLevel.do?memberNo="+memberNo+"&memberLevel="+memberLevel;
});
</scipt>
등급변경 Servlet
package kr.or.iei.member.controller;
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 kr.or.iei.member.model.service.MemberService;
/**
* Servlet implementation class ChangeLevelServlet
*/
@WebServlet(name = "ChangeLevel", urlPatterns = { "/changeLevel.do" })
public class ChangeLevelServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public ChangeLevelServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1. 인코딩
request.setCharacterEncoding("utf-8");
//2. 값추출
int memberNo = Integer.parseInt(request.getParameter("memberNo"));
int memberLevel = Integer.parseInt(request.getParameter("memberLevel"));
System.out.println("memberNo : "+memberNo);
System.out.println("memberLevel : "+memberLevel);
//3. 비즈니스로직
MemberService service = new MemberService();
int result = service.changeLevel(memberNo, memberLevel);
//4. 결과처리
// 변경성공 : 관리자페이지로 이동
// 변경실패 : alert메세지 띄운 후 관리자페이지
if(result > 0) {
//주소창을 변경
response.sendRedirect("/adminPage.do");
// RequestDispatcher로 페이지이동 시켜줄수는 있음 -> 사용하면 안되는 이유가 있음
// 화면을 만들기위해서는 반드시 arrayList를 받아와야하는데 이방식으로 보내면 ArrayList가 없음
// RequestDispatcher를 사용할거면 ArrayList<Member> list = service.selectAllMember()를 하고
// list값을 저장하고 view.forward로 보내줘야함 - 모두 adminPage.do에서 하고있는 것
}else {
RequestDispatcher view = request.getRequestDispatcher("/WEB-INF/views/common/msg.jsp");
request.setAttribute("title", "등급 변경 실패");
request.setAttribute("msg", "등급 변경 중 문제가 발생했습니다.");
request.setAttribute("icon", "warning");
request.setAttribute("loc", "/adminPage.do");
view.forward(request, response);
}
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
Service
public int changeLevel(int memberNo, int memberLevel) {
Connection conn = JDBCTemplate.getConnection();
int result = dao.changeLevel(conn, memberNo, memberLevel);
if(result > 0) {
JDBCTemplate.commit(conn);;
}else {
JDBCTemplate.rollback(conn);
}
JDBCTemplate.close(conn);
return result;
}
Dao
public int changeLevel(Connection conn, int memberNo, int memberLevel) {
PreparedStatement pstmt = null;
int result = 0;
String query = "update member_tbl set member_level = ? where member_no = ?";
try {
pstmt = conn.prepareStatement(query);
pstmt.setInt(1, memberLevel);
pstmt.setInt(2, memberNo);
result = pstmt.executeUpdate();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
JDBCTemplate.close(pstmt);
}
return result;
}
- 회원 등급 변경(선택한 회원의 등급을 한번에 변경)
아래 버튼을 클릭해서 변경해줄 것
<button class="btc bc2 bs4 checkedChangeLevel">선택회원등급변경</button>
관련 스크립트 - 체크된 회원의 회원번호/등급을 찾아 servlet에 보내주기위해
<script>
$(".checkedChangeLevel").on("click", function(){
const check = $(".chk:checked");
if(check.length == 0){
alert("선택된 회원이 없습니다.");
return;
}
//체크된 회원번호를 저장할 배열
const no = new Array();
//체크된 회원의 등급을 저장할 배열
const level = new Array();
//체크된 체크박스 기준으로 회원번호, 등급을 찾아서 배열에 넣는 작업
check.each(function(index, item){
const memberNo = $(item).parent().next().text();
no.push(memberNo);
//check기준으로 td -> tr -> 후손중에 select찾기
const memberLevel = $(item).parent().parent().find("select").val();
level.push(memberLevel);
});
//location.href="/checkedChangeLevel.do?no="+no+"&level="+level;
//넘겨줄값이 여러개인경우 no=1,2 level=1,2 이런식으로 값이 나감
//join()이용
location.href="/checkedChangeLevel.do?no="+no.join("/")+"&level="+level.join("/");
});
</script>
Servlet
package kr.or.iei.member.controller;
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 kr.or.iei.member.model.service.MemberService;
/**
* Servlet implementation class CheckedChangeLevelServlet
*/
@WebServlet(name = "CheckedChangeLevel", urlPatterns = { "/checkedChangeLevel.do" })
public class CheckedChangeLevelServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public CheckedChangeLevelServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1. 인코딩
request.setCharacterEncoding("utf-8");
//2. 값 추출
// 추출값은 join("/")때문에 no=3/4 level=1/2 형식으로 들어옴 -> 실제로 사용하는건 숫자 -> 일단은 문자열로 받고 잘라서사용
String no = request.getParameter("no");
String level = request.getParameter("level");
//no랑 level은 데이터편집작업을 해줘야함 -> 이것도 service에서 한다
//3. 비즈니스로직
MemberService service = new MemberService();
//boolean으로 받는 이유 : update문을 여러번 돌리기 때문에 전부 성공했을때 / 한번이라고 실패했을 때를 나눌 것
boolean result = service.checkedChangeLevel(no, level);
//4. 결과처리
RequestDispatcher view = request.getRequestDispatcher("/WEB-INF/views/common/msg.jsp");
if(result) {
request.setAttribute("title", "정보변경 성공");
request.setAttribute("msg", "요청이 처리되었습니다.");
request.setAttribute("icon", "success");
}else {
request.setAttribute("title", "정보변경 실패");
request.setAttribute("msg", "요청 처리 중 문제가 발생했습니다.");
request.setAttribute("icon", "error");
}
request.setAttribute("loc", "/adminPage.do");
view.forward(request, response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
Service
public boolean checkedChangeLevel(String no, String level) {
Connection conn = JDBCTemplate.getConnection();
//no : 1/4/7
//level : 1/2/3
//-> 따로따로 분리를 해야 no:1에 level:1를 넣을 수 있음 -> StringTokenizer 이용
//no라는 문자열을 "/"로 자르고 nextToken으로 하나달라고 요청
StringTokenizer sT1 = new StringTokenizer(no, "/");
StringTokenizer sT2 = new StringTokenizer(level, "/");
boolean result = true;
while(sT1.hasMoreTokens()) {//sT1에 토큰남아있어?
int memberNo = Integer.parseInt(sT1.nextToken());
int memberLevel = Integer.parseInt(sT2.nextToken());
int changeResult = dao.changeLevel(conn, memberNo, memberLevel);
if(changeResult == 0) {
result = false;
break; //한번이라도 실패하면 더이상 update를 할 필요가 없으므로 while문 종료
}
}
if(result) {
JDBCTemplate.commit(conn);
}else {
JDBCTemplate.rollback(conn);
}
JDBCTemplate.commit(conn);
return result;
}
Dao
public int changeLevel(Connection conn, int memberNo, int memberLevel) {
PreparedStatement pstmt = null;
int result = 0;
String query = "update member_tbl set member_level = ? where member_no = ?";
try {
pstmt = conn.prepareStatement(query);
pstmt.setInt(1, memberLevel);
pstmt.setInt(2, memberNo);
result = pstmt.executeUpdate();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
JDBCTemplate.close(pstmt);
}
return result;
}
'국비수업 > Server' 카테고리의 다른 글
57일차 : mvc2WebProject - 4 (0) | 2023.02.19 |
---|---|
56일차 : mvc2WebProject - 3 (0) | 2023.02.16 |
54일차 : mvc2WebProject - 1 (0) | 2023.02.16 |
53일차 : JSP, MVC1, MVC2 (0) | 2023.02.16 |
52일차 : DB연결 (0) | 2023.02.10 |
Comments