- 객체를 별도로 생성하지 않아도 JSP에서 바로 사용할 수 있는 객체
- 컨테이너가 JSP를 서블릿으로 변환할 때 자동으로 객체가 생성
★ 4개 영역의 저장소 유효범위
pageContext : 1개 jsp 페이지 시작 ~ 끝 > EL ${}
request : 1+ jsp 페이지 > 요청 시작 ~ 응답까지 / 다른 jsp로 전달 가능
session : n 개 jsp 페이지 > 클라이언트 마다 1개 , 세션의 시작부터 종료까지
application : context 전체 , 모든 클라이언트가 공유
★ 속성관련 메서드
void setAttribute( String name , Object value ) 속성이름 = 값 저장
Object getAttribute( String name ) 지정된 이름으로 저장된 속성값 가져오기
void removeAttribute( String name ) 지정된 이름의 속성 삭제
Enumeration getAttributeNames() 객체에 저장된 모든 속성의 이름 반환
데이터 저장영역 관련 객체 | |
pageContext | JSP의 page 기본 객체로 servletContext, session, request, response 등 여러 객체를 참조 |
pageScope | pageContext 기본 객체 |
requestScope | request 기본 객체 |
sessionScope | session 기본 객체 |
applicationScope | application 기본 객체 |
헤더 관련 객체 | ||
header | 헤더 값을 가져올때 사용 | request.getHeader(name) |
headerValues | 헤더 값을 배열로 가져올때 사용 | request.getHeader(name) |
쿠키 관련 객체 | ||
cookies | 쿠키 정보를 가져올때 사용 | request.getCookies() |
Context 라는 단어는 프로젝트와 동일 개념 이며 서로 다른 프로젝트는 객체나 정보를 공유할 수 없습니다
<Context docBase="eeweb" path="/eeweb" reloadable="true" source="org.eclipse.aa.bb.server:aaa"/>
1. 기본 ( page , pageContext )
- page ( java.lang.Object )
JSP 페이지 그 자체를 가리키는 객체
- pageContext ( javax.servlet.ServletConfig )
다른 페이지를 include하고 있는 상황이라면 유용하게 사용할 수 있습니다.
아래와 같이 먼저 데이터를 담아두고 include를 하면 해당 페이지에서 EL 태그로 데이터를 가져다 사용할 수 있습니다.
<% pageContext.setAttribute("userName", "사원명"); %>
<%@ include file="/WEB-INF/views/login/user.jsp"%>
<span class="red-line-page">${userName}</span>
2. 사용자 요청별로 생성됐다 처리되면 사라지는 객체 ( request , response , out )
- request (javax.servlet.http.HttpServletRequest)
request 주요 메소드 | 설명 |
String getParameter(String name) | name(변수이름, 파라미터)의 값을 가져옴 |
String[] getParameterValues(String name) | name의 값이 1개 이상일 때 값을 모두 가져옴 |
Enumeration<String> getParameterNames() | 모든 파라미터 name을 반환 (값이 아닌 변수 이름) |
Map<String, String[]> getParameterMap() | 모든 파라미터 name과 value를 Map으로 반환 |
request 주요 메소드 | 설명 |
String setAttribute(String name, Object o) | request 객체에 'name' 이름의 Object 객체를 첨부함 |
Object getAttribute(String name) | request 객체에 첨부된 'name' 이름의 값을 가져옴 |
Enumeration<String> getAttributeNames() | request 객체에 첨부된 모든 'name' 이름을 가져옴 |
void removeAttribute(String name) | request 객체에 첨부된 'name' 이름의 객체를 제거함 |
request 주요 메소드 | 설명 |
String getRequestURL() | 요청한 URL 전체의 값을 가져옴 |
String getRequestURI() | 서비스 포트 뒤의 주소를 가져옴 |
String getProtocol() | 사용 중인 프로토콜 정보를 가져옴 |
String getQueryString() | 쿼리 스트링 값을 가져옴 |
String getMethod() | 요청 방식(GET, POST 등)을 리턴 |
String getRemoteAddr() | 요청 클라이언트의 IP주소 리턴 |
- response (javax.servlet.http.HttpServletResponse)
response 주요 메소드 | 설명 |
void setHeader(String name, String value) | 'name' 헤더값의 value를 지정(문자형) |
void setIntHeader(String name, int value) | 'name' 헤더값의 value를 지정(정수형) |
void setDateHeader(String name, long date) | 'name' 헤더값의 value를 지정(날짜형) |
addHeader(String name, String value) | 'name' 헤더에 value값을 추가(문자형) |
addIntHeader(String name, int value) | 'name' 헤더에 value값을 추가(정수형) |
addDateHeader(String name, long date) | 'name' 헤더에 value값을 추가(날짜형) |
response 주요 메소드 | 설명 |
void sendRedirect(String location) | 클라이언트가 요청한 페이지에서 추가적인 파라미터와 함께다른 페이지로 전환시키는 것을 리다이렉트라고 합니다.지정된 URI를 클라이언트측에서 재호출 하도록 함 response.sendRedirect("join.do?id=codevang&pw=12345"); System.out.println(request.getParameter("id")); System.out.println(request.getParameter("pw")); __________________________________________________________ <jsp:forward>
|
response 주요 메소드 | 설명 |
void addCookie(Cookie cookie) | 클라이언트 브라우저에 쿠키 정보를 삽입함 |
- out (javax.servlet.jsp.jspWriter)
브라우저에서 서버로 요청을 하고 서버에서 브라우저로 회신해주고 나면 이 객체들은 모두 사라집니다.
Request, Response 객체는 하나의 요청을 처리하는 스레드에서 모든 JSP와 서블릿이 공유합니다.( out 제외 )
out은 서블릿에 공유되지 않기 때문에 PrintWriter의 출력 스트림을 따로 생성해줘야 합니다.
PrintWriter out = response.getWriter();
out.println("");
- out 사용 범위 : 요청을 처리하기 위한 하나의 스레드
- 출력되는 내용들은 모두 버퍼에 담았다가 한번에 보내게 됩니다.
- 클라이언트 요청 시 생성 , 요청에 대한 처리 완료 시 소멸
out 주요 메소드 | 설명 |
void println() | 클라이언트에게 출력 (HTML 소스에 개행문자 적용) |
void print() | 클라이언트에게 출력 (개행문자 없음) |
int getBufferSize() | 출력 버퍼의 전체 크기를 리턴 |
int getRemaining() | 출력 버퍼에서 현재 남아있는 크기를 리턴 |
void flush() | 버퍼에 있는 내용을 모두 전송하고 비움 |
void clearBuffer() | 버퍼에 쌓인 내용을 모두 삭제 (전송하지 않음) |
void close() | 출력 버퍼에 저장된 내용을 모두 전송하고 스트림을 닫음 |
3. 사용자(브라우저) 별로 유지 ( session )
- session (javax.servlet.http.HttpSession)
HTTP 프로토콜은 클라이언트가 서버에 요청을 할 때 세션이 맺어지고
서버에서 클라이언트로 응답을 보낸 이후 세션이 끊깁니다.
따라서 서버측에서 클라이언트에 대한 접속 정보를 가지고 있고, 로그인을 유지할 수 있게 해주는 객체가 세션 입니다.
쿠키는 서버가 보내준 특정한 정보를 클라이언트(브라우저) 측에서 가지고 있는 방식입니다
https://hahagogo.tistory.com/46
쿠키와 세션
쿠키 : 이름과 값의 쌍으로 구성된 작은 정보 한글은 url 인코딩 필요 서버에서 생성후 전송, 브라우저에 저장하고 유효기간 이후 자동삭제 서버에 요청시 domain, path가 일치하는 경우에만 자동전
hahagogo.tistory.com
session 주요 메소드 | 설명 |
void setAttribute(String name, Object value) | 파라미터 이름에 따른 객체를 추가 |
Object getAttribute(String name) | 파라미터 이름에 따른 객체를 반환 |
void removeAttribute(String name) | 파라미터 이름에 따른 객체를 삭제 |
void invalidate() | 세션의 모든 삭제를 삭제 (세션 무효화) |
Enumeration<String> getAttributeNames() | 등록된 모든 파라미터 이름을 반환 |
String getID() | 해당 세션(브라우저)의 고유 식별자 정보 반환 |
Boolean isNew() | 세션 객체가 최초로 생성되었는지 여부 반환 |
void setMaxInactiveInterval(int interval) | 세션이 유지되는 유효시간을 설정 |
int getMaxInactiveInterval() | 세션에 설정된 유효시간을 반환 |
HttpSession session = request.getSession();
4. JSP/서블릿마다 하나씩 생성 ( Config ) - javax.servlet.ServletConfig
Tomcat > web.xml 파일에서 특정 JSP/서블릿에 초기화 파라미터를 매핑시켜둔 값을 가지고 있는 객체
JSP/서블릿이 메모리에 로드되는 시점에 실제 생성
생명주기도 컨테이너의 생명주기와 같다
config 주요 메소드 | 설명 |
String getInitParameter(String name) | param-name의 param-value 값을 가져옴 |
Enumberation<String> getInitParameterNames() | 모든 param-name 값을 가져옴 |
String getServletName() | web.xml에서 명시한 <servlet-name>의 이름을 가져옴 |
ServletContext getServletContext() |
ServletContext 객체를 반환 (application 객체와 동일) |
<servlet>
<servlet-name>configEX</servlet-name>
<jsp-file>/test.jsp</jsp-file>
<init-param>
<param-name>defaultData1</param-name>
<param-value>default1</param-value>
</init-param>
<init-param>
<param-name>defaultData2</param-name>
<param-value>default2</param-value>
</init-param>
</servlet>
_____________________
<servlet-mapping>
<servlet-name>configEX</servlet-name>
<url-pattern>/test.jsp</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>jsp</servlet-name>
<url-pattern>*.jsp</url-pattern>
<url-pattern>*.jspx</url-pattern>
</servlet-mapping>
System.out.println(config.getInitParameter("defaultData1"));
System.out.println(config.getInitParameter("defaultData2"));
System.out.println(config.getServletName());
5. 컨테이너 구동 시 생성되는 객체 - javax.servlet.ServletContext
- application (javax.servlet.ServletContext)
어플리케이션(프로젝트 단위)이 딱 하나만 가지고 있는 객체
컨테이너의 내외부 환경에 대한 정보를 가지고 있다.
config와 비슷하게 src > web.xml에서 초기화 값을 지정해줄 수 있습니다.
대신 특정 JSP나 서블릿을 매핑하지 않고 모두가 쓸 수 있는 초기화 파라미터가 됩니다.
context라는 단어는 그냥 프로젝트 단위를 말한다고 생각하면 되고,
가져오는 메소드는 config의 메소드와 거의 동일합니다.
application 주요 메소드 | 설명 |
void setAttribute(String name, Object o) | application 객체에 추가 객체를 저장 |
Object getAttribute(String name) | application 객체에 추가된 객체를 가져옴 |
void removeAttribute(String name) | application 객체에 특정 Attribute를 지움 |
String getServerInfo() | 컨테이너 이름과 버전을 리턴 |
void log(String msg) | 제공된 문자열을 서블릿 로그 파일에 기록 |
<context-param>
<param-name>location</param-name>
<param-value>/folder/new/</param-value>
</context-param>
<context-param>
<param-name>dataName</param-name>
<param-value>apple.jpg</param-value>
</context-param>
<%
System.out.println(application.getInitParameter("location"));
System.out.println(application.getInitParameter("dataName"));
Enumeration<String> paramName = application.getInitParameterNames();
// Attribute 추가 및 가져오기
application.setAttribute("addAttribute", "Attribute");
System.out.println(application.getAttribute("addAttribute"));
// Attribute와 Initparameter는 다름
System.out.println(application.getInitParameter("addAttribute"));
while(paramName.hasMoreElements()){
System.out.print(paramName.nextElement() + " ");
}
%>
6. exception - java.lang.Throwable
JSP 페이지에서 예외가 발생했을 때 처리해줄 수 있는 객체입니다
https://hahagogo.tistory.com/47
예외처리
GlobalCatcher.java package com.web.ch3; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.Exceptio..
hahagogo.tistory.com
예외 발생시 넘겨줄 페이지를 지시자로 지정
<%@ page errorPage = "exceptionEX.jsp" %>
예외를 처리하는 페이지
- 서버에서 예외를 처리하기 위한 페이지 자체를 예외가 발생된 페이지로
잘 못 인식하는 경우가 있어서 셋팅
<%@ page isErrorPage = "true" %>
<% response.setStatus(200); %>
src > web.xml에서 예외 페이지 지정
<error-page>
<error-code>500</error-code>
<location>/exception500.jsp</location>
</error-page>
<error-page>
<error-code>404</error-code>
<location>/exception404.jsp</location>
</error-page>
exception 주요 메소드 | 설명 |
String getMessage() | 발생한 예외의 메세지 리턴 |
String toString() | 발생한 예외 클래스 및 예외 메세지 리턴 |
void printStackTrace() | 발생한 예외 역추적을 위한 예외 스트림 출력 (서버에 출력) |
void printStackTrace(PrintWriter s) | 발생한 예외 역추적을 위한 예외 스트림 출력 (클라이언트에게 출력) |
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page errorPage = "exception.jsp" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<% 예외 발생!!! > exception.jsp %>
</body>
</html>
<%@page import="java.io.PrintWriter"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page isErrorPage="true"%>
<%response.setStatus(200);%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%! String exceptionMsg;
String str;
%>
<%
exceptionMsg = exception.getMessage();
str = exception.toString();
%>
예외가 발생!! <br/>
예외 내용 : <%=exceptionMsg%> <br/>
예외 클래스 및 내용 : <%= str %>
</body>
</html>