JSP 12. 기본객체 - 내장객체 (Implicit Object)

복습

buffer

  • 응답데이터가 나가기전에 쌓이는 영역
  • 존재하지 않으면 forward나 include가 불가능한 방식이 된다
  • 모든 jsp의 기본설정 버퍼 => 8kb

2020.12.03.목요일

/webStudy01/WebContent/06/implicitObject.jsp

기본객체

  • 개발자가 선언을 하거나 생성하지 않았는데도 사용할 수 있는 객체
    (ex) 자바스크립트에서 기본객체 : window, document
  • jsp코드 = 지역코드
    • _jspservice()안으로 들어감
      기본객체 = 지역변수

1. request(HttpServletRequest)

2. response(HttpServletResponse)

3. out(JspWriter)

  • 응답데이터기록이나 버퍼 제어 관리에 사용
  • 정적테스트 => out.write로 바뀜

4. session (HttpSession)

/webStudy01/WebContent/06/sessionDesc.jsp

  • 세션이란?
    • 통로 : 두 피어사이에 유일하게 개방된 연결
    • 기간 : 한클라이언트가 하나의 브라우저를 이용해서 어플리케이션 사용 시작 이벤트를 발생시킨 후, 종료 이벤트를 발생시킬때까지의 기간. 시간의 의미
    • stateless(무상태) 프로토콜인 HTTP를 보안하기 위해 최소한의 상태 정보를 서버에서 관리

세션의 생명주기

시작이벤트 : 최초의 요청이 발생하면 세션 시작

  • session id : <%=session.getId() %>
  • 세션 생성시간 : <%=new Date(session.getCreationTime()) %>
  • 마지막 접속시간 :<%=new Date(session.getLastAccessedTime()) %>
  • timeout(MaxInactive):<%=session.getMaxInactiveInterval() %>s
  • timeout셋팅 : <% session.setMaxInactiveInterval(3*60); %>

종료이벤트 :

  • 1) invalidate -- 명확한 로그아웃
  • 2) timeout -- 이내에 새로운 요청이 발생하지 않으면 세션 만료.
  • 3) 브라우저 종료 (반드시 꼭은 아니다)
  • 4) 쿠키 삭제
  • 세션은 한 클라이언트를 대상으로 생성 및 관리
  • 세션이 가진 부분적 쿠키 의존성으로 인해 웹에서의 세션특정 클라이언트의 특정 브라우저에 대해 생성 및 관리
  • 세션은 특정 클라이언트의 특정 브라우저로부터 최초의 리퀘스트가 도착한 경우 서버에서 생성되고, 동일 클라이언트가 여러 브라우저를 사용하는 경우, 세션 역시 여러개 생성 될 수 있다.
  • 세션은 명시적으로 로그인 상태 종료 명령을 내리거나, 세션 만료 시간이 지나도록 아무런 요청이 발생하지 않을 때 소멸

세션이 유지되는 구조(session tracking)

하나의 컨텍스트 내에 클라이언트에 따라 세션이 만들어지는 경우 각 세션을 구분 할 수 있는 식별자가 필요 이를 session id라고 한다.

세션 유지를 위한 session id 재전송 방법

1) COOKIE

  • 세션 아이디는 세션이 생성될 당시 생성되어 최초 요청에 대한 응답이 전송될 때 응답헤더에 쿠키 형태로 포함된다.
  • 브라우저의 쿠키 저장소에 들어있던 세션 쿠키는 동일 세션내에서 발생하는 다음 리퀘스트들에 요청헤더로 포함되어 서버로 전송되고, 서버는 헤더에 포함된 세션쿠키를 통해 유효 세션 내의 요청 정보임을 확인할 수 있다.

2) URL : 세션 파라미터 재전송 구조

<a href="sessionDesc.jsp;jsessionid=<%=session.getId()%>">세션 유지</a>

  • 세션이 없더라도 세션 파라미터를 활용하면 세션유지가 된다
    • 단점 : request line에 sessionid를 넣으면 보안에 취약, 모든 url이 jsessionid를 가지고 있도록 재작성 되어야 함
    • 안전하게 할 수 있는 방법
      • 아무도 못읽게 만든다. 암호화 기법
      • 복호화 가능하도록 양방향 기법 사용
  • 3) SSL
    secure socket layer를 이용해 암호화된 재전송 구조

5. application(ServletContext)

/webStudy01/WebContent/06/servletContextDesc.jsp

  • Servlet Context
    • 하나의 웹어플리케이션과 어플리케이션이 운영되는 컨테이너에 대한 정보를 캡슐화한 객체(singleton)
    • 서블릿이 놓여있는 어플리케이션에 관한 정보 + 어플리케이션이 있는 서버에 관한 정보
  • CAC(Context Aware Computing)
    • 영화관 안에서 알아서 진동모드로 전환

1.dynamic web modul version확인

  • 현재 서블릿 스펙버전

2. 파일의 mime type확인

3. logging

<% application.log("의도적으로 기록한 로그 메시지"); %>

  • 하나의 어플리케이션 안에서 튜닝을 위한 기본데이터를 남겨야하는 경우 로그를 활용
  • 주로 log4j를 사용
  • 사용자의 모든 요청을 로그로 남기려면 필터로 요청을 인터셉트 후 log4j의 jdbc appender로 db에 남기기

4. 컨텍스트 파라미터 확보

<%=application.getInitParameter("contentFolder") %>

  • <%--web.xml에 있는 contentFolder--%>

5. web resource 확보⭐

  • 사실 모든 자원은 파일로 존재 -> 파일을 접근하려면 절대경로가 필요 -> 필요한 메서드 3개
  • getRealPath(파일시스템의 진짜경로), getResource, getResourceAsStream

6. page(Object)

== this(현재 클래스의 인스턴스)
구체적인 타입을 명시할 수 없는 녀석

7. config(ServletConfig)

  • 초기화 콜백(init())에서 파라미터 꺼낼때 본 녀석
  • config는 jsp에서 잘 안씀
    • 서블릿 개발 후, web.xml에 서블릿을 등록하고 매핑해야 서블릿을 사용할 수 있음
    • web.xml태그들이 객체가 되어 ServletConfig로 캡슐화가 됨
    • config가 있다는 건 jsp도 서블릿이라는 것이지만 jsp는 서블릿처럼 매핑과 등록이 필요가 없음, 그래서 config는 jsp에서 잘 안씀

8. exception(Throwable)

  • 일반페이지에서는 비활성화(page 지시자의 isErrorPage="true"로 활성화시킴)
  • 모든 exception의 최상위는 Throwable
  • 디렉티브
    • errorPage : 지금 이 jsp에서 코드를 실행하다가 에러가 발생하면 여기에 설정된 페이지로 넘기겠다
    • isErrorPage : 에러처리당하는 해당 페이지에서는 true로 설정되어있음

9. pageContext (⭐중요⭐)

  • 가장 먼저 생성되는 기본객체, 나머지 기본객체에 대한 getter를 가짐.

  • pageContext를 통해서 모든 객체 사용 가능
    <%=pageContext.getRequest() == request %> => true
    <%=((HttpServletRequest)pageContext.getRequest()).getContextPath() %> => /webStudy01

  • el에서 유일하게 쓸 수 있는 기본객체
    ${pageContext.request.contextPath }

  • el안에서는 pageContext만 똑같고 나머지애들 다 없음

기능
1) Scope제어

  • 내부의 map형태의 scope를 가지고 있음
    • request, session, servlet context
  • attribute의 scope단위 지정 가능
 <% pageContext.setAttribute("test", "value", pageContext.REQUEST_SCOPE); %>
 <%=request.getAttribute("test") %>

=> value
2) 흐름제어 : 무조건 dispatch방식(redirect메서드 없음)
3) 에러데이터 확보

  • <%pageContext.include("/06/sessionDesc.jsp");
    • 입력한 위치(예상 위치)에 출력 잘 댐
    • 흐름제어까지도 가능한 구조
    • 방출 이후 예외 발생하면 예외처리 불가능
  • request.getRequestDispatcher("/06/sessionDesc.jsp").include(request, response);%>
    • '버퍼'때문에 위치가 맨위에서 보임 -- 출력되는 위치가 달라..

3) 에러테이터확보

  • _jspService()내의 기본객체 생성과정
  • 나머지 기본객체는 pageContext의 getter로 꺼내씀
  • 나머지 기본객체 필요하면 pc에서 잘 호출하면 된다..

서블릿처리과정

  • 최초요청-요청처리할 서블릿 유무 확인-객체 유무확인-클래스 컴파일 확인-컴파일-싱글톤객체 생성-_jspservice 메서드 불렁..

D:\A_TeachingMaterial\6.JspSpring\workspace.metadata.plugins\org.eclipse.wst.server.core\tmp1\work\Catalina\localhost\webStudy01\org\apache\jsp_06


  • 기본 타임아웃은 30분인데 2분으로 줄일수도 있다.
    • (ex) 인터넷뱅킹

웹 어플리케이션 상태유지

쿠키

세션

좋은 웹페이지 즐겨찾기