오봉이와 함께하는 개발 블로그

Servlet - 세션 트래킹(웹 페이지 사이 정보 공유)<hidden> 태그 사용 본문

BE/Servlet

Servlet - 세션 트래킹(웹 페이지 사이 정보 공유)<hidden> 태그 사용

오봉봉이 2021. 12. 29. 18:03
728x90

쿠키와 세션

  • 클라이언트와 서버 간에 정보를 교환하는데 클라이언트 PC 또는 서버의 메모리에 저장해 두고 사용하면 프로그램 속도를 향상시킬 수 있음

    HTTP 프로토콜

  • 서버-클라이언트 통신 시 stateless 방식으로 통신
  • 브라우저에서 새 웹페이지를 열면 기존의 웹페이나 서블릿에 관한 어떤 연결 정보도 유지 않음
  • 새로 열린 페이지에서 어떤 정보도 알 수 없음
  • 페이지가 서로 독립적이어서 서로의 상태를 알 수 없음
  • 웹 페이지 사이 또는 서블릿 간 상태나 정보를 공유하려면 웹 페이지를 연결시키는 기능 필요
    • 세션 트래킹이라고 함
      • 방법
        1. <hidden> 태그 사용
          • <input type=’hidden’ value=’${id}’>
          • 현재 페이지에 데이터 숨겨놓고 연결된 다음 페이지로 데이터를 보내는 방법
          • 두 웹페이지가 데이터 공유
          • request.getParameter()로 받아서 사용할 수 있음
          • GET 방식으로 전송 : 데이터 노출, 길이 제한, 보안 문제

hidden 방식 예제 - LoginHiddenServlet.java, login-hidden.html

package com.example.servlet4;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.URLEncoder;

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

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");
        PrintWriter out = response.getWriter();

        String user_id = request.getParameter("user_id");
        String user_pw = request.getParameter("user_pw");
        String user_address = request.getParameter("user_address");
        String user_email = request.getParameter("user_email");
        String user_hp = request.getParameter("user_hp");
        if (user_id != null && user_id.length() != 0) {
            String data = "<html><body>";
            data += "안녕하세요!<br> 로그인하셨습니다.<br><br>";
            data += "아이디 : " + user_id + "<br>";
            data += "비밀번호 : " + user_pw + "<br>";
            data += "주소 : " + user_address + "<br>";
            data += "이메일 : " + user_email + "<br>";
            data += "휴대전화 : " + user_hp;
            out.print(data);

            // URL Rewriting 방식 이용
            user_address = URLEncoder.encode(user_address, "utf-8");
           // 인코딩 하면 서울시+종로구 라고 나오고 하지 않으면 서울시%종로구 라고 나옴
            out.print("<br><br><a href='/second?user_id=" + user_id
                    + "&user_pw=" + user_pw
                    + "&user_address=" + user_address
                    + "'>두 번째 서블릿으로 보내기</a>");
            data = "</body></html>";
        }
        else {
            out.println("로그인 하지 않았습니다. <br><br>");
            out.println("다시 로그인 하세요. <br><br>");
            out.println("<a href='login-rewrite.html'>로그인 창으로 이동</a>");
        }
    }
}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <form name="frmLogin" method="post" action="loginHidden" >
        아이디  :<input type="text" name="user_id"><br>
        비밀번호:<input type="password" name="user_pw" ><br>
        <input type="submit" value="로그인">  <input type="reset" value="다시입력">
        <!-- 히든 태그 삽입-->
        <input type="hidden" name="user_address" value="서울시 종로구">
        <input type="hidden" name="user_email" value="test@naver.com">
        <input type="hidden" name="user_hp" value="010-1111-1111">
    </form>
</body>
</html>
728x90
Comments