/ LECTURE

JSP - Cookie / Action tag

이 페이지는 다음에 대한 공부 기록입니다

JAVA(자바), Python(파이썬) 기반의

AI 활용 응용 소프트웨어 개발자 양성 과정

2021.11.10. ~ 2022.05.18.

찾으시는 정보가 있으시다면
주제별reference를 이용하시거나
우측 상단에 있는 검색기능을 이용해주세요

54일차 수업

웹브라우저가 보관하는 데이터

브라우저가 웹서버에 요청하면 쿠키와 함께 전송

웹브라우저와 웹서버에서 모두 생성가능

  • 웹서버 : jsp cookie 클래스

  • 웹브라우저 : js의 cookie 객체

구성

  • name, value, age, domain, path

보안

  • domain : 쿠키를 생성한 사이트 외의 다른 사이트로 연결할 때는 쿠키를 전송하지 않음, 다른 도메인에서 사용하고자 할 때는 도메인을 지정해줘야함
cookie.setDomain(“.somehost.com”);
  • path : 기본적으로 쿠키를 생성하는 파일을 위치를 기준으로 해당 경로와 하위 경로에서만 쿠키를 전송, 다른 경로에 쿠키를 전달하기 위해서는 지정

  • age : 기본적으로 쿠키는 웹브라우저를 닫으면 자동 삭제한다

<%
    <!-- 쿠키 생성 -->
    Cookie c = new Cookie(쿠키이름, 쿠키값);
    <!-- 한글입력이 깨질 경우 URLEncoder.encode(인코딩대상, 인코딩 타입) method  인코딩 방식을 정할  있음-->
    
    <!-- 쿠키 속성 지정 -->
    c.setMaxAge(1*60*2);
    <!-- 초단위로 설정 -->
    
    <!-- 응답으로 쿠키 전송 -->
    response.addCookie(c);
    
    <!-- 쿠키 삭제하기 -->
        <!-- 1 방법 -->
        <!-- 쿠키 목록을 배열로 불러오고 -->
        Cookie[] ck = request.getCookies();
        <!-- 불러온 값이 있다면-->
        for(int i = 0; ck != null && i < ck.length; i++){
            if((ck[i].getName()).equals(삭제할 쿠키이름)){
                <!-- 대상을 찾고 시간설정을 0으로 바꿔서 응답한다-->
                ck[i].setMaxAge(0);
                response.addCookie(ck[i]);
            }
        }
        <!-- 2 방법 -->
        Cookie c = new Cookie(삭제할 쿠키이름, null);
        c.setMaxAge(0);
        response.addCookie(c);
%>

Session

웹 컨테이너는 기본적으로 필요한 정보를 저장할 수 있도록 하나의 웹브라우저당 하나의 세션을 생성

  • 쿠키가 브라우저에 저장되는 반면, 세션은 서버에 저장

  • 쿠키는 String만 저장하는 반면, 세션은 객체 저장

  • 사용자 정보를 유지하기 위해 쿠키보다는 세션을 많이 사용

<%
    <!-- 변수들이 담긴 클래스(Goods) 저장할 리스트(glist) 생성하고 -->
    ArrayList<Goods> glist = null;
    <!-- 파라미터  넘겨받아 변수에 저장해 놓고 -->
    
    <!-- 원하는 session(cart) 가져와서 기존에 있었는지 확인하고-->
    Object obj = session.getAttribute(cart);
    <!-- 없다면 새로운 array객체를 만들어 변수에 저장하고, 있다면 불러온 값을 변수에 저장한다 -->
    if(obj == null){
        glist = new ArrayList<Goods>();
    }else {
        glist = (ArrayList<Goods>) obj;
    }
    
    <!-- 배열에 클래스를 생성해서 넣어준다 -->
    glist.add(new Goods(파라미터를 저장했던 변수들));
    
    <!-- 세션(cart) 만들어진 클래스를 저장한다 -->
    session.setAttribute(cart, glist);
    
    <!-- WEB-INF/ web.xml 에서-->
    <session-config>
        <session-timeout>50</session-timeout>
    <session->
%>

액션태그

<!-- 페이지 삽입, 해당 위치에 삽입 -->
<jsp:include page=“파일경로”/>
<!-- @include 와 jsp:include의 차이, 정적과 동적, 현재 페이지로 삽입과 별도의 페이지 요청 -->
<!-- 페이지 이동, 주소는 그대로고 내용만 바꿔줌 -->
<jsp:forward page=“파일경로”/>
<!-- param과 같이 사용하기, 파라미터를 지정할 수 있음-->
<jsp:forward page=“파일경로”>
    <jsp:param name=“name값” value=“value값”>
<jsp:forward/>

Bean

데이터를 표현하는 것을 목적으로 하는 자바 클래스

액션 태그 내의 빈이라는 기술을 사용하려면 빈즈의 형태를 가지는 클래스가 존재해야함

필수 조건은 private변수, 기본 생성자, getter와 setter 존재(property 가 Boolean 일 경우 is사용)

변수는 form으로 부터 넘어오는 getParameter(“변수명”)과 동일해야함

필수 조건을 맞추면 JSP 액션 태그가 자동으로 변수들을 매칭 시켜준다

<jsp:useBean id=“빈 변수명” class=“클래스 파일”>
    <jsp:setProperty name=“빈 변수명” property=“매칭하고자 하는 파라미터명”>
</jsp:useBean>

<!-- 값 가져오기 -->
<jsp:getProperty property=“해당 변수명(파라미터)” name=“빈 변수명”/>
<!-- 짧아서 getter를 더 자주 씀-->
<%= 빈변수명.getName()%>

Scope

기본 객체 범위 설명
pageContext page 하나의 jsp 페이지 내에서 공유될 값을 저장한다
request request 한 번의 요청을 처리하는 데 사용되는 모든 jsp 페이지에서 공유될 값을 저장한다
session session 한 사용자와 관련된 정보를 jsp 들이 공유하기 위해서 사용된다
application application 모든 사용자와 관련해서 공유할 정보를 저장한다
<jsp:useBean id=“bean_name” class=“class_name” scope=“page”>
<!—bean의 기본 값은 page -->