JSP/JSP 정리

[JSP] JSP 내장객체

h0-0cat 2023. 6. 1. 13:46
728x90

JSP 내장객체

JSP 내장 객체JSP에서 프로그래머가 객체를 생성하는 과정 없이 바로 사용할 수 있는 객체를 말합니다.

JSP에서 내장 객체를 바로 사용할 수 있는 이유는 JSP서블릿 파일로 변환될 때 JSP 컨테이너가 객체를 자동으로 생성해 주기 때문입니다.

객체를 생성하는 과정 없이 바로 사용가능하다는 의미가 무엇인지를 간단한 메시지(“Hello JSP”)를 출력하는 hello.jsp 파일을 살펴보도록 합시다.

hello.jsp스크립트릿 내부에 out이란 객체가 사용된 것을 확인할 수 있습니다.

 

<!--긁지않은 개발자-->
<%@ 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>
    <%
        out.print("Hello JSP");  
    %> 
</body>
</html>

 <%
        out.print("Hello JSP");  
%> 

JSP문서의 스크립트릿 내부에서 out 객체를 선언없이 사용함

 

 

서블릿에서 out 객체 얻기

<!--긁지않은 개발자-->

PrintWriter out=response.getWriter();

 


 

JSP 페이지가 변환된 서블릿 파일을 살펴보면 8개의 객체들이 존재함을 확인할 수 있습니다.

이외에도 에러 페이지로 지정되면 만들어지는 exception 객체가 내장 객체로 제공되는데 exception 객체까지 포함해서 JSP 페이지에는 총 9개의 내장 객체가 제공됩니다.

 

내장 객체는 _jspService() 메소드 안에서 객체화됩니다. hello.jsp 파일에서 사용한 out 객체 역시 _jspService() 메소드 안에서 객체화된 것을 46, 59(⑦)에서 확인할 수 있습니다.

 

내장 객체의 분류 내장 객체 hello_jsp.java 파일
입출력 관련 객체 ① request
② response
⑦ out
38:줄에서 HttpServletRequest로 선언됨
39:줄에서 HttpServletResponse로 선언됨
46:줄에서 JspWriter로 선언됨
서블릿 관련 객체 ⑧ page
⑥ config
47:줄에서 Object로 선언됨
45:줄에서 ServletConfig로 선언됨
외부 환경 정보를 제공하는 객체 ④ session
⑤ application
③ pageContext
43:줄에서 HttpSession으로 선언됨
44:줄에서 ServletContext로 선언됨
55:줄에서 PageContext로 선언됨
예외 관련 객체 ⑨ exception JSP페이지가 에러 페이지로 지정되면 만들어짐
hello_jsp.java 파일에서는 발견되지 않음
긁지않은개발자 (JSP의 내장 객체)


out 내장 객체

out은 서버에서 클라이언트로 열려있는 출력 스트림을 의미합니다. out 객체는 JSP의 실행결과를 클라이언트의 브라우저로 출력할 때 가장 효율적으로 사용할 수 있는 객체입니다.
컨테이너가 JSP 문서를 변환시켜 생성해 준 서블릿 파일을 살펴보면 그림 4-2의 ⑦을 보면 알 수 있듯이 out 객체가 JspWriter로 선언됨을 확인할 수 있었습니다.
<!--긁지않은 개발자-->
PrintWriter out = response.getWriter(); //PrintWriter 객체를 리턴하는 메소드
JSP에서는 출력 객체인 out이 내장되어 제공되기 때문에 서블릿보다는 편리하게 출력을 할 수 있게 되었습니다.

 

request 내장 객체

웹 서비스라 함은 웹 기반으로 클라이언트의 요청을 받아서 어떤 응답을 제공해주는 서비스를 말합니다. 이런 웹 서비스를 위한 클라이언트와 웹 서버 사이의 요청에 관련된 정보는 request 객체에 저장되어 관리됩니다. 그러므로 request 객체를 파악하면 클라이언트에서 서버로 전송되는 데이터를 알 수 있습니다. 다음은 브라우저의 요청이 있을 때 이와 관련된 정보들을 알려주는 메소드입니다.
메소드 설명
getContextPath() JSP 페이지가 속한 웹 애플리케이션의 컨텍스트 패스를 구한다.
getMethod( ) 요청방식이 GET 방식인지 POST 방식인지를 알려준다.
getRequestURL( ) 요청 URL을 구한다.
getRequestURI( ) 요청 URL에서 쿼리 스트링을 제외한 부분을 구한다.
getQueryString( ) 요청 URL 다음에 오는 쿼리 스트링을 구한다.
getSession(flag) 요청 관련된 세션 객체를 구한다.
getRequestDispacher(path) 지정 로컬 URL에 대한 RequestDispacher 객체를 구한다.
getRemoteHost( ) 요청한 호스트의 완전한 이름을 구한다.
getRemoteAddr( ) 요청한 호스트의 네트워크 주소를 구한다.
getRemoteUser( ) 요청한 사용자의 이름을 구한다.
getSession( ) 세션 객체를 구한다.
getServerName( ) 서버의 이름을 구한다.
getProtocol( ) 사용 중인 프로토콜을 알려준다.

긁지않은개발자

 

요청(request) 파라미터 관련 메소드

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

긁지않은개발자

 

 

로그인 처리를 위해서는 사용자에게 아이디를 입력받아 와야 합니다. 아이디를 서버에서 받아오기 위해서는 다음과 같이 입력 양식을 만들어야 합니다.

<!--긁지않은 개발자-->

<input type="text" name="id"><br>

response 내장 객체

 

클라이언트에 대한 응답 처리를 하는 객체인 response는 실행결과를 브라우저로 되돌려 줄 때 사용하는 내장 객체입니다.

JSP에서는 response 객체의 기능 중 리다이렉트 기능을 많이 사용하는데, 리다이렉트 response 객체의 sendRedirect() 메소드를 사용하여 웹 서버가 브라우저에게 지정한 페이지로 이동하도록 지시합니다.

 

response.sendRedirect(https://h0-0cat.tistory.com/); 이동할 페이지 지정

 

 

웹 사이트를 구축하기 위해서 웹 페이지에서 웹 페이지로 이동하도록 하는 것은 필수입니다. JSP에서 다른 페이지로 이동하기 위한 방법은 다음과 같은 두 가지가 있습니다.

 

1. 리다이렉트 방식

2. 포워드 방식

 

리다이렉트 방식

리다이렉트 방식은 response 객체의 sendRedirect()로 페이지를 이동하는 방법을 말합니다. 리다이렉트 방식은 브라우저의 URL을 변경하도록 하여 페이지를 이동하는 방식으로 requestresponse 객체가 유지되지 않습니다.

 

포워드 방식

forward() 메소드는 requestDispatcher 객체로 접근해야만 호출이 가능합니다. requestDispatcher 객체는 request 객체의 getRequestDispatcher() 메소드를 호출하여 얻어냅니다.

이렇게 얻어낸 requestDispatcher 객체로 forward() 메소드를 호출하면 getRequestDispatcher() 메소드의 매개변수로 지정한 페이지로 이동됩니다.


 

 

application 내장 객체

application 내장 객체는 하나의 웹 애플리케이션을 관리하고 웹 애플리케이션 안에서의 자원을 공유합니다. 하나의 웹 애플리케이션이란 하나의 웹 프로젝트를 의미합니다. 지금까지 여러분들이 web-study-04 이런 식으로 만든 프로젝트를 의미합니다. 이번 페이지에서 사용한 정보(자원)을 다음 페이지에서까지 사용하도록 하기 위해서 어트리뷰트를 새로 생성해서 request 객체에 저장하여 사용했습니다.
<!--긁지않은 개발자-->
request.setAttribute("name", "request man");
application 객체도 정보(자원)어트리뷰트에 저장할 수 있습니다.
<!--긁지않은 개발자-->
application.setAttribute("name", "application man");
application 객체에 저장된 내용은 하나의 프로젝트 내의 모든 JSP 페이지에서 공통적으로 사용할 수 있게 됩니다.
application 내장 객체는 하나의 웹 애플리케이션을 관리하고 웹 애플리케이션 안에서의 자원을 공유합니다. 하나의 웹 애플리케이션이란 하나의 웹 프로젝트를 의미합니다. 지금까지 여러분들이 web-study-04 이런 식으로 만든 프로젝트를 의미합니다.
이번 페이지에서 사용한 정보(자원)을 다음 페이지에서까지 사용하도록 하기 위해서 어트리뷰트를 새로 생성해서 request 객체에 저장하여 사용했습니다.
application 객체도 정보(자원)어트리뷰트에 저장할 수 있습니다.
application 객체에 저장된 내용은 하나의 프로젝트 내의 모든 JSP 페이지에서 공통적으로 사용할 수 있게 됩니다.
 
 
 
서블릿에서 제공하는 ServletContext로 선언된 application 내장 객체는 서버 기동 시 웹 애플리케이션 당 하나만 생성되며 서블릿 컨테이너의 정보를 제공하는 일, 컨테이너에게 로그 처리를 요청하는 일 등을 구현할 수 있는 다양한 메소드를 지원합니다.
JSP가 웹 컨테이너에 의해 서블릿으로 변환될 때, 자동으로 ServletContext 인터페스를 구현해서, 애플리케이션 내장 객체를 활용할 수 있게 해줍니다.
 
메서드 설명
getServerInfo() JSP 컨테이너의 이름과 버전을 반환한다.
getContextPath() 웹 애플리케이션의 URL 경로 중 컨텍스트 패스명을 반환한다.
getRealPath() JSP의 실제 경로를 반환한다.
getMimeType(filename) 지정된 파일의 MIME 타입을 반환한다.
log(message) 지정된 message의 로그를 저장한다.
긁지않은개발자 ()

 


 

 

내장 객체의 영역

내장 객체의 영역은 객체의 유효기간이라고도 불립니다.
해당 객체가 얼마 동안이나 살아있는가를 지정해 주는 것을 영역이라고 합니다.
영역은 4개로 page, request, session,application이 있습니다.
영 역 설 명
page 하나의 JSP 페이지를 처리할 때 사용되는 영역
request 하나의 요청을 처리할 때 사용되는 영역
session 하나의 브라우저와 관련된 영역
application 하나의 웹 애플리케이션과 관련된 영역

긁지않은개발자 

 

page 영역

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

생성된 PageContext 객체에 정보를 저장하면 해당 페이지 내에서만 사용할 수 있게 됩니다.


 

 

request 영역

브라우저에서 오는 한 번의 요청과 관련됩니다.

즉, 브라우저의 주소창에 URL을 입력하거나 페이지 링크를 클릭할 때,

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

브라우저가 요청을 할 때마다 새로운 request 내장 객체가 생성되고 매번 새로운 request 영역이 생성됩니다.

하지만 브라우저가 결과를 받으면 그 요청과 관련된 request 내장객체는 사라집니다.

 

getParameter()

setAttribute()


 

session 영역

세션이란 웹 브라우저를 닫기 전까지 페이지를 이동하더라도 사용자의 정보를 잃지않고 서버에 보관할 수 있도록 하는

객체로 모든 웹 서버에서 제공되는 것입니다.

 


 

application 영역

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

하나의 웹 애플리케이션에 속한 모든 페이지, 그 페이지에 대한 요청,

세션은 모두 하나의 application 영역에 속하게 됩니다.


 

728x90

'JSP > JSP 정리' 카테고리의 다른 글

[JSP] 서블릿(Servlet)이란?  (0) 2023.06.02
[JSP] JSP 액션태그  (0) 2023.06.01
[JSP] JSP 기본태그(수정 159)  (0) 2023.06.01
[JSP] JSP (Java Server Page) 란?  (0) 2023.05.31
[JSP] JSP로 시작하기  (0) 2023.05.31