반응형
- 내장 객체(Implicit Object)란
- JSP 페이지에서 사용할 수 있도록 JSP 컨테이너에 미리 정의된 객체이다.
- JSP 페이지가 실행될 때 컨테이너가 자동으로 내장 객체의 참조변수를 생성하기 때문에, 별도의 선언/초기화 없이 즉시 사용할 수 있다.
- 내장 객체 참조변수 생성은 JSP -> Servlet으로의 변환 과정에서 생기는 _jspService() 메서드에서 이루어진다.
- 내장 객체는 JSP 내의 <% 스크립틀릿 %>, <%=표현식%>에서만 사용할 수 있으며,
<%! 선언부 %>에서는 매개변수로 전달받아야만 사용 가능하다.
- 내장 객체의 종류 | (타입) 객체명
- (HttpServletRequest) request: 클라이언트의 요청 정보 저장
- (HttpServletResponse) response: 클라이언트 요청에 대한 응답 정보 저장
- (JspWriter) out: JSP 페이지에 출력할 내용을 담는 출력 스트림
- (HttpSession) session: 웹 브라우저 정보를 유지하기 위한 세션 정보 저장
- (ServletContext) application: 웹 애플리케이션 관련 컨텍스트 정보 저장
- (PageContext) pageContext: JSP 페이지에 대한 정보 저장
- (Object) page: JSP 페이지를 구현한 자바 클래스의 인스턴스
- (ServletConfig) config: JSP 페이지에 대한 설정 정보 저장
- (Throwable) exception: 예외가 발생한 경우 사용
이번 게시물에서 자세히 알아볼 객체는 총 다섯 개로, request, response, out, application, exception 이다.
1. request 객체
- 클라이언트(주로 웹 브라우저)가 전송한 요청 정보를 담고 있는 객체이다.
- 주요 기능은 다음과 같다.
- 클라이언트/서버에 대한 정보 읽기
request.getRequestURI() - 요청 URI,
getServerName() - 서버명,
getServerPort() - 서버 포트,
getRemoteAddr() - 클라이언트 IP 주소 - 클라이언트가 전송한 요청 매개변수 정보 읽기
getQueryString() - 쿼리 스트링 ex) eng=Hello&kor=안녕,
getParameter("파라미터명") - 전송되는 값이 하나인 경우,
getParameterValues("파라미터명") - 값이 두 개 이상인 경우 - 요청 헤더 및 쿠키 정보 읽기
getHeader("헤더명")
헤더명 ex) host, connection, user-agent, referer, cookie 등
- 클라이언트/서버에 대한 정보 읽기
2. response 객체
- 요청에 대한 응답을 웹 브라우저로 보내주는 역할을 한다.
- 주요 기능은 다음과 같다. (이 외에도 몇 가지가 더 있으나 JSP에서는 거의 사용하지 않는다.)
- 페이지 이동을 위한 Redirect
- (HttpServletResponse) response.sendRedirect(" ")
- (RequestDispatcher) dispatcher.forward(request, response) - HTTP Header에 응답 헤더 추가
- addHeader: 새로운 헤더 추가, 동일한 헤더명이 있으면 동일한 이름으로 또 추가
getHeader()로 가져오면 값이 여러 개더라도 첫번째 값만 가져옴
ex) Header에 a: 100, a: 200 두 개가 들어있어도 getHeader("a") 하면 100만 나옴!
- setHeader: 기존의 헤더값 수정, 동일한 헤더명이 없으면 새로 추가
- 페이지 이동을 위한 Redirect
3. out 객체
- 웹 브라우저에 변수 등의 값을 출력할 때 주로 사용한다.
- JSP에서는 표현식 <%= %>을 더 많이 사용한다.
- 스크립틀릿 내에서 변수를 출력해야 할 때 사용하는 편이 좋다.
- 출력되는 모든 정보는 버퍼에 먼저 저장된 후 출력된다.
<%
out.print("<h3>버퍼 내용 삭제하기</h3> : 출력 X");
out.print("출력되지 않는 텍스트: 출력 X"); // 버퍼에 저장
out.clearBuffer(); // 버퍼를 비움(이 위에 출력 결과 다 사라짐)
out.print("<h3>==============================================================</h3>");
out.print("<h2>[out 내장 객체 예제]: 맨 위 두 줄은 flush 전 버퍼를 비워서 출력되지 않았다.)</h2>");
out.print("<h3>버퍼 크기 정보 확인</h3>");
out.print("출력 버퍼의 크기 : " + out.getBufferSize() + "<br>");
out.print("남은 버퍼의 크기 : " + out.getRemaining() + ": 버퍼가 차서 남은 크기가 줄었다.<br>");
out.print("<h3>flush ==========================================================</h3>");
out.flush();
out.print("flush 후 버퍼의 크기 : " + out.getRemaining() + ": flush하니 남은 크기가 다시 늘어났다.<br>");
out.print("<h3>==============================================================</h3>");
out.print("<h3>다양한 타입의 값 출력</h3>");
out.println(1);
out.println("(ln을 써도 줄바꿈은 안 되고 띄어쓰기 정도로만 ->)");
out.print(false);
out.print('가');
%>
4. application 객체
- 웹 애플리케이션 당 하나만 생성된다.
- 웹 애플리케이션 전반에서 이용하는 정보를 저장하거나, 서버의 정보, 서버의 물리적 경로 등을 얻어오는 데 사용한다.
- web.xml에 설정한 컨텍스트 초기화 매개변수를 읽어온다. →
ex)
web.xml
<context-param>
<param-name>INIT_PARAM</param-name>
<param-value>web.xml에 저장한 초기화 매개변수</param-value>
</context-param>
example.jsp
<h2>web.xml에 설정한 내용 읽어오기</h2>
초기화 매개변수 : <%= application.getInitParameter("INIT_PARAM") %>
- 폴더의 물리적 경로를 알아낸다. ↓
ex)
example.jsp
<h2>서버의 물리적 경로 얻어오기</h2>
application 내장 객체 : <%= application.getRealPath("/implicitObject/application") %>
5. exception 객체
- 예외 처리를 위해 사용한다.
ex)
<?xml version="1.0" encoding="UTF-8"?>
<web-app ...>
...
<!-- 에러 페이지 처리하기 -->
<error-page>
<error-code>404</error-code>
<location>/implicitObject/exception/exception.jsp</location>
</error-page>
<error-page>
<error-code>405</error-code>
<location>/implicitObject/exception/exception.jsp</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/implicitObject/exception/exception.jsp</location>
</error-page>
...
</web-app>
<%@ page ...%>
<html>
<head>
<title>내장 객체 - exception</title>
</head>
<body>
<%
int status = response.getStatus();
if (status == 404) {
out.print("404 에러가 발생하였습니다.");
out.print("<br/>파일 경로를 확인해주세요.");
} else if (status == 405) {
out.print("405 에러가 발생하였습니다.");
out.print("<br/>요청 방식을 확인해주세요.");
} else if (status == 500) {
out.print("500 에러가 발생하였습니다.");
out.print("<br/>소스 코드에 오류가 없는지 확인해주세요.");
}
%>
</body>
</html>
[Must Have 성낙현의 JSP 자바 웹 프로그래밍] 을 보고 정리한 내용입니다.
반응형
'독서기록 > JAVA' 카테고리의 다른 글
JSP 내장 객체 영역(Scope)/page/request/session/application (0) | 2023.04.08 |
---|---|
JSP(Buffer/autoFlush 속성) (0) | 2023.04.04 |
댓글