JSP : Servlet에 작성되어 있는 코드를 Tag 위주의 HTML 기반으로 작성할 수 있게 하는 기법
학습목표
JSP 내장 객체에 대해 설명할 수 있다.
request, response, session, out, application, pageContext 등의 역할 및 사용 방법에 대해 설명할 수 있다.
JSP 내장 객체
JSP 페이지 내에서 빈번하게 사용되는 객체들을 Container가 생성하여 제공하는 객체
선언하지 않아도 자동으로 내장되어 있어서 바로 이용할 수 있는 것
내장 객체 | 클래스 | 주요 역할 |
request | javax.servlet.http.HttpServletRequest | 요청 정보를 읽어올 때 사용 |
response | javax.servlet.http.HttpServletResponse | 요청에 대한 응답 처리 |
pageContext | javax.servlet.jsp.PageContext | JSP 실행에 대한 context 정보를 참조하기 위해 사용 |
session | javax.servlet.http.HttpSession | 세션 정보 처리 |
application | javax.servlet.ServletContext | 웹 서버의 애플리케이션 처리와 관련된 정보 참조 |
out | javax.servlet.jsp.JspWriter | 사용자에게 전달하기 위한 output 스트림 처리 |
config | javax.servlet.ServletConfig | 초기화 환경 처리 |
page | java.lang.Object | 현재 JSP 페이지에 대한 클래스 정보 |
exception | java.lang.Throwable | 예외 처리 |
request - response
request
- javax.servlet.http.HttpServletRequest 타입의 객체
- 클아이언트의 요청 정보를 제공하기 위해 사용
response
- javax.servlet.http.HttpServletResponse 타입의 객체
- 클라이언트의 요청에 대한 응답을 처리하기 위해 사용
pageContext
- javax.servlet.jsp.PageContext 타입의 객체
- 다른 내장 객체들을 리턴하는 메서드를 제공함
- 클라이언트의 요청을 다른 페이지로 include, forward 시키는 기능을 제공함
- void include(java.lang.String path) : path에 해당하는 페이지를 포함시킴
- void forward(java.lang.String path) : path에 해당하는 페이지로 포워딩 시킴
- Exception getException() : Exception 리턴(= exception 내장 객체)
- JspWriter getOut() : JspWriter 리턴(= out 내장 객체)
- Object getPage() : Object 리턴(= page 내장 객체)
- ServletRequest getRequest() : ServletRequest 리턴(= request 내장 객체)
- ServletRequest getResponse() : ServletResponse 리턴(= request 내장 객체)
- ServletConfig getServletConfig() : ServletConfig 리턴(= config 내장 객체)
- ServletContext getServletContext() : ServletContext 리턴(= application 내장 객체)
- HttpSession getSession() : HttpSession 리턴(= session 내장 객체)
session(HttpSession 타입)
HttpSession 타입의 session 객체는 현재 사용자의 상태 정보를 유지하기 위해서 사용되는 객체
session 객체의 사용 --> "true" 로 지정돼야만 사용할 수 있는 내장 객체이다.
page 지시문에서 session 속성의 값 ≠ "false"
<%@ page session="false"%>
session의 주요 메서드
- String getID() : session 객체에 부여된 sessionID 리턴
- void setMaxlnactiveInterval(int interval) : session 객체가 Servlet Container에 유효한 시간 설정
- void getMaxlnactiveInterval() : session 객체가 Servlet Container에 유효한 시간 리턴
- void invalidate() : serssion에 등록된 모든 객체를 삭제하고 session 객체를 invalidate 시킴
- boolean isNew() : session 객체가 처음 생성된 객체인지의 여부를 알 수 있음
- void removeAttribute(String name) : 이 session에 특정 name으로 등록된 특정 객체 삭제
- void setAttribute(String name, Object value) : session에 특정 이름으로 객체 등록
- Object getAttribute(String name) : session에 특정 이름으로 객체 리턴
- Enumeration getAttributeNames() : session에 등록된 모든 속성 이름들을 Enumeration 타입으로 리턴
application
- ServletContext 인터페이스 타입의 객체
- 웹 애플리케이션(컨텍스트) 전체를 관리하는 객체(=ServletContext에도 초기 설정 가능)
- 애플리케이션이 실행되는 환경 정보, 서버 자원과 관련한 정보를 얻을 때
- 로그 파일을 기록하는 작업
- 모든 Servlet이나 JSP에서 공유할 객체를 등록할 때
Servlet에 담긴 정보가 이용되는 범위는?
모든 JSP, 모든 Servlet에서 이용 가능하다.
application 객체의 주요 메서드
- ★ RequestDispatcher getRequestDispatcher(String path) : 문자열 path에 지정된 자원을 위한 RequestDispatcher 생성
- void log(String msg) : msg 내용을 로그 파일에 기록
- void log(String message, Throwable throwable) : 예외 상황과 관련한 정보를 포함하여 로그 파일에 기록
- Object getAttribute(String name) : 문자열 name에 해당하는 속성 값이 있다면 Object로 리턴
- Enumeration getAttributeNames() : application 객체에 저장된 속성 이름들을 Enumeration 형태로 리턴
- void removeAttribute(String name) : 특정 name으로 등록된 객체 삭제
- void setAttribute(String name, Object value) : 문자열 name에 해당하는 객체 저장
out
- javax.servlet.jsp.JspWriter 타입의 객체
- JSP 페이지에서 특정 내용을 출력 스트림을 통해 클라이언트에게 전송하기 위해서 사용됨
out 객체의 주요 메서드
- void clear() : 버퍼에 저장된 내용 비움
- void clearBuffer() : 버퍼의 현재 저장된 내용 비움
- void close() : 출력 스트림을 담은 버퍼의 내용을 지움
- void flush() : 버퍼와 출력 스트림 비움
- int getBufferSize() : 출력 스트림의 버퍼 크기 리턴
- int getRemaining() : 남아있는 버퍼에서 사용 가능한 버퍼의 byte 수를 리턴
- boolean isAutoFlush() : auto flush 상태 리턴
- void newLine() : 개행 처리
- void print(contents) : 다양한 내용을 출력
- void println(contents) : 다양한 내용물을 출력하고 개행 처리
config
- javax.servlet.ServletConfig 타입의 객체
- Servlet의 초기화 정보를 획득하기 위해 사용됨
ServletConfig에 담긴 정보가 이용되는 범위는?
해당 JSP, 해당 Servlet에서만 이용 가능하다.
특정 JSP를 위한 ServletConfig 객체를 다른 쪽에서 같이 공유해서 이용할 수는 없다.
config의 주요 메서드
- String getInitParameter(String name) : name에 해당하는 초기화 파라미터의 value 값 리턴
- Enumeration getInitParameterNames() : 초기화 파라미터의 name들을 Enumeration 타입으로 리턴
page
- JSP Container에서 생성된 Servlet 인스턴스 객체를 참조하는 객체
exception
- java.lang.Throwable 인터페이스 타입의 객체
- page 지시문에서 errorPage에 지정된 JSP 페이지에서만 사용할 수 있는 객체
내장 객체의 유효범위
내장 객체를 여러 JSP에서 동일 객체로 이용하는지에 대한 개념
내장 객체 중 별도로 유효범위를 가지는 것들
- request : 동일 request 범위에 있는 모든 JSP, Servlet 파일에서 공유 가능함
- session : 동일 session 범위에 있는 모든 JSP, Servlet 파일에서 공유 가능함
- application : 동일 Web Context에 있는 모든 JSP, Servlet 파일에서 공유 가능함
세 가지는 공통된 함수들이 있다.
request
request 내장 객체에 특정 객체를 등록하면 하나의 요청에 의해 실행되는 모든 Servlet과 JSP에서 공유할 수 있음
request에 객체를 등록할 때는 setAttribute() 메서드를 사용하고 등록된 객체를 꺼낼 때는 getAttribute() 메서드를 사용함
session
session 객체에 특정 객체를 등록하면 session이 살아있는 동안 같은 브라우저를 통해 호출하는 모든 Servlet과 JSP에서 공유 가능
session에 객체를 등록할 때는 setAttribute() 메서드를 사용하고 등록된 객체를 꺼낼 때는 getAttribute() 메서드를 사용함
application
application 객체에 특정 객체를 등록하면 Container가 살아있는 동안 같은 Web Context에 존재하는 모든 Servlet과 JSP에서 공유 가능
application에 객체를 등록할 때는 setAttribute() 메서드를 사용하고 등록된 객체를 꺼낼 때는 getAttribute() 메서드를 사용함
실습
login.html
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<form method="post" action="./onePage.jsp">
id <input type="text" name="id"/>
<input type="submit"/>
</form>
</body>
</html>
submit 버튼 클릭시 호출되는 onePage.jsp 파일 생성
onePage.jsp
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<h1>내장 객체 테스트..</h1>
<%
String id = request.getParameter("id");
request.setAttribute("id", id);
session.setAttribute("id", id);
application.setAttribute("id", id);
%>
<%= id %> 로 로그인 하였습니다.<br/>
<a href="./twoPage.jsp">이동</a>
</body>
</html>
내장 객체 request, session, application 이 다른 페이지로 넘어가도 유지가 되는지 확인하기 위해 각각 id를 담고
twoPage로 이동하기 위해 twoPage.jsp 파일 생성
URL 링크 앞에 . 을 붙여줘야 동일 폴더에 있는 twoPage가 된다.
twoPage.jsp
<h1>두번째 페이지</h1>
<%
String requestId = (String)request.getAttribute("id");
String sessionId = (String)session.getAttribute("id");
String applicationId = (String)application.getAttribute("id");
%>
request : <%= requestId %><br/>
session : <%= sessionId %><br/>
application : <%= applicationId %>
1. html 실행
2. id 입력 - 제출
request 객체를 통해 데이터 전송 정상 작동
각각의 객체의 데이터가 '이동'이라는 링크에 의해 twoPage에서도 유지 가능한지 테스트
3. 이동 url 클릭
request는 유지 안되고, session 객체, application 객체는 유지됨
동일 클라이언트에서만 데이터 유지 가능
Request는 2번 요청되다보니, 다른 객체에서 유지 불가능(OnePage를 요청했을 때 request ≠TwoPage를 요청했을 때 request)
4. 유저가 바뀌었다는 가정(브라우저 종료)에서 재실행 시 twoPage.jsp에 데이터가 유지되는지 테스트
url 복사 -> 크롬 끄기 -> 다시 켜서 url 붙여넣기
브라우저 재실행 시 Session 객체에 데이터 유지가 안됨
애플리케이션 데이터는 유지됨
컨테이너에 의해서 애플리케이션이 종료되는게 아니면 항상 살아있는 객체임
'온라인 강좌 > JSP & Servlet 활용' 카테고리의 다른 글
12차시 Expression Language (1) | 2023.07.01 |
---|---|
11차시 Action Tag와 JSP Beans (0) | 2023.07.01 |
9차시 JSP 프로그래밍 (0) | 2023.06.30 |
8차시 Servlet Filter와 Listener (0) | 2023.06.30 |
7차시 상태 정보 활용 (0) | 2023.06.30 |