자바 웹 내장 객체

Dear·2025년 6월 11일

TIL

목록 보기
39/74

💙 JSP 내장 객체

JSP 페이지에서 프로그래머가 객체를 생성하는 과정 없이 바로 사용 할 수 있는 객체

JSP가 서블릿 파일로 변환될 때 JSP(서블릿) 컨테이너가 객체를 자동으로 생성해 주기 때문이다.

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP</title>
</head>
<body>
<%
	// JSP 문서의 스크립트릿 내부에서 out 객체를 선언 없이 사용
    out.print("Hello JSP");
%>
</body>
</html>

서블릿에서 out 객체 사용하려면 response 객체의 getWriter()를 호출하여 얻어온 후에 사용했다.

PrintWriter out = response.getWriter();

서블릿과 달리 JSP에서는 out 객체가 JSP 내장 객체라 선언하지 않고 바로 사용한다.
에러 페이지로 지정되면 exception 객체가 내장객체로 제공된다.
JSP 페이지에는 총 9개의 내장 객체가 4종류로 분류된다.

내장 객체의 분류내장 객체hello_jsp.java 파일 선언 위치
입출력 관련 객체requestHttpServletRequest로 선언됨
responseHttpServletResponse로 선언됨
outJspWriter로 선언됨
-----------------------------------------------------------------
서블릿 관련 객체pageObject로 선언됨
configServletConfig로 선언됨
---------------------------------------------------------------------------
외부 환경 정보 제공 객체sessionHttpSession으로 선언됨
applicationServletContext로 선언됨
pageContextPageContext로 선언됨
------------------------------------------------------------------
예외 관련 객체exceptionJSP 페이지가 에러 페이지로 지정되면 만들어짐
hello_jsp.java 파일에서는 발견되지 않음

out 내장 객체

서버에서 클라이언트로 열려있는 출력 스트림
-> 가장 효율적

request 내장 객체

클라이언트와 웹 서버 사이의 요청과 관련된 정보는 request 객체에 저장되어 관리한다.

브라우저의 요청이 있을 때 관련된 정보들을 알려주는 메소드

<body>
컨텍스트 패스 : <%= request.getContextPath() %> <br>
요청방식 : <%= request.getMethod() %> <br>
요청한 URL : <%= request.getRequestURL() %> <br>
요청한 URI : <%= request.getRequestURI() %> <br>
서버의 이름 : <%= request.getServerName() %> <br>
프로토콜 : <%= request.getProtocol() %> <br>
</body>

request 객체의 요청 파라미터 관련 메소드

메소드설명
getParameter(String name)지정한 이름의 파라미터를 구한다. 지정한 이름의 파라미터가 여러 개 있을 경우에는 첫 번째 파라미터의 값을 구한다.
getParameterNames()모든 파라미터의 이름을 구한다.
getParameterValues(String name)지정한 이름의 파라미터가 여러 개 있을 경우 사용하며, 지정한 이름을 가진 파라미터의 모든 값을 String[]으로 구한다.

requset 객체로 넘겨진 값을 파라미터라고 한다.
입력 양식의 name 속성 값을 넘겨준다.

response 내장 객체

클라이언트에 대한 응답 처리하는 내장객체

JSP는 response 객체의 기능 중 리다이렉트 기능을 많이 사용한다.
리다이렉트는 response 객체의 rendRedirect() 메소드를 사용하여 웹 서버가 브라우저에게 지정한 페이지로 이동하도록 지시한다.
response.sendRedirect("http://www.website.com");

💙 JSP에서 다른 페이지 이동하기

1. 리다이렉트 방식

response 객체의 sendRedirect()로 페이지를 이동하는 방법

  • 브라우저의 URL을 변경하도록 하여 페이지를 이동하는 방식으로 request와 response 객체가 유지되지 않는다.
  • sendRedirect() 메소드로 페이지를 이동하면서 데이터를 전송하기 위해 파라미터 값을 이동할 페이지 뒤에 커리 스트링 형태로 덧붙여 준다.
    resonse.sendRedirect("nextPage.jsp?age="+20);
  • sendRedirect() 메소드로 한글 전송시 URLEncoder.encode() 메소드로 인코딩 과정이 필요하다.
    response.sendRedirect("nextPage.jsp?name=" + URLEncoder.encode("신짱구", "UTF-8"));

2. 포워드 방식

sendRedirect() 와 마찬가지로 다른 페이지로 이동하기 위해서 사용

RequestDispatcher dispatcher = request.getRequestDispatcher("이동할 페이지.jsp");
dispatcher.forworad(request, response);
  • forward() 메소드는 requestDispatcher 객체로 접근해야만 호출이 가능하다
    requestDispatcher 객체는 request 객체의 getRequestDispatcher() 메소드를 호출하여 얻어낸다.
  • 포워드 방식은 서버 상에서 페이지가 이동되기 때문에 브라우저는 알아채지 못하고 URL 변경도 되지 않는다.
  • 기존의 requestresponse는 유지되어 이동한다.
  • 기존의 request가 유지되어 데이터를 전송할때는 setAttribute() 메소드로 request 객체에 속성 값으로 저장해서 보낸다.
    request.setAttribute("age",20);
  • 이동한 페이지에서 속성 값을 얻어 사용하려면 getAttribute() 메소드를 사용한다.
  • forward() 메소드는 한글 전송을 위해 인코딩을 하지 않아도 된다.
    request.setAttribute("name", "신짱구");
  • 주고 받는 속성 값의 리턴 타입이 Object라서 cast 필요하다
    String name = (String)request.getAttribute("name");

💙 application 내장 객체

application 내장 객체는 하나의 웹 애플리케이션(하나의 웹 프로젝트)을 관리하고 웹 애플리케이션 안에서의 자원을 공유한다.

// 속성을 새로 생성해서 request 객체에 저장하여 사용
request.setAttribute("name", "shin");

// 하나의 프로젝트 내의 모든 JSP 페이지에서 공톡적으로 사용
application.setAttribute("name", "shin");

ServletContext 주요 메소드 정리

메소드설명
getServerInfo()컨테이너의 이름과 버전을 반환합니다.
getContextPath()웹 애플리케이션의 URL 경로 중 컨텍스트 패스명을 반환합니다.
getRealPath()JSP의 실제 경로를 반환한다.
getMimeType(filename)지정된 파일의 MIME 타입을 반환합니다.
log(message)지정된 message의 로그를 저장합니다.
<%
String appPath = application.getContextPath();
String filePath = application.getRealPath("06_application.jsp");
%>

💙 내장 객체의 영역

해당 객체가 얼마 동안이나 살아있는가를 지정해 주는 것을 영역이라고 볼 수 있다.
객체의 유효기간으로도 불린다.

영역설명
page하나의 JSP 페이지를 처리할 때 사용되는 영역
request하나의 요청을 처리할 때 사용되는 영역
session하나의 브라우저와 관련된 영역
application하나의 웹 애플리케이션과 관련된 영역

page 영역

한 번의 클라이언트 요청에 하나의 JSP 페이지를 범위로 갖는다.

  • 브라우저의 요청이 들어오면 JSP 페이지를 실행하게 되는데, 이때 실행되는 JSP 페이지의 범위가 하나의 page 영역이 된다.
  • 요청에 대해 새로운 page 영역을 갖게 되며, 그에 해당하는 pageContext 내장 객체를 할당 받는다. -> pageContext라는 객체가 하나 생겨서 메모리에 로딩된다.
  • 생성된 pageContext 객체에 정보를 저장하면 해당 페이지 내에서만 사용할 수 있다.

request 영역

브라우저가 웹 서버에 전송하는 요청이 하나의 request 영역이다.

  • 사용자가 페이지를 요청하면 요청한 페이지와 요청을 받은 페이지 사이에 request 내장 객체에 정보를 저장할 수 있다.
  • 브라우저가 결과를 받으먼 그 요청과 관련된 request 내장 객체는 삭제된다.
  • 브라우저가 요청을 할 때마다 새로운 request 내장 객체가 생성되고 매번 새로운 request 영역이 생성된다.
  • page 영역은 오직 하나의 JSP 페이지만 포함되지만, request 영역은 하나의 요청을 처리하는데 사용되는 모든 JSP 페이지를 포함한다.
  • request 객체는 이전 페이지에서 입력된 값(파라미터)를 getParameter() 메소드로 가져온다.
  • setAttribute() 메소드로 파라미터가 아닌 원하는 정보도 저장 후 다음 페이지에서 getAttribute() 메소드로 얻어올 수 있다.

session 영역

세션이란 웹 브라우저를 닫기 전까지 페이지를 이동하더라도 사용자의 정보를 잃지 않고 서버에 보관할 수 있도록 하는 객체로 모든 웹 서버에서 제공된다.

application 영역

하나의 웹 애플리케이션과 관련된 전체 영역을 포함한다.

  • 하나의 웹 애플리케이션에 속한 모든 페이지, 그 페이지에 대한 요청, 세션은 모두 하나의 application 영역에 속하게 된다.

💙 내장 객체 영역 활용

내장 객체가 해당 영역을 벗어나면 해당 속성의 값을 사용할 수 있는 유효 범위가 다르기 때문에 값을 출력할 수 없다.

속성 유지 범위

  • pageContext : 한 페이지 내
  • request: 요청 흐름 전체 (포워드 포함)
  • session : 브라우저가 열려 있는 동안

용도별 내장 객체

  • pageContext: 동일한 속성 이름이라도 페이지마다 다른 값이 필요할 때 사용
  • request: 요청 흐름 전체(포워드 포함) 동안 값을 유지해야 할 때 사용
  • session: 세션이 유지되는 동안(브라우저가 열려 있는 동안) 값을 계속 유지해야 할 때 사용

🤍 회고

오늘은 JSP에서 사용하는 내장 객체에 대해 정리해 보았다.
생각보다 종류도 많고 각각의 역할이 중요해서, 내용을 놓치지 않도록 꼼꼼하게 정리하려고 노력했다. 기본적인 사용법부터 메서드의 기능까지 하나하나 짚어보며 이해도를 높일 수 있었다.

setAttribute()와 getAttribute()의 사용처가 헷갈려서, 각각의 역할을 명확히 구분하기 위해 표로 다시 정리해보았다. 이를 통해 어떤 메서드가 어떤 기능을 수행하는지 한눈에 파악할 수 있도록 하였다.

메소드설명
setAttribute(name, value)이름(name)에 값(value)을 설정합니다.
getAttribute(name)매개 변수로 준 이름에 설정된 값을 얻어냅니다.
getAttributeNames()현재 객체에 관련된 모든 속성의 이름을 뽑아냅니다.
removeAttribute(name)매개 변수로 준 이름에 설정된 값을 제거합니다.
profile
친애하는 개발자

0개의 댓글