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)
(ex) 자바스크립트에서 기본객체 : window, document
- _jspservice()안으로 들어감
기본객체 = 지역변수
/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) 인터넷뱅킹
웹 어플리케이션 상태유지
쿠키
세션
Author And Source
이 문제에 관하여(JSP 12. 기본객체 - 내장객체 (Implicit Object)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://velog.io/@zhyun1220/JSP-12.-기본객체
저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Author And Source
이 문제에 관하여(JSP 12. 기본객체 - 내장객체 (Implicit Object)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@zhyun1220/JSP-12.-기본객체저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)