728x90
  • 객체를 별도로 생성하지 않아도 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>
  • 서버 내에서 다른 페이지로 넘겨 로직 수행 후 클라이언트에게 응답
  • 클라이언트측에서는 해당 과정을 인지 못함 (URI 주소가 바뀌지 않음)
response.sendRedirect()
  • 응답 객체와 함께 해당 페이지에서 클라이언트로 결과 회신
  • 클라이언트가 response 객체에서 받은 URI를 재호출
  • 클라이언트측에서 해당 과정을 인지할 수 있음 (URI 주소가 바뀜)
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>
728x90

+ Recent posts