[서블릿] encodeURL() 사용법

hoonak·2023년 8월 22일
0

서블릿

목록 보기
13/16

앞 절에서는 쿠키와 세션 기능을 알아봤음. 세션 역시 클라이언트의 세션 쿠키를 이용해 각 브라우저에 대한 세션 기능을 사용함. 그런데 만약 브라우저에서 쿠키 기능을 사용할 수 없게 설정했다면 쿠키 기능은 물론 세션 기능도 사용할 수 없음.

이럴 때는 encodeURL() 메서드를 이용해 직접 서버에서 브라우저로 응답을 먼저 보낸 후 URL Rewriting 방법을 이용해 jsessionId를 서버로 전송해 세션 기능을 사용하면 됨.

encodeURL() 메서드를 이용한 세션 사용 실습

이번에는 세션 쿠키를 사용하지 않고 encodeURL() 메서드를 이용해 jessionId의 세션 id를 브라우저에 응답으로 전송한 후 세션을 사용해 보겠음.

  • sessionTest5

다시 /login으로 요청해 jsessionId를 URL rewiting 방식으로 가져온 후 세션에 접근해 로그인 상태 유무를 판단하도록 구현함.

package sec04.ex01;

import java.io.IOException;
import java.io.PrintWriter;

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;

@WebServlet("/login")
public class SessionTest5 extends HttpServlet {
	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doHandle(request, response);
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doHandle(request, response);
	}

	private void doHandle(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("utg-8");
		response.setContentType("text/html; charset = utf-8");
		PrintWriter out = response.getWriter();
		
		HttpSession session = request.getSession();
		
		String user_id = request.getParameter("user_id");
		String user_pw = request.getParameter("user_pw");
		
		if(session.isNew()) {
			if(user_id != null) {
				session.setAttribute("user_id", user_id);
				// 변수 url에 encodeURL()을 이용해 응답 시 미리 jsessionId를 서블릿으로 다시 전송함.
				String url = response.encodeURL("login");
				// 로그인 상태 확인 클릭 시 jsessionId를 서블릿으로 다시 전송함.
				out.println("<a href = " + url + "> 로그인 상태 확인 </a>");
			}else {
				out.print("<a href = 'login2.html'> 다시 로그인 하세요 </a>" );
				session.invalidate();
			}
		}else {
			user_id = (String)session.getAttribute("user_id");
			if(user_id != null && user_id.length() != 0) {
				out.print("안녕하세요 " + user_id + "님.");
			}else {
				out.print("<a href = 'login2.html'>다시 로그인하세요.</a>");
				session.invalidate();
			}
		}
	}
}

  1. 로그인창에서 id와 비밀번호를 입력하고 로그인함.

  1. 로그인 상태 확인을 클릭함.

이미지 넣을 것

  1. 서블릿에 jessionId 쿠키 값을 전송해 로그인 상태를 유지함.

대부분의 브라우저는 쿠키 사용을 기본으로 설정하고 있지만 쿠키를 사용할 수 없을 경우에는 이렇게 encodeURL() 메서드를 이용해 세션 기능을 사용할 수 있음.

profile
Hello World!

0개의 댓글