-
JSP_로그인 후_내 정보 띄우기JSP 2022. 4. 27. 23:21
이동할땐 controller(Servlet)
메인->회원가입페이지
: 단순페이지이동,전달할 데이터가 없고 회원가입페이지만 띄우면 된다.
회원가입페이지->아이디 중복확인 페이지
: 단순페이지이동
메인-> 내정보보기
: 데이터(내 정보) 갖고 이동
: 내정보 보기는 로그인하면 session에 데이터를 끌어다가 쓸수있다.
1) menubar.jsp에서 온클릭 추가_"/myPage.me"
2) Servlet파일 생성(MyPageServlet)
2-1)@WebServlet("/myPage.me") 변경
2-2)doGet작성
String loginUserId =((Member)(request.getSession().getAttribute("loginUser"))).getUserId();
Member member = new MemberService().selectMember(loginUserId);
2가지 방법
1) DB에서 내 정보 가져오기(데이터를 가지고 페이지 이동) 이거로 진행
2) session에 있는 내 정보 가지고 오기(단순 페이지 이동)
<DB에서 내 정보 가져오기>
세션의 로그인한 아이디를 통해 얻을 수 있다
3) MemberService작성
4) DAO작성
5) 다시 MyPageServlet에서 doGet 추가 작성
-jps경로 연결, 에러페이지 경로도 같이 연결해준다.
String page = null;
if(member != null) {
page = "WEB-INF/views/member/mypage.jsp";
request.setAttribute("member", member);
} else {//에러페이지 생성
page = "WEB-INF/views/common/errorPage.jsp";
request.setAttribute("msg", "회원 조회에 실패했습니다");
}
request.getRequestDispatcher(page).forward(request, response);
둘다 포워드를 사용하면
둘다 보낼 데이터가 있어서 둘다 request.getRequestDispatcher 사용해야하므로 if, else에 둘다 들어가야한다.
그렇기 때문에 밖으로 빼줘서 둘다 들어갈 수 있게 해준다.
(데이터가 있어서 포워드 사용)
6) jsp파일 "WEB-INF/views/member/mypage.jsp"; mypage.jsp생성
내 정보 보기 폼 작성
7)mypage
메뉴바에서 include해줘서 저기에 이미 임포트되어 있다.
input을 <%= member.getInterest() %>형식으로 getter불러오는 것이다.
<%= member.getPhone() == null ? "-" : member.getPhone() %> null일때 삼항연산자를 사용하여
값이 null값이면 - 가 뜰 수 있게 설정한다.
8) 수정하기
/updateForm.me을 연결할 서블릿 생성<두가지방법>
1) 세션에서 가져오기
2) DB에 갔다오기(selectMember())
*3)새로운 방법 input type hidden
-->내정보보기가 있는데 숨겨놓아도 servlet에 데이터가 넘어가고
그 데이터를 내 정보 수정하기로 받기
흐름순서-->내정보보기-> servlet -> 내 정보 수정하기
3) 내 정보 수정하기
3-1) mypage에서 숨겨서 넘긴 데이터를 MemberUpdateFormServlet에서 받아
memberUpdateForm.jsp로 받아온 데이터 넘기기
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
String myId = request.getParameter("myId");
String myName = request.getParameter("myName");
String myNickName = request.getParameter("myNickName");
//데이터가 없었다면 "-"로 넘어올 것
String myPhone = request.getParameter("myPhone");
String myEmail = request.getParameter("myEmail");
String myAddress = request.getParameter("myAddress");
String myInterest = request.getParameter("myInterest");
Member myInfo = new Member(myId, null, myName, myNickName, myPhone, myEmail, myAddress, myInterest, null, null, null);
request.setAttribute("myInfo", myInfo);
request.getRequestDispatcher("WEB-INF/views/member/memberUpdateForm.jsp").forward(request, response);
}
3-2) memberUpdateForm.jsp가 받은 데이터를 화면에 뿌리기
memberUpdateForm.jsp
<%
Member myInfo = (Member)request.getAttribute("myInfo");
%>
value="<%= myInfo.getUserId() %>" 아이디에 추가
value="<%= myInfo.getUserName() %>" 이름에 추가
value="<%= myInfo.getNickName() %>" 닉네임에 추가
value="<%= myInfo.getPhone().equals("-") ? "" : myInfo.getPhone() %>" 폰에 추가
value="<%= myInfo.getEmail().equals("-") ? "" : myInfo.getEmail() %>" 이메일에 추가
value="<%= myInfo.getAddress().equals("-") ? "" : myInfo.getAddress() %>" 주소에 추가
4) 관심분야
String[] checkedInterest = new String[6];
if(!myInfo.getInterest().equals("-")){
String[] splitStr = myInfo.getInterest().split(", ");-->관심분야에 대한 정보
for(int i = 0; i < splitStr.length; i++){
switch(splitStr[i]){
case "운동": checkedInterest[0] = "checked"; break;
case "등산": checkedInterest[1] = "checked"; break;
case "낚시": checkedInterest[2] = "checked"; break;
case "요리": checkedInterest[3] = "checked"; break;
case "게임": checkedInterest[4] = "checked"; break;
case "기타": checkedInterest[5] = "checked"; break;
}
}
}
밑에 value="운동" <%= checkedInterest[0] %>
value 뒤에 <%= checkedInterest[0] %> 추가
관심분야 모두 인덱스 숫자만 변경해서
**만약 관심분야 운동, 기타 이면 거기에 체크가 되서 보여질 수 있게 한다.checked 사용
속성이 들어가면 모두 "<%%>"로 감싸야됨-->아니면 띄어쓰기를 인지하지못하고 띄어쓴 이후의
내용이 다 날아가버린다. 꼭 더블코데이션으로 감싸야됨!
member.controller.Servlet 과 member.controller.Servlet인 두 서블릿을 모두 url-pattern
같은 url을 둘다 같이 받으려고해서 오류가 나는것
mypage.jsp벨류 뒤에 띄어쓰기가 있으면 안됨.
수정하기 ->내 정보보기 띄우기
탈퇴할때 status를 n으로 update로 탈퇴시키기
**중요한 내용**
내 정보를 가져올 수 있는 방법은 크게 두가지가 있다.
1) DB에서 직접 가져오기
2) session에 저장된 정보 가져오기
이 중에 1번 방법을 선택해서 진행하였다.
만약 2) 방법을 선택했다면 한가지 더 코드를 추가해야한다.
지금 기준 57번째 줄은 myPage.me라는 url로 다시 요청을 하면서 내 정보보기 페이지로 이동하는 코드이다.
2번을 선택한 상태에서의 내 정보보기는 (myPage.me) session에 저장되어있는 정보를 가져오게 되는데
지금 상태 그대로만 코드를 써서 진행한다면 실제 내정보보기에서는 수정된 데이터가 보이지 않게 된다.
그 이유는, <session에 저장되어있는 내 정보를 가져왔기 때문에>
따라서 만일 2번 방법을 사용한다고 하면
다시 selectMember()를 통해 DB에 새롭게 업데이트된 데이터를 select해오고
그 select한 데이터를 session에 새롭게 넣어주어야 한다 : ex) session.setAttribute("loginUser", member)
2번 방법
DB : 내정보 수정에서 입력한 새로운 데이터를 DB에 update한다.
session : 로그인하면서 저장된 loginUser값
2번 방법은 session에 저장되어있는 저 데이터를 화면에 뿌린다.-> 내정보보기page
수정완료 후
myPage.me로 가니까
내 정보 보기 page에서 이전 session의 값을 뿌려주는 것이다.
DB는 업데이트가 돼도 session은 이전 버전이다.
하지만, DB에 업데이트 했다고 해서 session에 저장된 loginUser까지 업데이트가 된건 아니다.
session과 DB는 별개이기 때문에 DB가 update됐다고 해서 session에 있는 값까지
자동으로 업데이트 되진 않는다. 즉, 다시 말하면 2번 방법을 썼을 때
잘못하면 DB는 새롭게 업데이트 됐어도 session에 있는 값은 그대로라서
이전 데이터를 가져오게 될 수도 있다!'JSP' 카테고리의 다른 글
JSP_공지사항_2 (0) 2022.05.04 JSP_개념_공지사항 (0) 2022.05.03 jsp_기타 내용 (0) 2022.04.27 JSP_중복확인창 만들기_흐름 순서 (0) 2022.04.27 JSP_개념2 (0) 2022.04.23