[Servlet&JSP] Chap 6-1. 내장 객체 & Cookie 와 Session

김승현·2021년 11월 27일
0
post-custom-banner

JSP 내장 객체

  • JSP내에서 기본적으로 제공하는 객체 (페이지 로딩 순간 생성 되어 있음)
  • scriptlet tag와 Expression tag에서 사용할 수 있도록 암묵적으로 선언된 객체를 뜻함
    - 서블릿에서는 생성해서 사용해야 한다.
  • request, response ,out, session, application, page 등등

JSP 내장 객체의 종류

구분의미
requestHttpServletRequest 객체 참조 변수
responseHttpServletResponse 객체 참조 변수
outJspWriter 객체 참조 변수 (out.println 등을 사용할 수 있음)
sessionHttpSession 객체 참조 변수
applicationServletContext 객체 참조 변수
page현재 JSP 페이지에 대한 참조 변수
(타 객체와는 다르게 page 객체가 아닌, pageContext 내장객체로 접근 가능)

scope

  • 객체 중에서 정보를 담고 있는 객체의 사용 범위를 의미
  • JSP 에는 4개의 scope가 존재
    • application
    • session
    • request
    • page

application

  • 하나의 웹 어플리케이션 당 1개의 application 객체가 생성 됨
  • 실제 사용은 ServletContext 객체를 통해 정보를 주고 받음
  • 같은 웹 어플리케이션에 요청되는 정보들을 공유 하는 객체
  • 서버가 꺼지게 되면, 해당 application 객체는 사라짐
  • setAttribute와 getAttribute 메소드를 통해서 하나의 웹 Application에서 값을 공유 할 수 있음
  • application.getRealPath("/") 메소드를 이용하면 현재의 프로젝트 WebContent의 디렉토리를 알 수 있음 (절대경로)

session

  • 하나의 웹 브라우저 당 1개의 session 객체가 생성 됨
  • 하나의 웹 브라우저 내에서는 같은 정보들을 공유하는 객체
    (하나의 웹 브라우저로 한번의 로그인 세션 정보를 담을 수 있음)
  • 해당 브라우저가 닫아지게 되면, session 정보는 사라짐

request

  • 하나의 요청에 대한 정보를 공유하는 객체
  • 요청에 대한 값 및 인코딩 등을 처리할 수 있는 객체

page

  • 하나의 페이지에 대해 정보를 공유하는 객체
  • 실제 사용은 pageContext 객체를 통해 정보를 주고 받음
    • 자바 언어만 사용할 경우에는 별도로 객체를 쓰지 않고 변수로 데이터를 처리함
  • forward 메소드를 사용하면 페이지 이동를 이동한다.
    • 해당 페이지가 가지고 있던 데이터(Request)들도 가지고 이동 한다.
    • ex) pageContext.forward("경로");
  • include 메소드는 사용하면 다른 페이지를 해당 페이지로 포함시킨다.
    • ex) pageContext.include("경로");




session


HTTP 통신 방법

  • HTTP는 Server와 Client가 통신을 할때 요청에 대한 응답을 하고 나면 연결된 세션을 끊어 버림
  • Client는 서버에게 다른 서비스를 요청하려면 새로운 세션 연결을 맺고 요청 및 응답을 진행
  • 웹은 수 많은 클라이언트들의 연결을 처리 하기 위해 연결 상태를 유지 하지 않는 stateless 방식을 사용

stateless를 사용함으로써 발생하는 문제점

  • 연결유지 상태가 아닌 매번 연결이 끊어 지기 때문에 유지 되어야 하는 정보들이 사라짐
    • ex) 로그인을 하여도 결국 세션이 끊어지게 되면 로그인 성공에 대한 정보가 남아있지 않음


Cookie와 Session

  • 연결이 끊어진 이후에도 Client에 대한 정보를 유지하기 위한 방법

    • Session을 이용한 방법 : Server 측에 연결정보를 저장하는 방법

    • Cookie를 이용한 방법 : Client 측에 연결 정보를 저장하는 방법

      • 보안상 Cookie 방식은 로그인 연결 정보를 저장하기에는 부적합함
        (Cookie가 탈취 당하면 연결 정보가 탈취 당하는것과 같음)


Session

  • 서버에 데이터를 저장하는 기술로 Client에는 session ID(token)를 부여하고, Client가 request에 Session ID를 넣어 보내면 Session ID를 기준으로 일치하는 session을 찾아 정보를 사용함
  • 만일 Client가 보낸 sessionID가 없으면 새롭게 발급

Session 객체

  • session 객체는 컨테이너가 자동으로 생성
  • 개발자는 session 객체를 가져다 쓰면 됨 (Request.getSession() 메소드)
    • Servlet에서는 HttpSession session = request.getSession([true | false]) 으로 생성
  • 하나의 웹 브라우저내에서는 같은 정보를 공유하는 객체
    (하나의 웹 브라우저에는 하나의 로그인 세션 정보를 담을 수 있음)

getSession 메소드

1. Request.getSession() 또는 Request.getSession(true)

  • SessionID 일치 여부 확인생성 (null을 결코 리턴하지 않음)
  • session이 있으면 해당 session을 리턴
  • session이 없으면 새롭게 생성
  • jsp 페이지에서는 1번 케이스 사용

2. Request.getSession(false)

  • SessionID 일치 여부 확인null 리턴
  • session이 있으면 해당 해당 session을 리턴
  • session이 없으면 null 리턴

session과 관련된 메소드

메소드의미
setAttribute(String,object)- request 객체에 전달하고 싶은 값을 String 이름으로 Object에 저장하는 메소드
- String이 key 역할이고 Object가 Value 역할임
getAttribute(String)- 해당 매개변수와 동일한 객체 속성값을 가져오는 메소드
- String이 key가 되고, 해당 key에 맞는 값을 가져옴
removeAttribute(String)- request객체에 저장되어 있는 값 중 매개변수와 동일한 속성값을 삭제하는 메소드
- String을 작성하게 되면 해당 값을 삭제함
getId()- 발급되는 SessionID 값을 가져옴
getCreationTime()- Session 객체가 생성된 시간을 반환
invalidate()- 해당 세션을 파기 (삭제)
setMaxInactiveInterval(int)- 객체의 유지 시간을 설정, 지정된 시간이 지나면 객체 자동 삭제
getAttributeNames()- 객체에 저장되어 있는 모든 정보의 이름만 반환
profile
개발자로 매일 한 걸음
post-custom-banner

0개의 댓글