60. 스프링으로 마이페이지 만들기

hanahana·2022년 9월 7일
0

Spring 학원수강

목록 보기
7/45
post-thumbnail

사용자 정보를 출력할 jsp를 만든다.

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>회원정보 수정</title>
</head>
<body>

<h1 align="center">회원정보수정</h1>
	<div class="">
		<form action="/member/modify.kh" method="post">
			<table>
				<tr>
					<td>* 아이디</td>
					<td><input type="text" id="memberId" name="memberId" value="${member.memberId }" readonly>
					</td>
				</tr>
				<tr>
					<td>* 비밀번호</td>
					<td><input type="password" name="memberPw" value=""></td>
				</tr>
				<tr>
					<td>* 이름</td>
					<td><input type="text" name="memberName" value="${member.memberName }" readonly></td>
				</tr>

				<tr>
					<td>* 이메일</td>
					<td><input type="text" name="memberEmail" value="${member.memberEmail }"></td>
				</tr>
				<tr>
					<td>* 전화번호</td>
					<td><input type="text" name="memberPhone" value="${member.memberPhone }"></td>
				</tr>
				<tr>
					<td>* 우편번호</td>
					<td><input type="text" name="post" value="${post }" ></td>
					<!-- 배열로 값을 받았다면 ${addreess[0]}으로 표기하여 출력할수 있다-->
				</tr>
				<tr>
					<td>* 주소</td>
					<td><input type="text" name="address" value="${address }"></td>
				</tr>
				<tr>
				<td colspan="2" align="center">
			<input type="submit" value="수정하기">
			<button type="button" onclick="removeMember();"> 탈퇴하기 </button>
			<!-- //type을 button으로 꼭 적어줘야! submit이 되지 않는다!! 꼭 기억하기!
				 -->
				</td>
				</tr>
			</table>
			
		</form>
	</div>

<script>
function removeMember() {
	if(window.confirm("탈퇴하시겠습니까?")){
	location.href="/member/remove.kh";
	}
	
}
</script>
</body>
</html>
  • 정보가 출력될 value는 member에 담길걸 예상해서 member안에 변수명으로 넣어주었다.
  • 우편번호와 주소는 Controller안에서 ,로 잘라 전달할것이다.
  • 수정할 form주소와 탈퇴 영역이 정해져있다.
  • 탈퇴시에는 type을 button으로 지정해야 button이 submit의 역할을 하지 않는다.
  • 탈퇴시에는 자바스크립트로 탈퇴확인을 받는다.

Controller에서 전송값 받고 전달하기

@RequestMapping(value = "/member/myPage.kh", method = RequestMethod.GET)
	public ModelAndView viewMyPage(HttpServletRequest request,
			ModelAndView mv) {
		HttpSession session = request.getSession();
		Member member = (Member) session.getAttribute("loginUser");
		String memberId = member.getMemberId();
		Member mOne = mService.printOneById(memberId);
		String post = mOne.getMemberAddress().split(",")[0];
		String address = mOne.getMemberAddress().split(",")[1];

		try {
			mv.addObject("member", mOne);
			mv.addObject("post", post);
			mv.addObject("address", address);
			mv.setViewName("member/myPage");

		} catch (Exception e) {

			mv.addObject("msg", e.getMessage());
			mv.setViewName("common/errorPage");

		}
		return mv;
	}
  • 반환값을 ModelAndView로 설정하였다, 이 값이 있으며 return이나 값 전달을 위해 model을 사용할 필요가 없다.
  • myPage.kh로 연결을 시도하면 로그인한 session의 id값을 가지고와 정보를 전달받고 그 정보를 반환할것이다.
    • HttpSession session = request.getSession(); : 세션값 가지고옴
    • Member member = (Member) session.getAttribute("loginUser");
      • 세션의 값을 loginUser라고 이름정함,
      • 세션은 Object이기에 Member로 형변환함
      • Member로 형변환된 세션은 member로 선해 다른 class에서 처리할 예정임
  • String memberId = member.getMemberId();
    • memberId라는 변수 선언, 이 값은 방금 세션에서 가지고온 member안의 id값임
    • 세션안에는 id와 비밀번호 밖에 없음
    • 그 이유는 로그인할때 세션에 민감하지 않은 정보인 아이디와 비밀번호만 저장했기때문임 참고 : 59. spring으로 로그인 하기 (velog.io)
    • 이렇게 초기화한 아이디값을 이용해 Member의 다른값들도 가지고 와야함
  • Member mOne = mService.printOneById(memberId);
    • 새로운 Member인스탠스안에 값을 담아줄 메소드에 memberId의 값을 전달하여 처리해서 받아올것임
  • String post = mOne.getMemberAddress().split(",")[0];
    String address = mOne.getMemberAddress().split(",")[1];
    - 회원가입을 할때 주소를 post + “,” + address로 받았기때문에 split을 사용하여 2개의 배열로 바꾸고 각 변수에 나눈값을 저장해줘서 jsp로 전송함
  • try안의 값
			mv.addObject("member", mOne);
			mv.addObject("post", post);
			mv.addObject("address", address);
			mv.setViewName("member/myPage");
  • mv코드를 사용하여 addObject를 이용해 “변수명”, 변수값으로 setViewName에 연결된 페이지로 전달하여 그 페이지로 이동
  • catch
mv.addObject("msg", e.getMessage());
			mv.setViewName("common/errorPage");
  • 오류가 있다면 에러페이지에 에러메세지를 전송

에러페이지 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>
</head>
<body>
<h1>에러메시지</h1>
<h3>${msg }</h3>

</body>
</html>
  • controller에서 전달한 msg를 출력할수 있도록 구성되어있음

Controller에서 보낸 값을 Service로

@Override
	public Member printOneById(String memberId) {
		Member member = mStore.printOneById(session, memberId);
		
		return member;
	}
  • Service를 상속받은 클래스
    @Service
    public class MemberServicImpl implements MemberService{
    • 클래스명위에 @Service를 붙였기때문에 이 클래스로 연결됨.
  • Service인터페이스에는 반드시 이 매소드가 선언되어있어야 한다.
  • Service에서는 session을 Store로 넘겨주는 역할을 함
    	@Autowired
    	private SqlSessionTemplate session;
    	@Autowired
    	private MemberStore mStore;
    • Spring안에 정해진 SqlSessionTemplate를 선언해주어 전달이 가능함
    • MemberStore로 연결해야 하기때문에 mStore를 선언해준다

Store클래스에서 쿼리문을 데이터베이스로 전달

@Override
	public Member printOneById(SqlSessionTemplate session, String memberId) {
		Member member = session.selectOne("MemberMapper.selectOneId", memberId);
		return member;
	}
  • session을 이용해 data베이스와 접속하고 select태그를 쓴 "MemberMapper.selectOneId" 에 있는 쿼리문을 database에 입력한다
  • memberId를 매퍼에 전달하여 쿼리문에 알맞은 값을 입력할수있다.

Mapper

<mapper namespace="MemberMapper">

<resultMap type="com.kh.junspring.member.domain.Member" id="memberResultMap">
<id property="memberId" column="MEMBER_ID"/>
<result property="memberPw" column="MEMBER_PWD"/>
<result property="memberName" column="MEMBER_NAME"/>
<result property="memberEmail" column="MEMBER_EMAIL"/>
<result property="memberPhone" column="MEMBER_PHONE"/>
<result property="memberAddress" column="MEMBER_ADDR"/>
<result property="endrollDate" column="ENROLL_DATE"/>
<result property="updateDate" column="UPDATE_DATE"/>
<result property="status" column="M_STATUS"/>
</resultMap>

<select id="selectOneId" resultMap="memberResultMap">
select * from member_tbl where member_id = #{memberId} and m_status='y'

</select>
</mapper>
  • session.selectOne("MemberMapper.selectOneId", memberId);
    • MemberMapper는 mapper의 namespace값이다.
    • selectOneId는 select태그의 id값이다,
    • select * from member_tbl where member_id = #{memberId} and m_status='y'
      • 이 쿼리문의 #{}값은 store에서 받아온 memberId이다
  • resultMap는 데이터베이스에서 쿼리문을 실행해 받환받은 컬럼의 값을 type="com.kh.junspring.member.domain.Member" 에 저장된 클래스의 변수에 초기화 시키며,
    • 컬럼이 여러줄일때는 List로 반환한다.

    • 쿼리문이 반환해준 값은 type에 지정된 클래스의 인스탠스로 반환했으며

    • Store에서 그 반환받은 값을

      	`Member member = session.selectOne("MemberMapper.selectOneId", memberId);`

      member안에 저장해서 Controller로 반환하였다.

profile
hello world

0개의 댓글