ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 웹 프로그래밍 JSP - 1주차 요약정리
    웹프로그래밍/jsp 2018. 4. 1. 11:30
    • 웹 프로그래밍이란?


    웹서버가 웹브라우저로 전송할 데이터를 생성해주는 프로그램을 작성하는 것



    • JSP는 웹 프로그래밍에 사용되는 기술 중 하나

    JSP(Java Server Pages)는 동적 페이지를 작성하는 자바 표준 기술로 Servlet 기반으로 동작한다.

    이 기술로 만든 프로그램을 톰캣이나 제티 같은 서버 프로그램에서 동작한다.

    웹 연결, 프로그래밍 언어, 데이터베이스 연동과 같은 어플리케이션을 구현하는데 필요한 기능을 제공하는

    서버 프로그램을 WAS(Web Application Server)라고 한다.

    WAS는 웹 브라우저의 요청에 알맞은 프로그램을 찾아 실행하고 그 결과를 응답으로 전송한다.


    • 웹 브라우져와 웹 서버


    웹 브라우져 - 클라이언트(요청)

    웹 서버 - 서버(응답) 


    웹 서버는 클라이언트가 요청한 URL에 해당하는 html 문서를 전송하고

    클라이언트 쪽 웹 브라우져는 html 표준에 따라 그 문서를 분석해서 알맞은 화면을 생성한다. 



    • HTTP(통신규약)

    -웹 브라우져와 웹 서버가 html, 이미지, 동영상, xml문서 등의 다양한 데이터를 주고 받을 때 

    사용하는 통신 규칙


    요청과 응답규칙

    요청데이터와 응답데이터는 HTTP에서 크게 요청 및 응답 줄, 헤더, 몸체로 구성된다.


    구성요소 

     요청 데이터

     응답 데이터

     요청/응답 줄

     GET, POST method와 같은 http 요청방식과 요청 자원의 경로가 담겨있다.

    요청에 대한 응답 코드를 전송한다.(http status)

     헤더

    서버가 참조할 수 있는 정보(브라우저의 종류, 언어 등) 

    응답에 대한 정보(몸체 데이터의 종류, 길이 등) 

     몸체

    전송할 정보를 담는다.(파일 업로드 같은) 

    웹브라우저가 요청한 자원의 내용을 담는다.(html문서, 이미지 파일) 



    • 정적 자원과 동적 자원

    웹 서버가 전송하는 응답 데이터 중에서

    이미지, html 파일 같이 고정 된 결과를 출력하는 페이지를 정적 자원 이라고 한다.


    반대로, 서버쪽에서 파일이나 코드를 바꾸지 않아도 클라이언트 요청 조건에 따라서 다른 응답 데이터가 달라지는 것을

    동적 자원이라고 한다. 



    • JSP의 구성요소


    JSP 페이지를 작성하려면 다양한 요소가 필요하다. 페이지에 대한 정보, 웹 브라우저가 전송한 정보를 읽어오는 기능, 

    JSP페이지에서 사용할 데이터를 생성하는 실행코드, 웹 브라우저로 문서 데이터를 전송해주는 기능 등이 필요하다.


    1.디렉티브 - page, include, taglib

    2.스크립트 - 스크립트릿, 표현식, 선언부

    3.표현 언어

    4.기본 객체

    5.정적인 데이터

    6.표준 액션 태그 - include, foward

    7.커스텀 태그와 JSTL


    디렉티브: 페이지에 대한 설정 정보 저장(생성하는 문서 종류, 사용되는 자바 클래스 지정, 세션 사용 여부, 출력 버퍼 설정 등) 


    스크립트: 사용자가 폼에 입력한 정보를 데이터베이스에 저장하거나 DB로 부터 게시글 목록을 읽어와 출력할 수 도 있다. 

    그리고 자바가 제공하는 다양한 기능을 사용할 수 있다.


    표현 언어: 스크립트로 복잡해진 JSP 코드를 표현 언어로 간결하게 만들 수 있다.


    기본 객체: 내장 객체(implicit object)라고도 하며, request, response, session, application, page 등이 있다.






    request 기본 객체



    웹 브라우저의 요청 정보를 웹 서버에 제공 하는 역할

    request 객체는 웹 브라우저가 전송한 파라미터를 읽어올 수 있는 메서드를 제공한다.


    • request 기본 객체가 제공하는 정보

    클라이언트와 관련 된 정보 읽기

    서버와 관련 된 정보 읽기

    클라이언트가 전송한 요청 파라미터 읽기 - form 태그

    클라이언트가 전송한 요청 헤더, 쿠키 읽기

    속성처리 기능 등



    • request 파라미터 전송 처리 과정


    -GET 또는 POST 방식의 파라미터 전송


    웹 브라우저는 둘 중 한가지 방식으로 파라미터를 전송한다. 


    GET method - URL 뒤에 ?를 붙이고 파리미터를 입력해서 쿼리 문자열로 전송한다. 데이터 길이에 제한이 있을 수 있다.


    POST method - 데이터 영역을 이용해서 파리미터를 전송한다.



    -요청 파라미터 인코딩

    웹 브라우저는 웹 서버로 전달되는 파라미터를 알맞은 캐릭터 셋으로 인코딩하고  

    웹 서버는 전송 받은 파라미터를 같은 캐릭터셋으로 디코딩 해야한다.

    캐릭터 셋에 따라서 인코딩 된 파라미터에 형태가 달라지기 때문이다.


    -GET 방식 파라미터 전송 방법

    1.<a> 태그의 링크 부분에 쿼리 문자열 추가 - 웹 페이지 인코딩과 동일

    2.form 태그에서 GET 속성 값으로 전송 - 웹 페이지 인코딩과 동일

    3.웹 브라우저 주소창에 URL과 쿼리 문자열 입력 - 웹 브라우저마다 다름


    ※GET 방식으로 전송한 파라미터는 기본적으로는 setCharacterEncoding() 메서드의 캐릭터 셋이 적용되지 않는다.

    위 메서드는 HTTP 프로토콜의 데이터 영역을 인코딩할 캐릭터 셋을 지정하기 때문이다.


    -톰캣에서 GET 방식 파라미터의 인코딩을 특정 캐릭터 셋으로 처리하는 방법

    server.xml 파일에서 <Connector>에 useBodyEncodingForURI 속성 값을 true로해서 추가

    또는 URIEncoding 속성을 사용한다. 그리고 setCharacterEncoding() 메서드의 캐릭터 셋 적용.


    • 요청 헤더 정보의 처리

    HTTP 프로토콜은 헤더에 부가적인 정보(웹 브라우저의 종류, 선호하는 언어 등)를 담도록 한다.

    request 기본 객체는 헤더 정보를 읽어 올 수 있는 메서드를 제공한다.







    response 기본 객체



    웹 브라우저로 보내는 응답 정보를 담는다. 제공하는 기능으로는 헤더 정보 입력리다이렉트 하기가 있다.

    이외에 몇 가지 기능은 JSP에서 잘 사용되지 않는다.


    • 웹 브라우저 캐시 제어를 위한 응답 헤더 입력

    새로운 내용이 추가 되었는데도 웹 브라우저의 출력되는 내용은 바뀌지 않는 이유는 

    웹 브라우저가 캐시에 저장된 데이터를 출력했기 때문이다.

    게시판 처럼 내용이 자주 변경되는 사이트는 응답 헤더 설정으로 캐시여부를 설정할 수 있다.

    웹브라우저는 HTTP 1.1 또는 1.0을 지원하는 경우로 나뉘기 때문에 아래 코드를 모두 입력해주는게 좋다.

     

    <%

    response.setHeader("Cache-Control", "no-cache");

    response.addHeader("Cache-Control", "no-store");

    response.setHeader("Pragma", "No-cache");

    response.setDateHeader("Expires", 1L);

    %>


    • 리다이렉트를 이용해서 페이지 이동하기

    사용자가 로그인 후 자동으로 메인 페이지로 이동하는 것처럼

    웹 서버측에서 웹 브라우저에게 특정 페이지로 이동을 지정하는 것이다. 

    그러므로 웹 브라우저는 실제로 요청을 2번 하게된다.


    ※ URL에 포함하여 전송할 파라미터 값이 있을 경우, java.net.URLEncoder 클래스를 이용하면

    파라미터 값으로 사용될 문자열의 캐릭터 셋을 지정할 수 있다.







    필수 이해 요소



    • JSP 처리과정

    WAS는 JSP 페이지에 대한 요청이 들어오면 다음과 같은 처리를 한다.


    1. JSP 페이지로부터 자바 코드를 생성한다.

    2. 자바 코드를 컴파일해서 서블릿 클래스를 생성한다.

    3. 서블릿에 클라이언트 요청을 전달한다.

    4. 서블릿이 요청을 처리한 결과를 응답으로 생성한다.

    5. 응답을 웹 브라우저에 전송한다.


    해당 JSP 페이지에 대한 서블릿이 이미 존재하는 경우 1,2번은 생략한다.

    자바 소스 코드와 서블릿은 톰캣 폴더에 저장된다.



    • 출력 버퍼와 응답

    JSP 페이지(서블릿)는 응답 결과를 곧바로 웹 브라우저에 전송하지 않고

    출력 버퍼에 임시로 저장했다가 한번에 전송한다.


    -출력 버퍼를 이용할 경우 이점

    1.데이터 전송 성능 향상

    2.JSP 실행 도중에 버퍼를 비우고 새로운 내용 전송 가능

    3.버퍼가 다 차기 전까지 헤더 변경 가능


    작은 단위로 나눠서 데이터를 전송하는 것보다 한번에 큰 단위로 전송하면 더 높은 성능을 

    발휘한다.

    JSP 실행 과정에서 오류가 발생하면, 그 전까지 생성한 내용을 버퍼에서 비우고 

    에러페이지를 출력할 수 있다.

    HTTP 프로토콜 구조상 응답 상태 코드와 함께 헤더 정보를 가정 먼저 웹 브라우저에 전송해야 한다.

    WAS가 버퍼의 내용을 웹 브라우저로 전송하기 전까지만 헤더 정보를 변경 할 수 있다.


    ※page 디렉티브에서 버퍼 설정, autoFlush 속성을 지정 할 수 있다.





    JSP 기본 객체와 영역


    • JSP에서 제공하는 9가지 기본 객체


    request - 클라이언트 요청 정보 저장

    response - 응답 정보 저장

    session - HTTP 세션 정보 저장

    out - JSP 페이지가 생성하는 결과 출력시 사용하는 출력 스트림

    exception - 에레 페이지에서만 사용


    pageContext - JSP 페이지에 대한 정보 저장

    application - 웹 애플리케이션에 대한 정보 저장

    config - JSP 페이지에 대한 설정 정보 저장

    page - JSP 페이지를 변환한 자바 클래스 인스턴스


    • out 

    비 스크립트 요소들(html, 텍스트 등)과 표현식의 결과값은 out 기본 객체에 그대로 전달된다.

    복잡한 조건 비교식 때문에 출력 코드가 복잡해지는 경우가 아니면 사용하지 않는 것이 좋다.


    ※JSP 페이지가 사용하는 버퍼는 out 기본 객체가 내부적으로 사용하고 있는 버퍼와 같다.


    • pageContext 

    JSP 페이지와 일대일로 연결된 객체


    기본 객체 구하기

    속성처리하기

    페이지의 흐름 제어하기

    에러 데이터 구하기


    • application

    웹 어플리케이션에 포함된 모든 JSP 페이지가 공유하는 객체.

    전반적인 정보들(초기 설정 정보, 서버 정보, 자원)을 읽어올 수 있다.


    -웹 어플리케이션 초기화 파라미터 읽어오기

    서블릿 규약은 웹 어플리케이션 전체에서 사용할 수 있는 초기화 파라미터를 정의하고 있다.

    WEB-INF/web.xml 파일에 <context-param> 태그로 추가한다.


    관련 메서드로 초기화 파라미터를 읽어올 수 있다.

    web.xml 파일을 변경 후 웹 서버를 다시 시작해야 한다.(톰캣은 자동)


    데이터베이스 연결과 관련된 설정 파일의 경로, 로깅 설정 파일 등 웹 어플리케이션의 주요 속성 정보를

    담고 있는 파일의 경로를 지정할 때 초기화 파라미터를 사용한다.


    -서버 정보 읽어오기

    이 객체는 사용 중인 컨테이너에 대한 정보를 읽어 오는 메서드를 제공한다.


    -로그 메시지 기록하기

    웹 컨테이너가 사용하는 로그 파일에 로그 메시지를 기록하는 메서드 제공


    -웹 어플리케이션 자원 구하기

    JSP 페이지에서 웹 어플리케이션 폴더에 위치한 파일을 사용할때 유용한 메서드 제공

    파일의 절대경로를 입력하면 추후 유지보수에 문제가 생길 수 있으므로 상대경로를 입력하고 

    관련 메서드를 이용한다.




    웹 어플리케이션의 영역(scope)


    PAGE 영역 - pageContext 기본 객체, 웹 브라우저의 요청으로 실행된 JSP 페이지를 실행하는 범위


    REQUEST 영역 - request 기본 객체, 웹 브라우저가 URL을 통해서 페이지를 이동할때 발생하는 웹 서버에 대한 한번의 요청

    요청 마다 새로운 REQUEST 영역이 생성되며, 요청을 처리하는데 사용되는 모든 JSP 페이지를 포함한다.(include, forward)


    SESSION 영역 - session 기본 객체, 하나의 웹 브라우저와 관련된 영역, 관련된 모든 요청이 이 영역에 포함된다.


    APPLICATION 영역 - application 기본 객체, 하나의 웹 어플리케이션에 포함된 전체영역



    • JSP 기본 객체의 속성(attribute) 사용하기

    위 4개의 기본 객체는 속성을 갖는다. 각 기본 객체가 존재하는 동안 그 속성을 사용할 수 있다. JSP 페이지 사이에서 정보를 

    주고 받거나 공유하기 위한 목적으로 사용된다.

    메서드를 이용하여 위 기본 객체의 속성 값을 추가, 변경, 삭제 할 수 있다. 속성 값으로 모든 클래스 타입이 올 수 있으므로

    속성 값을 지정할때 사용한 타입으로 변환해야 한다. 그리고 기본 데이터 타입은 레퍼 타입으로 사용해야 한다.


    pageContext - 주로 커스텀 태그에 새로운 변수를 추가할때 사용한다.

    request - 한번의 요청을 처리할때 사용되는 JSP페이지에서 쓰이는 값을 저장한다.

    session - 로그인 정보처럼 한 사용자와 관련된 정보를 JSP 사이에서 공유하기 위해서 사용

    application - 모든 사용자가 공유할 정보를 저장, 임시폴더 경로처럼 웹 어플리케이선 설정 정보를 주로 저장





    페이지 모듈화와 요청 흐름 제어


    • <jsp:include> 액션 태크를 이용한 공통 영역 작성

    웹 사이트를 구성하는 다수의 페이지의 공통되는 요소의 코드 중복 문제를 없앨때 <jsp:include> 액션 태그를 사용한다.


    -<jsp:param> 태그로 포함할 페이지에 파라미터 추가하기

    <jsp:include> 액션 태그에 <jsp:param> 태그를 자식태그로 추가하여 포함할 JSP 페이지에 파라미터를 추가 할 수 있다.


    이미 동일한 이름의 파라미터가 존재하면 기존 값을 유지하면서 새로운 값을 추가한다. 하지만 

    액션 태그로 추가한 파라미터를 기존 보다 우선한다. 그리고 액션 태그로 포함하는 페이지에서만 유효하다.


    -<jsp:param> 태그와 캐릭터 인코딩

    request.setCharacterEncoding() 메서드로 캐릭터 셋을 지정해야 올바르게 값이 전달된다.



    • include 디렉티브를 이용한 중복 코드 삽입

    include 디렉티브는 <jsp:include> 액션태그와 기능은 비슷하지만 포함하는 방식에 차이가 있다.

    JSP 파일이 자바 파일로 변환 되기 전, 포함하는 JSP파일 내용을 해당 위치에 삽입한다.


    include 디렉티브를 통해 다른 JSP에 포함되는 파일에 확장자는 jspf를 사용하는 편이다.

    .jspf 파일 역시 콘텐츠 타입을 정확히 지정해야 결과가 올바르게 출력된다.


    -include 디렉티브의 활용

    위 액션태그는 페이지 레이아웃의 한 구성요소를 모듈화하기 위해 사용되는 반면에,

    include 디렉티브는 모든 JSP페이지에서 사용되는 변수를 지정하고

    저작권 표시처럼 모든 페이지에서 중복되는 간단한 문장에 사용된다.


    다수의 JSP 페이지에서 application, session 기본 객체에 저장한 속성 값을 읽어와서 사용한다면

    코드 중복이 많이 발생하는데 이때 include 디렉티브로 변수로 저장한 속성 값을 저장한 파일을 

    불러올 수 있다.


    -코드 조각 자동 포함 기능

    다수의 JSP 페이지에 include 디렉티브가 공통 삽입되야 할 경우 또한 코드 중복이 된다.

    web.xml에서 <include-prelude>와 <include-coda> 태그를 사용해서 해결할 수 있다.  


    <jsp-property-group>: JSP의 프로퍼티를 포함한다.

    <url-pattern>: 프로퍼티를 적용할 JSP 파일의 URL 패턴을 지정한다.

    <include-prelude>: 해당하는 JSP 파일의 앞에 삽입할 파일을 지정한다.

    <include-coda>: 해당하는 JSP 파일의 뒤에 삽입할 파일을 지정한다. 


    <include-prelude>와 <include-coda> 태그는 둘 중 필요한 것만 사용할 수도 있다.





    자바빈과 액션태그


    JSP 기반 웹 어플리케이션에서 회원정보, 게시판 글 등의 정보를 표현할때 사용한다.

    jsp 페이지의 주된 기능은 데이터를 보여주는 것이고 자바빈은 주로 속성(프로퍼티)을 표현하는 용도로 사용된다.

    자바빈 클래스는 데이터를 저장하는 필드와 데이터를 읽어오고 값을 저장하는 메서드로 구성된다.



    • <jsp:useBean> 액션 태그를 사용하여 객체 생성하기

    이 태그에서 중요한 점은 객체를 생성할 뿐만 아니라 지정한 영역에 저장한다는 점 그리고 이미 해당 영역에 객체가 존재하면 

    그 객체를 사용한다. 이전 jsp 페이지에서 생성한 객체의 데이터를 다른 jsp에서 똑같은 객체를 생성하여 사용할 수 있다.


    page - pagecontext 객체

    request - request 객체

    session - session 객체

    application - application 객체


    액션태그를 이용하여 위와 같은 영역 별로 공유할 데이터를 쉽게 저장할 수 있다.



    • <jsp:getProperty>와 <jsp:setProperty> 액션태그

    생성한 자바빈 객체의 프로퍼티 값을 변경하고 읽어올때 사용한다.



    스프링처럼 mvc를 지원하는 프레임워크의 도입과 표현 언어의 사용으로 <jsp:usebean> 액션 태그와 

    <jsp:getProperty>, <jsp:setProperty> 태그의 사용빈도는 낮아지고 있다.





    클라이언트와의 대화1: 쿠기



    JSP에서 쿠키는 웹 서버가 만들고 웹 브라우저가 저장한다. 

    웹브라우저는 웹 서버로 부터 응답 데이터의 헤더에 포함 된 쿠키를 받고 이후 쿠키가 삭제되기 전까지 

    웹 서버에 보내는 요청에 쿠키를 포함한다.


    • 쿠키의 구성

    이름: 각각의 쿠키를 구별하는 이름

    : 쿠키 이름과 관련된 값

    유효시간: 쿠키의 유지시간

    도메인: 쿠키를 전송할 도메인

    경로: 쿠키를 전송할 요청 경로



    • 쿠키 생성하기

    JSP 페이지에서 Cookie 객체를 생성한다.

    객체는 쿠키 이름과 값을 갖고 있으며 addCookie() 메서드로 response 객체에 저장한다.

    쿠키 클래스가 제공하는 메서드로 쿠키 특징을 변경하거나 읽어올 수 있다.



    • 쿠키 값 읽어오기

    JSP에서는 웹 브라우저가 요청(request)과 함께 보내는 쿠키를 getCookies() 메서드로 읽어올 수 있다.

    이때 쿠키는 배열을 리턴한다. (값이 없다면 null)

    null 여부를 확인하지 않고 사용하면 NullPointerException이 발생한다.



    • 쿠키 값 변경 및 삭제하기

    쿠키 값을 변경하려면 

    같은 이름의 쿠키 새로 생성해서 응답 데이터로 보낸다.

    우선 쿠키의 존재여부를 코드로 확인 후에 생성해야한다.


    쿠키를 삭제하려면 

    쿠키 클래스의 setMaxAge() 메서드를 호출할때 인자 값으로 0을 주고 응답 헤더에 추가한다.



    • 쿠키의 도메인

    기본적으로 쿠키는 그 쿠키를 생성한 서버에만 전송된다.

    하지만 같은 도메인을 사용하는 모든 서버에 쿠키를 보내야 할때에는 setDomain() 메서드를 이용한다.



    • 쿠키의 경로

    일반적으로 쿠키는 웹 어플리케이션에 포함된 다수의 jsp와 서블릿에서 사용되므로

    쿠키 경로는 "/"으로 설정한다.

    도메인이 쿠키를 공유할 도메인 범위를 설정하려면 setPath() 메서드를 이용한다.



    • 쿠키의 유효시간

    쿠키의 유효시간을 설정하지 않으면 웹 브라우저 종료와 함께 삭제된다.

    유효시간을 설정하면 그 시간 만큼 쿠키가 삭제되지 않고 존재한다.

    setMaxAge() 메서드로 초 단위로 설정한다.


    ※아이디 기억하기, 자동 로그인 기능을 쿠키를 이용해서 구현한다.


    • 쿠키와 헤더

    응답 데이터에 쿠키를 추가하면 Set-Cookie 헤더를 통해서 웹브라우저로 전달한다.

    출력 버퍼가 플러시 된 이후에는 쿠키를 새롭게 추가 할 수 없으므로, 플러시 되기 전에

    추가해야한다.(웹 브라우저에 데이터가 전송되면 응답 헤더에 새로운 값을 추가할 수 없다.)



    • 쿠키 처리를 위한 유틸리티 클래스

    쿠키를 생성하고 값을 읽는 코드를 별로의 보조 유틸리티 클래스로 만들면 

    JSP 페이지 내의 코드를 훨씬 간결하게 만들 수 있다.



    쿠키를 사용한 로그인 상태유지


    1.로그인에 성공하면 특정 이름을 갖는 쿠키를 생성한다.

    2.해당 쿠키가 존재하면 로그인한 상태라고 판단한다.

    3.로그아웃하면 해당 쿠키를 삭제한다.


    ※책의 예저처럼 아이디를 평문 형태로 쿠키 값으로 사용하면 보안에 큰 문제가 생긴다.

    웹 브라우저의 개발도구를 사용하면 쿠키 값을 쉽게 변경할 수 있기 때문이다.

    즉, 다른 아이디로 서버에 접근할 수 있게 되는 것이다. 이런 이유로 쿠키에 아이디를 저장할때

    다양한 암호화 방식을 혼합해서 저장한다.





    클라이언트와의 대화1: 세션



    세션은 웹 서버(웹 컨테이너)에서 생성 후 저장된다. 웹 브라우저마다 세션을 갖는다.

    생성된 세션은 session 기본 객체를 통해서 사용할 수 있다.


    컨텍스트 경로가 다른 웹 어플리케이션의 세션을 서로 다르다.


    • 세션 생성하기

    page 디렉티브에서 session 속성을 true(기본값)로 지정

    세션은 웹 브라우저가 웹 서버로 최초 요청을 보낼때 생성되고

    그 다음 요청부터 재사용 된다.



    • session 기본 객체

    제공 되는 메서드로 속성 값을 저장하거나 읽어올 수 있다.

    웹브라우저 마다 갖는 세션을 구분하기 위해 세션마다 웹 서버가 제공한 고유ID를 갖는데

    웹 브라우저가 웹 서버에 연결할 때마다 매번 세션ID를 보내서 웹 서버가 구분하도록 한다.


    웹 서버와 웹 브라우저는 쿠키를 이용해서 세션 ID를 공유한다. (JSESSIONID 쿠키)



    • 기본 객체의 속성사용

    한번 생성된 세션은 지정된 유효기간 동안 유지 되므로 웹 어플리케이션을 실행하는 동안

    지속적으로 사용해야 하는 데이터 저장소로 세션이 적당하다.

    setAttribute(), getAttribute() 메서드를 이용한다.



    • 세션 종료


    세션을 유지할 필요가 없으면 session.invalidate() 메서드로 종료한다.

    현재 사용중인 session 기본 객체가 삭제되면서 저장되어 있던 속성 목록도

    함께 삭제된다.



    • 세션 유효 시간


    session 기본 객체를 사용할때마다 세션의 최근 접근 시간이 갱신된다. (웹 브라우저에서 JSP페이지가 실행될때마다, 물론 true일때)

    일정 시간 이내에 다시 세션에 접근하지 않는 경우 자동으로 세션은 종료된다.


    -세션 유효 시간 설정 방법

    1. WEB-INF/web.xml 파일에서 <session-config> 태그 사용(분 단위)

    ※<session-timeout>의 값을 0이나 음수로 설정하면 유효 시간을 갖지 않는다.

    invalidate() 메서드를 따로 호출하지 않으면 메모리 부족현상이 발생할 수 있다.


    2. session 기본 객체가 제공하는 setMaxInactiveInterval() 메서드 사용(초 단위)



    • request.getSession()을 이용한 세션 생성

    request.getSession() 메서드는 현재 요청과 관련된 session 객체를 리턴한다.

    page 디렉티브의 session 속성 값은 false로 지정해야한다.

    이 메서드는 session이 존재하지 않으면 새롭게 session을 생성한다.


    request.getSession(false)는 세션이 존재하는 경우에만 session 객체를 리턴하고 없으면

    null을 리턴한다.



    • 세션을 사용한 로그인 상태유지


    1. 로그인에 성공하면 session 기본 객체의 특정 속성에 데이터를 기록한다.

    2. 이후로 session 기본 객체의 특정 속성이 존재하면 로그인한 것으로 간주한다.

    3. 로그아웃 할 경우 session.invalidate() 메서드를 호출하여 세션을 종료한다.



    • 연관된 정보 저장을 위한 클래스 작성

    session 속성으로 저장되는 값이 많다면 개별이 아닌 클래스에 묶어서  session에 

    저장하면 관리하기 수월하다.

    연관된 정보가 한 객체에 담겨있으므로 사용할 때에는 객체를 가져온 뒤 메소드로 

    필요한 값을 불러올 수 있다.


    메서드가 존재하지 않아서 발생하는 컴파일 에러가 NullPointerException 보다 처리하기

    수월할 것이다. (저장 시에 필요 없어서 삭제한 속성을 깜빡하고 읽어 올 경우 익셉션 발생)



    • 쿠키 vs 세션


    쿠키의 데이터는 네트워크를 통해 전달 되므로 HTTP 프로토콜을 사용하는 경우

    중간에 누군가가 쿠키의 값을 읽을 수 있다.

    하지만 세션의 값은 오직 서버에만 저장되므로 중요한 데이터를 저장하기 알맞다.


    흔치 않지만 웹 브라우저가 쿠키를 지원하지 않을 경우 또는 막는 경우 세션을 사용한다.

    서블릿/jsp는 쿠키 대신 URL 재작성 방식을 사용해서 세션ID를 웹 브라우저와 공유할 수 있다.


    하지만 세션은 여러 서버에서 공유할 수 없으므로

    Daum과 같은 포탈 사이트는 쿠키에 로그인 정보를 저장한다.

    '웹프로그래밍 > jsp' 카테고리의 다른 글

    ContextPath로 이미지의 URL 경로 작성  (0) 2018.05.31
    JSP 정리  (0) 2018.02.21