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 |
댓글