Dev log - 64, Java #18, Servlet #8, JSP #5

박강산·2022년 7월 7일
0

Java Servlet, JSP

세션 관리 (Session Management)

  • HTTP 프로토콜은 stateless 프로토콜

  • 특정 사용자에 대한 상태 정보를 저장해야 할 경우 문제가 대두

  • 세션이란, 여러 HTTP 요청들 간에 특정 클라이언트 정보를 저장-유지하는 메커니즘

  • 웹 컨테이너 벤더는 세션 유지와 관련된 지원을 반든시 제공

세션(Session)

  • 세션 정보(객체)는 요청 객체로부터 획득 가능
    - ex) HttpSession session = request.getSession();

  • 세션 객체는 여러 개의 특정 정보를 저장, 검색할 수 있는 메소드를 제공
    - ex) session.setAttribute("myCart", cart);

세션 생성

  • HttpSession getSession();
  • HttpSession getSession(boolean flag);

세션 제거

  • void invalidate();
void invalidate(); // 서블릿

<session-config>  // web.xml
	<session-timeout>30<session-timeout>
</session-config>

세션 실습

  • mod010 참고

쿠키(Cookie)란?

  • 세션을 지원하기 위해 고안된 일종의 문자 데이터

  • 요청에 대한 응답 과정에서 클라이언트 장치(예: 브라우저)에 저장할 수 있는 정보

  • 클라이언트의 브라우저 종료 시 쿠키 정보는 기본적으로 삭제됨

  • 서버와 클라이언트는 요청-응답 과정에서 쿠키(이름/값)를 교환

  • 쿠키 이름은 아스키 코드의 알파벳과 숫자만을 포함

  • 콤마, 세미콜론, 공백 포함 불가

  • $로 시작 불가능

  • setMaxAge(60 * 30)

  • URLEncoder.encode("서울","UTF-8");

쿠키 실습

  • 사용자의 마지막 로그인 접속 기록을 나타나게 함

/ Java /

@WebServlet("/mod010/mypage")
public class MyPageServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	private UserService userService;

	public void init() {
		userService = new UserService();
	}

	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		HttpSession session = request.getSession(false); // true로 설정되면 session을 새로 만듬, 새로 만들면 사용자를 알 수 없게 됨
		String userId = (String) session.getAttribute("userId");
		if (userId == null) {
			request.getRequestDispatcher("login.jsp").forward(request, response);
			return;
		}

		Cookie[] cookies = request.getCookies();
		for (Cookie cookie : cookies) {
			System.out.println(cookie.getName() + " : " + cookie.getValue());
			if (cookie.getName().equals("lastAccessTime")) {
				request.setAttribute("lastAccessTime", URLDecoder.decode(cookie.getValue(), "UTF-8"));
			}
		}
		response.addCookie(lastAccessTime());
		request.getRequestDispatcher("mypage.jsp").forward(request, response);
	}

	private Cookie lastAccessTime() {
		SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		String dateStr = format.format(new Date());
		format.format(new Date());

		Cookie cookie = null;
		try {
			cookie = new Cookie("lastAccessTime", URLEncoder.encode(dateStr, "UTF-8"));
		} catch (Exception e) {
			e.printStackTrace();
		}
		cookie.setMaxAge(60 * 60 * 24 * 30);
		cookie.setPath("/"); // '/' 를 사용하면 어떤 사이트라도 쿠키를 전부 심는다는 의미
		return cookie;
	}
}

JSP

<label>Last Access Time : </label> ${lastAccessTime}

profile
안녕하세요. 맡은 업무를 확실하게 수행하는 웹 개발자가 되기 위하여 끊임없이 학습에 정진하겠습니다.

0개의 댓글

관련 채용 정보