Eggs Sunny Side Up
본문 바로가기
Web/JSP_Servlet

MVC_개인정보수정

by guswn100059 2023. 4. 26.

update.jsp

<%@page import="kr.smhrd.entity.Member"%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
   
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
	<head>
		<title>Forty by HTML5 UP</title>
		<meta charset="UTF-8" />
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
		<link rel="stylesheet" href="assets/css/main.css" />
		
	</head>
	<style>
	
	</style>
	<body style="text-align: center;">
	
	<%
		// 1) 세션에서 값을 꺼내기
		Member user = (Member)session.getAttribute("user");
	%>

		<!-- Wrapper -->
			<div id="wrapper">
				<!-- Menu -->
					<nav id="Update">	
						<ul class="actions vertical">
							<li><h5>개인정보수정</h5></li>
								<form action="update" method="post">
									<li>접속한 Email : <%=user.getEmail() %></li>
									비밀번호<li><input name="pw" type="password" style="width: 500px; margin: 0 auto;" value="<%=user.getPw()%>"></li>
									전화번호<li><input name="tel" type="text" style="width: 500px; margin: 0 auto;" value="<%=user.getTel()%>"></li>
									주소<li><input name="address" type="text" style="width: 500px; margin: 0 auto;" value="<%=user.getAddress()%>"></li>
									<li><input type="submit" value="UPDATE" class="button fit" style="width: 500px; margin: 0 auto;"></li>
								</form>
						</ul>
					</nav>			
			</div>
		<!-- Scripts -->
			<script src="assets/js/jquery.min.js"></script>
			<script src="assets/js/jquery.scrolly.min.js"></script>
			<script src="assets/js/jquery.scrollex.min.js"></script>
			<script src="assets/js/skel.min.js"></script>
			<script src="assets/js/util.js"></script>
			<!--[if lte IE 8]><script src="assets/js/ie/respond.min.js"></script><![endif]-->
			<script src="assets/js/main.js"></script>
	</body>
</html>

 

GoUpdateController

package kr.smhrd.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.smhrd.dao.MemberDAO;
import kr.smhrd.entity.Member;


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

	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		// 1. 데이터 수집
		
		// 2. 기능 구현
		
		// 3. View 선택
		
		// C -> jsp : forward
		String nextview = "WEB-INF/views/update.jsp";
		RequestDispatcher rd = request.getRequestDispatcher(nextview);
		rd.forward(request, response);
	}

}

 

MemberMapper

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="kr.smhrd.dao.MemberDAO">
<!-- namespace : 짝궁(DAO)가 누구??? -->
	
	<!-- 회원가입 -->
	<!-- 
		#{변수명} : 변수에 데이터 타입에 자동맞춤
			ex) values(#{email})
				=> values('email@eamil.com')
		
		${변수명} : 단순히 집어넣는 타입
			ex) values(#{email})
				=> values(email@email.com)
				=> ERROR!
		
		parameterType : 데이터들을 어디에 담아서 줄거냐
						SQL문에 바인드변수가 2개 이상인 경우 필수
		
		resultType : SQL문 실행 결과
	 -->
	 
	<insert id="join" parameterType="kr.smhrd.entity.Member">
		insert into MEMBER
		values(#{email},
			   #{pw},
			   #{tel},
			   #{address}
		)
	</insert>
	
	<!-- 로그인 기능 
	
	ResultSet rs = psmt.executeQuery();
	
	while(rs.next()){
		String email = rs.getString(1);
		String pw = rs.getString(2);
		String tel = rs.getString(3);
		String address = rs.getString(4);
		
		// DTO에서 기본생성자가 필요한 코드
		Member dto = new Member(email, pw, tel, address);
	}
	
	=> MyBatis에서 resultType으로 끝낼 수 있다.
	-->
	<!--  
	<resultMap type="" id=""></resultMap>
	위 코드로 순서상관없이 사용가능하지만 일일이 써야하기에 비효율적
	-->
	
	<select id="login" 
	parameterType="kr.smhrd.entity.Member" 
	resultType="kr.smhrd.entity.Member">
		select * from MEMBER 
		WHERE email = #{email} AND pw = #{pw}
	</select>
	
	<update id="update"
	parameterType="kr.smhrd.entity.Member">
		update MEMBER
		   set pw = #{pw},
		   	   tel = #{tel},
		   	   address = #{address}
		 where email = #{email}
	</update>


</mapper>

 

MemberDAO

package kr.smhrd.dao;

import java.util.List;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;

import kr.smhrd.entity.Member;

public class MemberDAO {
	// DAO : SQL문을 실행하고, 실행 결과를 리턴
	
	// 1. DB와 연결
	private SqlSessionFactory factory =
			SqlSessionManager.getSqlSessionFactory();
	
	// Mybatis : java(DAO) <=mapping=> sql(xml)
	
	
	// 2. 회원정보를 Member 테이블에 저장하는 기능
	public int join(Member dto) {
		// 1단계) SqlSession 빌려오기
		// true --> auto commit
		SqlSession session = factory.openSession(true);
		
		// 2단계) sql문 실행
		// insert, delete, update : 키워드랑 같은 메소드
		// select : selectOne (한 개만 가져올 때)
		//		  : selectList (여러 개 가져올 때)
		// insert("id", 넣어줄 데이터)
		// parameterType == 메소드의 매개변수
		// insert, delete, update는 resultType이 int로만 고정
		int row = session.insert("join", dto);
		
		// 3단계) 빌려온 SqlSession 반환
		session.close();
		
		// 4단계) SQL문 실행한 결과를 리턴
		// resultType == return type
		return row;
	}
	
	// 2. 로그인 메소드
	public Member login(Member dto) {
		// 1단계. SqlSession 빌려오기
		SqlSession session = factory.openSession(true);
		
		// 2단계. SQL문 실행
		// Select문의 실행결과는 resultType을 따른다.
		// selectOne : resultType 그대로
		// selectList : List<resultType의 데이터 타입>
		Member user = session.selectOne("login", dto);
		
		// 3단계. session 반환하기
		session.close();
		
		// 4단계. 결과 리턴
		return user;
	}
	
	// 3. 개인정보수정 메소드
	public int update(Member dto) {
		SqlSession session = factory.openSession(true);
		
		int row = session.update("update", dto);
		
		session.close();
		
		return row;
	}

}

 

UpdateController

package kr.smhrd.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 kr.smhrd.dao.MemberDAO;
import kr.smhrd.entity.Member;


@WebServlet("/update")
public class UpdateController extends HttpServlet {
	private static final long serialVersionUID = 1L;
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		// 1. 데이터 수집
		request.setCharacterEncoding("UTF-8");
		
		String pw = request.getParameter("pw");
		String tel = request.getParameter("tel");
		String address = request.getParameter("address");
		
		// email은 session으로부터 꺼내오기
		HttpSession session = request.getSession();
		Member user = (Member)session.getAttribute("user");
		String email = user.getEmail();
		
		// DTO 객체로 묶기
		Member dto = new Member();
		dto.setPw(pw);
		dto.setTel(tel);
		dto.setAddress(address);
		dto.setEmail(email);
		
		// 2. 기능 구현
		MemberDAO dao = new MemberDAO();
		int row = dao.update(dto);
		
		// 3. View 선택
		String nextview = "";
		
		if(row>0) {
			nextview = "goMain";
			
			// seesion에 저장된 데이터 업데이트
			session.setAttribute("user", dto);
			
		}else {
			nextview = "update";
		}
		
		response.sendRedirect(nextview);
		
		
	}

}

 

'Web > JSP_Servlet' 카테고리의 다른 글

MVC_FrontController  (1) 2023.05.03
MVC_회원관리 시스템  (1) 2023.04.28
MVC_로그인/로그아웃 시스템  (0) 2023.04.25
MVC_회원가입 시스템  (0) 2023.04.24
Session  (1) 2023.04.19

댓글