[JAVA 웹 개발기록]국비 77일차

:)·2022년 6월 17일
0


stateless

  • 클라이언트와 서버 관계에서 서버가 클라이언트의 상태를 보존하지 않음을 의미한다.
    장점 : 서버의 확장성이 높기 때문에 대량의 트래픽 발생 시에도 대처를 수월하게 할 수 있다.
    사용자의 데이터를 서버 보관 session, 브라우저(client)에 보관하면 cookie

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

0개의 댓글