Servlet-JSP

encodeURL()

voider 2020. 9. 10. 13:28

쿠키를 사용하지 않겠다고 설정한 브라우저에서는 쿠키는 물론 세션도 사용할 수 없다.
이런 경우, encodeURL()로 직접 서버에서 브라우저로 응답을 보낸 후, URL Rewriting을 이용해 JSESSIONID를 서버로 전송하여 세션 기능을 사용할 수 있다.

package pro09.sec04;

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("/st5")
public class SessionTest5 extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
        doHandle(request, response);
    }

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

    private void doHandle(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
        request.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");

        PrintWriter out = response.getWriter();
        HttpSession session = request.getSession();
        String id = request.getParameter("id");
        String pw = request.getParameter("password");

        if(session.isNew()) { //새로 생성된 세션이면 true 아니면 false
            if(id != null) {
                //HttpSession객체에 id 바인딩
                session.setAttribute("id", id);
                //응답 시, 미리 JSESSIONID를 저장한다.
                String url = response.encodeURL("st5");
                //주어진 url로 이동할 때, jsessionid가 get방식으로 함께 날아간다.
                out.println("<a href='"+url +"'>로그인 상태 확인</a>");
            } else {
                out.print("<a href='/login.html'>다시 로그인 하세요</a>");
                session.invalidate(); //세션 삭제
            }
        } else {
            id = (String) session.getAttribute("id");
            if(id != null && id.length() != 0 ) {
                out.print("<h1>안녕하세요 "+id+"님!</h1>");
            } else {
                out.print("<a href='/login.html'>뭔가 잘못 됐겠죠.</a>");
            }
        }
    }
}

'Servlet-JSP' 카테고리의 다른 글

서블릿 스코프  (0) 2020.09.11
세션 로그인 예제  (0) 2020.09.10
세션  (0) 2020.09.10
쿠키  (0) 2020.09.10
ServletContext & ServletConfig  (0) 2020.09.10