ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • jsp
    JSP 2021. 12. 11. 01:04

    어제에 이어서 쿠키를 정리하자면,

     

    쿠키는 웹 브라우저에서 서버로 어떠한 데이터를 요청하면, 서버 측에서는 알맞은 로직을 수행한 후 데이터를 웹 브라우저에 응답한다. 그리고 http 프로토콜은 응답 후에 웹 브라우저와의 관계를 종료한다.

    연결이 끊겼을 때, 어떤 정보를 지속적으로 유지하기 위한 수단으로 쿠키라는 방식을 사용한다.

    쿠키는 서버에서 생성하여, 서버가 아닌 클라이언트 측(local)에 정보를 저장한다.

     

    쿠키 문법은 쿠키 클래스에서 쿠키 생성 -> setter 메소드로 쿠키의 속성 설정 -> response 객체에 쿠키를 탑재 -> 로컬 환경에 저장하는 것이다.

     

    세션은,

    쿠키와 마찬가지로 서버와의 관계를 유지하기 위한 수단이다.

    단, 쿠키와 달리 클라이언트의 특정 위치에 저장되는 것이 아니라, 서버 상에 객체 형태로 존재한다.

    서버당 하나의 세션 객체를 가질 수 있는데, 세션 객체는 브라우저 창을 종료하면 삭제된다.

    따라서 세션은 서버에서만 접근이 가능하여 보안이 좋고, 저장할 수 있는 데이터에는 한계가 없다.

    세션은 클라이언트의 요청이 발생하면 자동 생성이되어 고유한 ID값을 클라이언트에 넘겨주며 이것은 쿠키에 저장된다.

     

    여기까지 보고 이제 session에 대해서 실전(?) 연습!

    <%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%
    request.setCharacterEncoding("utf-8");
     
    String id = request.getParameter("id");
    String pw = request.getParameter("pw");
    String nick = request.getParameter("nick");
     
    if(id.equals("abc1234") && pw.equals("aaa1111")){
    session.setAttribute("user_id", id);
    session.setAttribute("user_nick", nick);
    response.sendRedirect("session_welcome.jsp");
    } else { %>
    <script>
    alert("로그인에 실패했습니다.");
    location.href="session_login.jsp";
    history.back();
    </script>
    <%
    response.sendRedirect("session_login.jsp");
    }%>
     
    로그인 jsp인 session_login.jsp을 만들어 주고, 로그인이 성공됐다면 session_welcome.jsp로 접근하게 루트를 짰다.

     

     
    <%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%
    if(session.getAttribute("user_id") == null) {
    response.sendRedirect("session_login.jsp");
    }else{
     
    String id = (String) session.getAttribute("user_id");
    String nick= (String) session.getAttribute("user_nick");
    }%>
     
    <%@ include file="../Application/app_basic.jsp" %>
     
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    <h3>방문자 수: <% %></h3>
    </body>
    </html>

    <%@ include file="../Application/app_basic.jsp" %>

    여긴 <h3></h3> 태그에 걸려 있는 방문자 수를 연결할 jsp 파일이다.

     

    홈페이지에서 방문자 수를 어떻게 표시하는 걸까? 의문이 들었었는데 이번 기회에 접해 보게 되었다.

    <%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
     
    <%
    int count = 0;
     
    if(application.getAttribute("visit") != null) {
    count = (int) application.getAttribute("visit");
    }
    count++;
     
    application.setAttribute("visit", count);
    %>

     

    visit 이라는 변수를 application에서 가져왔는데, 비어 있다면(=null), 앞서 선언한 int count에 정수로 변환하여 넣어준다. 그리고 반복문이니까 횟수가 증가하도록!

    여기까지 배웠는데, application을 훅 배워서 쿠키 vs 세션을 비교해 보고 더 진도를 나가기로 했다.

     

    쿠키 대신에 세션을 사용하는 가장 큰 이유는 세션이 쿠키보다 보안에서 앞서기 때문이다.

    쿠키의 이름이나 데이터는 네트워크를 통해 전달되기 때문에 http 프로토콜을 사용하는 경우 중간에서 누군가가 쿠키의 값을 읽어올 수 있다. 그러나, 세션은 오직 서버에만 저장되기 때문에 중요한 데이터를 저장하기에 좋다.

    또한, 세션은 웹 브라우저가 쿠키를 지원하지 않거나 강제로 사용자가 쿠키를 차단한 경우에도 사용할 수 있다.

    그러나, 세션은 여러 서버에서 공유할 수 없다는 단점이 있다. 그러나 쿠키는 도메인을 이용해 쿠키를 여러 도메인에서 공유할 수 있기 때문에 대형 포털사이트들은 쿠키에 로그인 방식을 저장하는 것을 선호한다.

     

    application 기본 객체

    - 특정 웹 어플리케이션에 포함된 모든 jsp페이지는 하나의 application 기본 객체를 공유한다.

    application 객체는 웹 어플리케이션 전반에 걸쳐서 사용되는 정보를 담고 있다.

     

    쿠키, 세션, 어플리케이션의 생명 주기를 비교하자면,

    request 객체는 요청마다 생성, session 객체는 브라우저별로 생성, application은 프로그램 전체에서 최초 가동 시 한 번 생성된다.

     

    그리고! 이 페이지는 정말 전세계에 컴퓨터를 만져본 사람이 있다면 다 봤을 페이지,

    이것도 application 객체를 사용해서 구현이 가능했다. (이게 진짜 신기..)

    범용 고유 식별자 (Universally Unique Identifier)라고 하는데, 소프트웨어 구축에 쓰이는 식별자 표준 번호이다.

     

    <%@page import="java.util.Arrays"%>
    <%@page import="java.util.UUID"%>
    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
     
    <%
    UUID uuid = UUID.randomUUID(); //랜덤으로
    System.out.println(uuid.toString());
     
    String[] uuids = uuid.toString().split("-");
    System.out.println(Arrays.toString(uuids));
     
    session.setAttribute("auth_code", uuids[1]);
    %>
    이 밑에는 인증번호를 받을 폼을 짜고, concert_auth_check.jsp와 이어준다.
    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
    <%
    //사용자가 입력한 인증번호
    String code = request.getParameter("code");
     
    //생성한 인증번호
    String aCode = (String) session.getAttribute("auth_code");
     
    if(code.equals(aCode)) {
    session.setAttribute("auth_pass", "true");
    response.sendRedirect("concert_reserve.jsp");
    } else {
    %>
    <script>
    alert("인증번호가 일치하지 않습니다. 다시 인증해 주세요.");
    location.href="concert_auth.jsp";
    </script>
     
    <% } %>
     
    앞서 인증 번호를 입력하는 칸에서 인증 번호를 맞게 작성했으면, concert_reserve.jsp로 이어준다. (콘서트장 예매하는 페이지인데 정말.. 포도알(?)들이라서 신기했다.)
     
    yes24에서 이렇게 깔끔한 좌석을 봤다면 좋았을 텐데..
    쌤이 이렇게 짤 거라고만 말씀해 주시고 끝났다. 저런 빈 포도알을 볼 생각하니 기분이 좋은데..ㅠ?
     
     
     
     
     
     
     
     
     

    'JSP' 카테고리의 다른 글

    jsp  (0) 2021.12.13
    jsp  (0) 2021.12.09
    jsp [2]  (0) 2021.12.09
    jsp 시작!  (0) 2021.12.08
Designed by Tistory.