✍
stateless
session의 ID값 -> msg(Set-Cookie : 123) -> Cookie(123저장) -> 요청마다 cookie:123을 보냄
회원가입 폼
mcv의 구조
✍
이 구조를 기억하자
/common/listener/MemberLoginListener
package com.kh.mvc.common.listener;
import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;
import com.kh.mvc.member.model.dto.Member;
/**
* Application Lifecycle Listener implementation class MemberLoginListener
*
*/
@WebListener
public class MemberLoginListener implements HttpSessionAttributeListener {
/**
* Default constructor.
*/
public MemberLoginListener() {
// TODO Auto-generated constructor stub
}
/**
* @see HttpSessionAttributeListener#attributeAdded(HttpSessionBindingEvent)
*/
public void attributeAdded(HttpSessionBindingEvent se) {
String name = se.getName();
Object value = se.getValue();
// System.out.println("[attributeAdded] " + name + " = " + value);
if("loginMember".equals(name)) {
// 로그인한 회원정보 처리
Member loginMember = (Member) value;
System.out.println("[회원로그인] " + loginMember.getMemberId() + " 로그인!");
}
}
/**
* @see HttpSessionAttributeListener#attributeRemoved(HttpSessionBindingEvent)
*/
public void attributeRemoved(HttpSessionBindingEvent se) {
String name = se.getName();
Object value = se.getValue();
// System.out.println("[attributeRemoved] " + name + " = " + value);
if("loginMember".equals(name)) {
// 로그인한 회원정보 처리
Member loginMember = (Member) value;
System.out.println("[회원로그아웃] " + loginMember.getMemberId() + " 로그아웃!");
}
}
/**
* @see HttpSessionAttributeListener#attributeReplaced(HttpSessionBindingEvent)
*/
public void attributeReplaced(HttpSessionBindingEvent se) {
// TODO Auto-generated method stub
}
}
/common/listener/SessionCounterListener
package com.kh.mvc.common.listener;
import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
/**
* @WebListener
* - web.xml에 listner등록 처리
*
*/
@WebListener
public class SessionCounterListener implements HttpSessionListener {
private static int activeSessions;
/**
* Default constructor.
*/
public SessionCounterListener() {
// TODO Auto-generated constructor stub
}
/**
* @see HttpSessionListener#sessionCreated(HttpSessionEvent)
*/
public void sessionCreated(HttpSessionEvent se) {
activeSessions++;
System.out.println("[sessionCreated] 현재 세션수 : " + activeSessions);
}
/**
* @see HttpSessionListener#sessionDestroyed(HttpSessionEvent)
*/
public void sessionDestroyed(HttpSessionEvent se) {
if(activeSessions > 0)
activeSessions--;
System.out.println("[sessionDestroyed] 현재 세션수 : " + activeSessions);
}
}
✍
listener를 생성시 반드시 해당 인터페이스를 만들고 반드시 @WenListener 등록해야 톰캣에 등록됨
controller/MemberEnrollServlet
package com.kh.mvc.member.controller;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.sql.Date;
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 com.kh.mvc.member.model.dto.Gender;
import com.kh.mvc.member.model.dto.Member;
import com.kh.mvc.member.model.service.MemberService;
/**
* Servlet implementation class MemberEnrollServlet
*/
@WebServlet("/member/memberEnroll")
public class MemberEnrollServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private MemberService memberService = new MemberService();
/**
* GET 회원가입폼 요청
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.getRequestDispatcher("/WEB-INF/views/member/memberEnroll.jsp")
.forward(request, response);
}
/**
* POST db insert 요청
*
* insert into member values (?, ?, ?, default, ?, ?, ?, ?, ?, default, default)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try {
// 1. 인코딩처리
request.setCharacterEncoding("utf-8");
// 2. 사용자입력값처리
String memberId = request.getParameter("memberId");
String password = request.getParameter("password");
String memberName = request.getParameter("memberName");
String _gender = request.getParameter("gender");
String _birthday = request.getParameter("birthday");
String email = request.getParameter("email");
String phone = request.getParameter("phone");
String[] hobbies = request.getParameterValues("hobby");
Gender gender = _gender != null ? Gender.valueOf(_gender) : null;
String hobby = hobbies != null ? String.join(",", hobbies) : null;
Date birthday = (_birthday != null && !"".equals(_birthday)) ?
Date.valueOf(_birthday) :
null;
Member member =
new Member(memberId, password, memberName, null, gender,
birthday, email, phone, hobby, 0, null);
System.out.println("member@MemberEnrollServlet = " + member);
// 3. 업무로직 : db insert
int result = memberService.insertMember(member);
System.out.println("result@MemberEnrollServlet = " + result);
// 4. 응답처리 : redirect
HttpSession session = request.getSession();
session.setAttribute("msg", "회원가입이 정상적으로 처리되었습니다.");
response.sendRedirect(request.getContextPath() + "/");
} catch (Exception e) {
e.printStackTrace(); // 로깅
throw e; // WAS(tomcat) 예외 던짐 -> 에러페이지를 응답출력
}
}
}
✍
Get/Post 방식 나눠서 구현
get 폼 요청시 view 연결
post -> DB insert , redirect필수 그 후 session에 msg를 작성-> service 요청
✍
dao 예외발생시 -> service에 throw -> controller에 throw -> login 후 tomcat에 throw