내장 객체(implicit object)
JSP 페이지에서 사용할 수 있도록 JSP컨테이너에 미리 정의된 객체로 JSP 페이지가 서블릿 프로그램으로 번역될 때 JSP 컨테이너가 자동으로 내장 객체를 멤버 변수, 메소드 매개변수 등의 각종 참조 변수(객체)로 포함함.
JSP 페이지에 별도의 import문 없이 자유롭게 사용할 수 있으며, 스크립틀릿 태그나 표현문 태그에 선언을 하거나 객체를 생성하지 않고도 직접 호출하여 사용할 수 있음.
내장 객체의 종류
| 내장 객체 | 반환 유형 | 설명 |
| request | javax.servlet.http.HttpServletRequest | 웹 브라우저의 HTTP 요청 정보를 저장 |
| response | javax.servlet.http.HttpServletResponse | 웹 브라우저의 HTTP 요청에 대한 응답 정보를 저장 |
| out | javax.servlet.jsp.jsp.jspWriter | JSP 페이지에 출력할 내용을 담고 있는 출력 스트림. |
| session | javax.servlet.http.HttpSession | 웹 브라우저의 정보를 유지하기 위한 세션 정보를 저장 |
| application | javax.servlet.ServletContext | 웹 애플리케이션의 콘텐츠 정보를 저장 |
| pageContext | javax.servlet.PageContext | JSP 페이지의 정보를 저장 |
| page | java.lang.Object | JSP 페이지를 구현한 자바 클래스로 JSP 페이지 자체를 나타냄 |
| config | javax.servlet.ServletConfig | JSP 페이지의 설정 정보를 저장 |
| exception | java.lang.Throwable | JSP 페이지의 예외 발생을 처리 |
내장 객체는 서블릿 프로그램에서 모두 _jspService( )메소드 내부에 있으며, 메소드 매개변수인 request, response를 비롯해 pageContext, session, application, config, out, page등은 메소드 내에서 참조할 수 있는 참조변수.
모든 내장 객체는 JSP 컨테이너가 관리하는 객체로, 이 중에서 request, session, application, pageContext를 이용하여 속성을 관리할 수 있음.
속성은 각각의 내장 객체가 존재하는 동안 JSP 페이지 사이에서 정보를 주고받거나 공유하는데 사용됨.
속성 처리 메소드의 종류
| 메소드 | 반환 유형 | 설명 |
| setAttribute(String name, Object value) | void | 해당 내장 객체의 속성 이름이 name인 속성값을 value로 저장 |
| getAttribute(String name) | object | 해당 내장 객체의 속성 이름이 name인 속성값을 가져옴 |
| removeAttribute(String name) | void | 해당 내장 객체의 속성 이름이 name인 속성을 삭제 |
| getAttributeNames( ) | java.util.Enumeration | 해당 내장 객체의 모든 속성 이름을 가져옴. (단, pageContext 내장 객체는 이 메소드를 제공하지 않음.) |
속성을 공유할 수 있는 유효 범위
내장 객체가 존재하는 동안 사용할 수 있는 속성의 영역(scope)
| 영역 | 내장 객체 | 속성의 유효 범위 |
| page | pageContext | 해당 페이지가 클라이언트에게 서비스를 제공하는 동안 유효하다. |
| request | request | 클라이언트의 요청이 처리되는 동안 유효하다. |
| session | session | 세션이 유지되는 동안 유효하다. |
| application | application | 웹 애프리케이션이 실행되고 있는 동안 유효하다.(서버를 죽여야함) |
request 내장 객체
JSP 페이지에서 가장 많이 사용되는 기본 내장 객체로, 웹 브라우저에서 서버의 jsp페이지로 전달하는 정보를 저장. 즉, 폼 페이지로부터 입력된 데이터를 전달하는 요청 파라미터 값을 JSP페이지로 가녀옴.
JSP 컨테이너는 웹 브라우저에서 서버로 전달되는 정보를 처리하기 위해 jakarta.servlet.http.HttpservletRequest 객체 타입의 request 내장 객체를 사용하여 사용자의 요구 사항을 언더냄.
요청 파라미터 관련 메소드
요청 파라미터는 사용자가 폼 페이지에 데이터를 입력한 후 서버에 전송할 때 전달되는 폼 페이지의 입력된 정보 형태이며, 이러한 요청 파라미터는 <name=value> 형식으로 웹 브라우저에서 서버의 JSP 페이지로 전송됨.
요청 파라미터는 폼 페이지에서 <input type=”text”…>처럼 입력 양식이 텍스트 유형일 때 값을 입력하지 않으면 서버로 빈 문자열이 전송.
getParameter는 체크박스와 라디오 버튼 유형일 땐 어떤 것도 선택하지 않고 전송하면 요청 파라미터 자체가 전달되지 않음. 그래서 getParameterValues(String name)을 사용해야 여러개의 값이 배열로 저장됨. String[ ] hobby = request.getParameterValues(”hobby”); -이런식으로 저장해야함.
이렇게 값이 여러개이면 getParameterValues 사용.(for문)
요청 파라미터 관련련 메 메소드 종류
| 요청 파라미터 관련 메소드 | 반환유형 | 설명 |
| getParameter (String name) | String | 요청 파라미터 이름이 name인 값을 전달 받으며, 요청 파라미터 값이 없으면 null을 반환 |
| getParameterValues(String name) | Sting[ ] | 모든 요청 파라미터 이름이 name인 값을 배열 형태로 전달받으며, 요청 파라미터 값이 없으면 null을 반환 |
| getParamterNames( ) | java.util.Enumeration | 모든 요청 파라미터의 이름과 값을 Enumeration 객체 타입으로 전달 받는다. |
| getParameterMap ( ) | java.util.Map | 모든 요청 파라미터의 이름과 값을 Map 객체 타입으로 전달 받는다 [Map 객체 타입은 (요청 파라미터 이름, 값) 형식으로 구성됨.] |
요청 HTTP 헤더 관련 메소드
웹 브라우저는 HTTP 헤더에 부가적인 정보를 담아 서버로 전송하는데 request 내장 객체는 헤더 정보나 쿠키 관련 정보를 얻을 수 있는 메소드를 제공.
요청 HTTP 헤더 관련 메소드의 종류
| 요청 HTTP 헤더 관련 메소드 | 반환 유형 | 설명 |
| getHeader(String name) | String | 설정한 name의 헤더 값을 가져온다. |
| getHeaders(String name) | Enumeration | 설정한 name의 헤더 목록 값을 가져온다. |
| getHeaderNames( ) | Enumeration | 모든 헤더 이름을 가져온다. |
| getIntHeader(String name) | int | 설정한 name의 헤더 값을 정수로 가져온다. |
| getDateHeader(String name) | long | 설정한 name의 헤더 값을 시간 값으로 가져온다. |
| getCookies( ) | java.servlet.http.Cookie | 모든 쿠키 값을 가져온다. |
웹 브라우저/서버 관련 메소드
request 내장 객체는 웹 브라우저의 요청 및 서버 관련 정보를 얻을 수 있는 메소드를 제공.
웹 브라우저/서버 관련 메소드의 종류
| 웹 브라우저/서버 관련 메소드 | 반환 유형 | 설명 |
| getRemoteAddr( ) | String | 웹 브라우저의 IP 주소를 가져옴. |
| getContentLength( ) | long | 웹 브라우저의 요청 파라미터 길이를 가져옴 |
| getCharacterEncoding( ) | String | 웹 브라우저의 문자 인코딩을 가져옴 |
| getContentType( ) | String | 웹 브라우저의 콘텐츠 유형을 가져옴 |
| getProtocol( ) | String | 웹 브라우저의 요청 프로토콜을 가져옴 |
| getMethod( ) | String | 웹 브라우저의 HTTP 요청 메소드(GET,POST)를 가져옴 |
| getRequestURI( ) | String | 웹 브라우저가 요청한 URI 경로를 가져옴 |
| getContextPath( ) | String | 현재 JSP 페이지의 웹 애츨리케이션 콘텍스트 경로를 가져옴 |
| getServerName( ) | String | 서버 이름을 가져옴 |
| getServerPort( ) | int | 실행중인 서버 포트 번호를 가져옴 |
| getQueryString( ) | String | 웹 브라우저의 전체 요청 파라미터 문자열[물음표(?) 다음 URL에 할당된 문자열]을 가져옴. |
<%@ page contentType="text/html; charset=UTF-8" %>
<html>
<head>
<title>Implicit Objects</title>
</head>
<body>
<p>클라이언트 IP : <%=request.getRemoteAddr() %></p>
<p>요청 정보 길이: <%=request.getContentLength() %></p>
<p>요청 정보 인코딩 : <%=request.getCharacterEncoding() %></p>
<p>요청 정보 콘텐츠 유형 : <%=request.getContentType() %></p>
<p> 요청 정보 프로토콜 : <%=request.getProtocol()%></p>
<p> 요청 정보 전송 방식 : <%=request.getMethod() %></p>
<p> 요청 URI: <%=request.getRequestURI() %>
<p> 콘텍스트 경로 : <%=request.getContextPath() %></p>
<p> 서버이름 : <%=request.getServerName() %></p>
<p> 서버포트: <%=request.getServerPort() %></p>
<p>쿼리문 : <%=request.getQueryString() %>
</body>
</html>

- 프로토콜 (Protocol): 대화를 나누는 '방식과 순서' (예: 만나면 '안녕하세요'라고 인사하기)
프로토콜은 **컴퓨터끼리 서로 통신하기 위해 정해놓은 '규칙과 약속'**입니다.
웹 브라우저(클라이언트)와 웹 서버(JSP가 실행되는 곳)가 서로 "말을 알아듣기 위해" 이 규칙을 따릅니다.
핵심: 어떤 순서로 정보를 요청하고, 어떤 형식으로 응답할지 정한 약속입니다
request.getProtocol(): 브라우저가 어떤 프로토콜(예: "HTTP/1.1")로 요청했는지 알려줍니다.
request.getMethod(): 어떤 방식(예: "GET", "POST")으로 요청했는지 알려줍니다.
- 인코딩 (Encoding): 대화에 사용하는 '언어' (예: 한국어, 영어)
인코딩 (Encoding): '문자 번역기’
인코딩은 **사람이 쓰는 문자(가, 나, A, B)를 컴퓨터가 이해하는 숫자(0과 1)로 바꾸는 '규칙'**입니다.
컴퓨터는 '가'라는 글자를 모르고, 오직 0과 1로 된 바이트(byte)만 저장할 수 있습니다. 인코딩은 이 변환 규칙을 정한 '코드북'이나 '번역 사전'과 같습니다.
전 세계 거의 모든 문자를 표현할 수 있는 표준 방식입니다. 특별한 이유가 없다면 무조건 UTF-8을 사용해야 합니다.
request.setCharacterEncoding("UTF-8"): 브라우저가 보낸 한글 데이터(예: 폼 전송)가 깨지지 않도록 "UTF-8 사전으로 해독해 줘"라고 서버에게 알려줍니다. (주로 POST 방식일 때)
response.setContentType("text/html; charset=UTF-8"): 서버가 브라우저에게 보낼 HTML이 "UTF-8 사전으로 만들어졌으니 이걸로 봐"라고 알려줍니다.

'Java' 카테고리의 다른 글
| [Java] 예외 처리 (1) | 2025.11.15 |
|---|---|
| [Java] 예외 클래스 (0) | 2025.11.15 |
| [Java] 익명 객체 (0) | 2025.11.15 |
| [Java] 중첩 클래스와 중첩 인터페이스 (0) | 2025.11.15 |
| [Java] 타입 변환과 다형성 (0) | 2025.11.14 |