📝 회원 정보 수정 기능
💡 VS Code
🔎 myPage-info.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>My Page</title>
<link rel="stylesheet" href="../resources/css/main-style.css">
<link rel="stylesheet" href="../resources/css/myPage-style.css">
<script src="https://kit.fontawesome.com/4dca1921b4.js" crossorigin="anonymous"></script>
</head>
<body>
<main>
<header>
<section>
<a href="#">
<img src="resources/images/logo.jpg" id="home-logo">
</a>
</section>
<section>
<article class="search-area">
<form action="#" name="search form">
<fieldset>
<input type="search" id="query" name="query"
placeholder="검색어를 입력해주세요" autocomplete="off">
<button type="submit" id="search-btn" class="fa-solid fa-magnifying-glass"></button>
</fieldset>
</form>
</article>
</section>
<section></section>
</header>
<nav>
<ul>
<li><a href=#>공지사항</a></li>
<li><a href=#>자유 게시판</a></li>
<li><a href=#>질문 게시판</a></li>
<li><a href=#>FAQ</a></li>
<li><a href=#>1:1문의</a></li>
</ul>
</nav>
<section class="myPage-content">
<section class="left-side">
사이드 메뉴
<ul class="list-group">
<li> <a href="#">프로필</a> </li>
<li> <a href="#">내 정보</a> </li>
<li> <a href="#">비밀번호 변경</a> </li>
<li> <a href="#">회원 탈퇴</a> </li>
</ul>
</section>
<section class="myPage-main">
<h1 class="myPage-title">내 정보</h1>
<span class="myPage-explanation">원하는 회원 정보를 수정할 수 있습니다.</span>
<form action="#" method="POST" name="myPage-form">
<div class="myPage-row">
<label>닉네임</label>
<input type="text" name="memberNickname" value="로그인 회원 별명" maxlength="10">
</div>
<div class="myPage-row">
<label>전화번호</label>
<input type="text" name="memberTel" value="01012341234" maxlength="11">
</div>
<div class="myPage-row info-title">
<span>주소</span>
</div>
<div class="myPage-row info-address">
<input type="text" name="memberAddress" value="우편번호" maxlength="6">
<button type="button" id="info-address-btn">검색</button>
</div>
<div class="myPage-row info-address">
<input type="text" name="memberAddress" value="도로명주소">
</div>
<div class="myPage-row info-address">
<input type="text" name="memberAddress" value="상세주소">
</div>
<button id="info-update-btn">수정하기</button>
</form>
</section>
</section>
</main>
<footer>
<p>Copyright © KH Information Educational Institute M-Class</p>
<article>
<a href="#">프로젝트 소개</a>
<span>|</span>
<a href="#">이용약관</a>
<span>|</span>
<a href="#">개인정보처리방침</a>
<span>|</span>
<a href="#">고객센터</a>
</article>
</footer>
</body>
</html>
🔎 myPage-style.css
.myPage-content{
width: 1000px;
height: 800px;
margin: 50px auto;
display: flex;
}
.left-side{
width: 25%;
border-right: 2px solid #ddd;
}
.list-group{
width: 100%;
padding: 0 20px 0 0;
}
.list-group > li{
list-style: none;
height: 50px;
font-size: 18px;
}
.list-group > li > a{
text-decoration: none;
color: black;
height: 100%;
border-bottom: 2px solid #ddd;
display: flex;
justify-content: center;
align-items: center;
}
.list-group > li:hover{
background-color: #f2f2f2;
}
.myPage-main{
width: 75%;
padding: 0 50px;
}
.myPage-title{
margin: 0 0 10px 0;
font-size: 30px;
}
.myPage-explanation{
display: block;
font-size: 14px;
margin-bottom: 30px;
letter-spacing: -1px;
}
.myPage-row{
width: 500px;
height: 50px;
margin-top: 20px;
display: flex;
align-items: center;
border-bottom: 2px solid #ddd;
}
.myPage-row > *{
font-size: 18px;
font-weight: bold;
}
.myPage-row > label{
width: 30%;
color: #455ba8;
}
.myPage-row > span{
width: 70%;
}
.myPage-row > input{
width: 100%;
height: 100%;
border: 0;
outline: 0;
font-weight: normal;
}
.myPage-row:focus-within{
border-bottom: 2px solid #455ba8;
}
form[name="myPage-form"]{
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
}
.info-title{
color: #455ba8;
border: 0;
}
.info-address{ margin: 0; }
#info-address-btn{
width: 30%;
height: 70%;
font-size: 14px;
font-weight: normal;
background-color: white;
border: 1px solid gray;
cursor: pointer;
}
#info-update-btn{
width: 100%;
padding: 10px;
margin: 50px 0;
border: none;
font-size: 20px;
font-weight: bold;
background-color: #455ba8;
color: white;
cursor: pointer;
}
💡 Eclipse
🔎 myPage-info.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%-- 문자열 관련 함수(메소드) 제공 JSTL (EL 형식으로 작성) --%>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>My Page</title>
<link rel="stylesheet" href="${contextPath}/resources/css/main-style.css">
<link rel="stylesheet" href="${contextPath}/resources/css/myPage-style.css">
<script src="https://kit.fontawesome.com/4dca1921b4.js" crossorigin="anonymous"></script>
</head>
<body>
<main>
<jsp:include page="/WEB-INF/views/common/header.jsp"/>
<section class="myPage-content">
<section class="left-side">
사이드 메뉴
<ul class="list-group">
<li> <a href="#">프로필</a> </li>
<li> <a href="#">내 정보</a> </li>
<li> <a href="#">비밀번호 변경</a> </li>
<li> <a href="#">회원 탈퇴</a> </li>
</ul>
</section>
<section class="myPage-main">
<h1 class="myPage-title">내 정보</h1>
<span class="myPage-explanation">원하는 회원 정보를 수정할 수 있습니다.</span>
<form action="#" method="POST" name="myPage-form">
<div class="myPage-row">
<label>닉네임</label>
<input type="text" name="memberNickname" value="${loginMember.memberNickname}" maxlength="10">
</div>
<div class="myPage-row">
<label>전화번호</label>
<input type="text" name="memberTel" value="${loginMember.memberTel}" maxlength="11">
</div>
<c:set var="addr" value="${fn:split(loginMember.memberAddress, ',,')}"/>
<div class="myPage-row info-title">
<span>주소</span>
</div>
<div class="myPage-row info-address">
<input type="text" name="memberAddress" value="${addr[0]}" maxlength="6">
<button type="button" id="info-address-btn">검색</button>
</div>
<div class="myPage-row info-address">
<input type="text" name="memberAddress" value="${addr[1]}">
</div>
<div class="myPage-row info-address">
<input type="text" name="memberAddress" value="${addr[2]}">
</div>
<button id="info-update-btn">수정하기</button>
</form>
</section>
</section>
</main>
<jsp:include page="/WEB-INF/views/common/footer.jsp"/>
</body>
</html>
🔎 index.jsp
.
.
.
</c:when>
<%-- 로그인이 되어 있는 경우 --%>
<c:otherwise>
<article class='login-area'>
<a href="#">
<img src="/community/resources/images/user.png" id="member-profile">
</a>
<div class="my-info">
<div>
<a href="${contextPath}/member/myPage/info" id="nickname">${sessionScope.loginMember.memberNickname}</a>
<a href="/community/member/logout" id="logout-btn">로그아웃</a>
</div>
<p>
${sessionScope.loginMember.memberEmail}
</p>
</div>
</article>
</c:otherwise>
</c:choose>
.
.
.
🔎 MyPageInfoServlet.java
package edu.kh.community.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 javax.servlet.http.HttpSession;
import edu.kh.community.member.model.service.MemberService;
import edu.kh.community.member.model.vo.Member;
@WebServlet("/member/myPage/info")
public class MyPageInfoServlet extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String path = "/WEB-INF/views/member/myPage-info.jsp";
req.getRequestDispatcher(path).forward(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String memberNickname = req.getParameter("memberNickname");
String memberTel = req.getParameter("memberTel");
String[] address = req.getParameterValues("memberAddress");
String memberAddress = null;
if(!address[0].equals("")) {
memberAddress = String.join(",,", address);
}
HttpSession session = req.getSession();
Member loginMember = (Member)( session.getAttribute("loginMember") );
int memberNo = loginMember.getMemberNo();
Member mem = new Member();
mem.setMemberNo(memberNo);
mem.setMemberNickname(memberNickname);
mem.setMemberTel(memberTel);
mem.setMemberAddress(memberAddress);
try {
MemberService service = new MemberService();
int result = service.updateMember(mem);
if(result > 0) {
session.setAttribute("message", "회원 정보가 수정되었습니다.");
loginMember.setMemberNickname(memberNickname);
loginMember.setMemberTel(memberTel);
loginMember.setMemberAddress(memberAddress);
} else {
session.setAttribute("message", "회원 정보 수정 실패 ㅜ.ㅜ");
}
resp.sendRedirect( req.getContextPath() + "/member/myPage/info" );
} catch(Exception e) {
e.printStackTrace();
}
}
}
🔎 MemberService.java
.
.
.
public int updateMember(Member mem) throws Exception{
Connection conn = getConnection();
int result = dao.updateMember(conn, mem);
if(result > 0) commit(conn);
else rollback(conn);
close(conn);
return result;
}
.
.
.
🔎 MembeDAO.java
.
.
.
public int updateMember(Connection conn, Member mem) throws Exception {
int result = 0;
try {
String sql = prop.getProperty("updateMember");
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, mem.getMemberNickname());
pstmt.setString(2, mem.getMemberTel());
pstmt.setString(3, mem.getMemberAddress());
pstmt.setInt( 4, mem.getMemberNo());
result = pstmt.executeUpdate();
} finally {
close(pstmt);
}
return result;
}
.
.
.