[JSP] 내장객체

3장. JSP 내장 객체


JSP
ASP

내장객체
request

response

session

application

out

pageContext

config

page

exception
request

response

session

application

server

Error

objectContext Objects








◇ 내장객체

[% %]안에서만 사용

① request : 클라이언트의 HTTP요청에 대한 작업 담당하는 객체(HTTP헤더, 파라미터)

② response : 클라이언트로의 응답에 대한 작업을 담당하는 객체

③ pageContext :페이지 실행에 대한 컨텍스트 정보 포함하고 페이지에 관련된 작업

④ session : 클라이언트의 세션정보를 유지하며 세션관리를 하는 객체

⑤ application : 애플리케이션 컨텍스트의 모든 페이지가 공유할 데이터를 담고 있으며 데이터에 대한 작업을 하는 객체

⑥ out : 클라이언트의 요청에 대한 응답 전송을 담당하는 출력 스트림

⑦ config :해당페이지 서블릿 설정 데이터를 담고 이 데이터에 대한 작업을 하는 객체

⑧ page : 해당 페이지 그 자체를 가리키기 위한 객체로 서블릿과 관련

⑨ exception : 해당 페이지 서블릿 실행시 에러가 발생했을 때 처리하지 못한 예외정보와 이에 관련된 처리를 하는 객체 


1) request

javax.servlet.http.HttpServletRequest

  HTTP프로토콜로 사용자 요청이 있을 때 요청된 메세지는 HTTP헤더부분과 HTTP몸체부분으로 나누어진다. HTTP메시지 자체의 목적지가 Java Server Page라면 JSP는 HTTP 메세지 전부를 이용하여 HttpServletRequest객체를 생성하게 된다. 이것을 _jspServer메서드 내에서 매개변수로 넘겨받게 되는 것이다. HTTP 요청이 있을 때 발생하는 모든 정보와 이 정보를 얻어낼 수 있는 여러가지 기능을 하는 객체가 바로 request객체이다.

이 객체는 response와 더불어 _jspService의 매개변수역할을 하며 Server Page프로그램에서 가장 기본이 되는 객체이다.   

① 클라이언트가 넘겨주는 파라미터에 관련된 정보를 얻는 메서드

getParameter(String name) : 요청 파라미터에 할당된 값 리턴.

지정된 파라미터가 존재하지 않을 경우 null 리턴

getParameterNames() : 요청에 사용된 모든 파라미터 이름을 Enumeration으로 리턴.

getParameterValues(String name) : 지정된 단일 요청 파라미터 이름에 대한 모든 값을

String배열로 리턴

② HTTP헤더와 관련된 메서드

getHeader(String headerName) : HTTP요청 헤더에 지정된 headerName의 값을

문자열로 리턴. 없을때 null 리턴

getHeaerNames() : HTTP요청 헤더에 포함된 모든 헤더 이름을 Enumeration 리턴.

getHeaders(String headerName) : HTTP요청 헤더에 포함된 headerName헤더의

모든값을 Enumeration으로 리턴.

getIntHeader(String headerName) : HTTP요청 헤더에 포함된 headerName헤더 값을

int로 리턴. 값을 int로 변환할 수 없는 경우 NumberFormatException 발생,

headerName헤더가 HTTP요청 헤더에 존재하지 않는 경우는 -1을 리턴.

getDateHeader(String headerNmae) : HTTP요청 헤더에 포함된 headerName헤더 값을

1970년 1월 1일 00시 00분 기준으로 현재까지의 밀리초를 long형으로 리턴.

HTTP요청 헤더에 headerName헤더가 존재하지 않은 경우 -1을 리턴.

헤더를 long형 숫자로 변환하지 못할 경우 IllegalArgumentException을 발생.  

③ 세션데이터에 관련된 메서드

getSession() : 요청을 시도한 클라이언트에 지정된 HttpSession객체를 얻어낸다.

이전에 생성된 HttpSession객체가 없었다면 새로운 세션 객체를 생성하게 된다.

getSession(boolean create) : 요청 시도한 클라이언트에 지정된 HttpSession객체 얻음

false로 지정된 경우 생성 된 HttpSession객체가 없는 경우 null 리턴

true로 지정된 경우 이미 존재하는 경우 생성된 HttpSession객체를 리턴하고

해당 클라이언트에 생성된 HttpSession객체를 리턴하고

해당 클라이언트에 생성된 HttpSession객체가 없으면

새로운 HttpSession객체를 생성하여 리턴.

getRequestedSeeionId() : 요청을 시도한 클라이언트이 세션 id를 문자열로 리턴.

isRequestedSessionIdValid() : 요청에 포함된 클라이언트 세션id가 유효하면 true

아니면 false를 리턴.

isRequestedSessionIdFromCookie() : 요청에 포함된 클라이언트 세션 id가 쿠키로

전달된 경우 true, false 리턴. 

 

④ 쿠키에 관련된 메서드

getRequestURI() : 요청에 사용된 URL로부터 URI부분을 문자열로 리턴. 

⑤ URL에 관련된 메서드

getQueryString() : 요청에 사용된 쿼리 문자열을 문자열로 리턴.

getMethod() : 요청에 사용된 요청방식 GET, POST, HEAD등 문자열로 리턴.  




2) response

javax.servlet.http.HttpServletReponse

jsp 페이지를 처리한 결과를 사용자에게 보낼 때 사용되는 응답을 나타냄.

헤더, 쿠키, 응답 관련 정보 설정.

① url 재작성과 관련된 메서드

encodeRedirectURL(url)

encodeURL(name)

sendRedirect(url)

② 버퍼에 관련된 메서드

flushBuffer() : 버퍼에 저장되어 있는 내용을 클라이언트로 전송

getBufferSize() : 표준 출력 버퍼의 크기를 정수 자료형으로 반환

isCommitted() : 클라이언트에 어떤 내용을 버퍼로 출력했으면 True를 반환

setBufferSize(int size) : 출력 버퍼의 크기를 설정

③ 쿠키 관련 메서드

addCookie(Cookie cookie) : 클라이언트에세 새로운 쿠키 정보 전송

④ 문자 인코딩 관련 메서드

getCharacterEncoding() :




3) session

javax.servlet.http.HttpSession

① 메서드

getAttribute(name) : Name값에 대한 세팅된 값 반환

setAttribute("user", “admin") : 'user'라는 속성에 'admin'라는 session 값을 설정

setMaxInactiveInterval(600) : Session이 지속되는 시간. 기본 1800초

getMaxInactiveInterval() : 부여된 Session이 지속되는 시간을 알아내는 메소드

getId() : session Id

getCreationTime() : Session이 생성된 시간. GMT 표준시 기준으로 MiliSecond 단위

invalidate() : Session 정보 삭제

isNew() : Session에 id가없으면 (새것이면) true를 반환.




4) application

javax.servlet.ServletContext

이 객체는 JSP페이지가 실행되는 서버에 관련된 것으로 서버에 정보를 나타낸다.

값을 설정하기 보다는 이미 설정되어 있는 정보를 볼 수 있다.

에러 로그 생성, 서버 정보, 버전 정보, 서버측 리소스를 액세스 할 수도 있다.

① 컨테이너 버전을 알 수 있는 메소드

getServerInfo() : 서블릿 컨테이너의 이름과 버전을 반환한다.

getMajorVersion() : 서블릿 컨테이너의 주버전을 반환한다.

getMinorVersion() : 서블릿 컨테이너의 부버전을 반환한다.

② 서버측의 경로를 알 수 있는 메소드

getMimeType(filename) : 파일이름에 해당하는 파일의 MIME타입을 반환한다

getResource(path) : path에 지정된 URL을 액세스 객체로 바꾸어준다.

getResourceAsStream(path) : path에 URL을 읽을 수 있는 입력스트림으로 바꾼다.

getRealPath(path) : Path에 URL을 내부 시스템 경로로 바꾸어 반환한다.

getContext(path) : Path에 대한 외부환경 정보를 반환한다.

③ 로그 파일 관련 메소드

log(mag) : 메시지를 로그파일에 쓴다.

log(msg,exception) : 메시지와 예외상황을 같이 로그파일에 쓴다.

어플리케이션 객체는 많이 사용하지 않는다. 그러나 로그파일관리, 디비 커넥션 풀(Data Base Connection Pool)을 사용할 때 쓴다. 다른 경우엔 사용을 자제 하는 것이 좋다고 한다. 서버가 살아있는 시간 동안 계속 데이터를 가지고 있을 만한 것이 이것 말고 또 어떤 것이 있을까?

session 객체와 application 객체는 모두 반환형식이 Jva.lang.Object 타입이므로 출력을 목적으로 사용 할 때에는

반드시 String타입으로 케스팅을 하도록 하자.

out.print((String) getMimeType(a.txt));




5) out

javax.servlet.jsp.JspWriter

out 내부객체는 해당하는 페이지에 보내는 컨텐츠의 출력 스트림이다.

이 객체는 출력버퍼 등을 조작하거나 컨텐츠의 출력에 관여하는데 참여한다.

out객체는 스크립트릿(Scriptlet)에서 사용한다.

① 메소드

getBufferSize() : 출력버퍼의 크기를 Byte로 반환한다.

getRemaining() : 출력버퍼의 빈부분 크기를 Byte로 반환한다.

clearBuffer() : 출력 버퍼를 지운다.

clear() : 출력 버퍼를 지운다.(만약 전에 flush되어 있으면 에러를 발생한다)

flush() : 출력버퍼를 flush시킨다.

close() : 출력스트림을 닫는다.

print() : JSP문서에서 출력에 사용한다.

println() : print()와 같다.




6) pageContext

javax.servlet.jsp.PageContext

이 객체는 조금은 특별한 객체로 어떤 내부 객체의 속성을 얻어낼 수 있다.

JSP 페이지의 여러 가지 환경에 영향을 주는 요소의 값을 가져오거나 설정 가능.

또 JSP페이지의 흐름을 현제 페이지에서 다른 페이지로 할 수도 있다.

① 메서드

getAttribute() : JSP 페이지의 모든 Scope 내에서 속성을 찾아낸다.

getRequest() : JSP 페이지의 Request 객체를 가져온다.

getResponse() : JSP 페이지의 Response 객체를 가져온다.

getSession() : JSP 페이지의 Session 객체를 가져온다.

getApplication() : JSP 페이지의 Application 객체를 가져온다.

getPage() : JSP 페이지의 Page 객체를 가져온다.

getOut() : JSP 페이지의 Out 객체를 가져온다.

getConfig()JSP 페이지의 Config 객체를 가져온다.

getException() : JSP 페이지의 예외처리 객체를 가져온다.




7) config

javax.servlet.jsp.ServletConfig

config 객체는 JSP페이지가 컴파일되어 서블릿 클래스가 될 때 서블릿의

구성데이터로 초기값과 변수를 저장.

① 메서드

getInitParameter(String name) : 주어진 이름의 초기화 변수의 값 반환

getInitParameterNames() : 서블릿의 초기화 변수의 이름을 열거한다.

getServletContext() : 호출자가 실행중인 ServletContext의 참조 변수를 반환.

getServletName() : 서블릿 객체의 이름을 반환.




8) page

page 객체는 JSP 페이지에서 생성되는 Servlet 객체를 참조하는 참조변수다.

즉 자기가 생성할 Servlet객체를 참조하는 객체다.

그래서 자기 자신을 참조하는 키워드 this를 사용해서 생성됩니다.

Object page = this;

page객체는 내부적으로 자기 자신을 참조하는 this를 받지만 형이 Object형이다.

이렇게 되다보니 거의 외부에서 page객체를 사용하는 일은 별로 없다.

내부적인 작업을 하기 위해서 주로 사용되는 객체다.




9) exception : java.lang.Throwable

excetion 객체는 java.lang.Throwable 클래스 형의 JSP 내장객체

페이지 처리 중에 나타나는 예외상황(Exception)에 대한 내부 객체이다.

이 객체는 page지시자에서 isErrorPage 속성이 true로 된 페이지에서만 사용 가능.

그러므로 errorPage에서 에러를 보여주는 곳에 사용하는 것이 좋다.

① 메서드

getMessage() : 에러 메세지를 반환한다.

printStackTrace(out) : 에러발생시 출력스트림을 통하여 출력한다.

toString() : 에러메세지를 String형식으로 반환한다.

△ JSP 페이지에서 예외 처리 방법

① 예외 발생시 또 다른 페이지를 에러 페이지로 지정하여 그 페이지로 이동하는 방법

page 지시어 이용.

[!-- main.jsp --]

[%@page errorPage="error.jsp" %]

[!-- error.jsp --]

[%@page isErrorPage="true" %] : 예외 처리하는 페이지로 현재 페이지 사용.

[%= exception.toString() %] : 발생된 exception 종류 알 수 있다.

② 자바에서 사용하는 try catch 구문을 사용.








☆ request

◇ request-get.htm

폼데이터 전송-request파라미터예제[p]

request-get.htm -] request-get.jsp[p]

[form action="request-get.jsp" method="get"]

아이디 : [input type="text" name="id" ][br]

암호: [input type="password" name="pwd" ][br]

나이 : [input type="text" name="age" ][br]

[input type="submit" value="get확인"]

[/form]




◇ request-get.jsp

[%@page import="java.util.*" contentType="text/html; charset=EUC-KR"%]

내장 객체 request파라미터 전송[P]

request.getMethod() : [%=request.getMethod()%][br][!-- get/post --]

request.getQueryString() : [%=request.getQueryString()%][br][!-- get --]

request.getContentType() : [%=request.getContentType()%][br][!-- post --]

request.getContentLength() : [%=request.getContentLength()%][p][!-- post --]

[% // get/post

Enumeration enum = request.getParameterNames();

// 전달받은 폼 개체들의 이름을 배열 객체로 반환

String name = "";

while(enum.hasMoreElements()) {

name = (String)enum.nextElement();

out.print(name + " : " + request.getParameter(name) + "[br]");

// 개체의 이름을 매개변수로 전달받아

// 그 이름에 해당하는 개체의 값을 문자열 객체의 배열로 반환

}

%]

[p]나이 : [%=request.getParameter("age")%][!-- 개체의 이름을 아는 경우 --]

[br]나이 + 10 : [%=request.getParameter("age")+10%]

[br]나이를 문자열에서 숫자로 바꾼다. : Integer.parseInt(request.getParameter("age")

[br]나이 + 10 : [%= Integer.parseInt(request.getParameter("age"))+10%]




◇ request.jsp

[%@page contentType="text/html; charset=EUC-KR"%]

request 개체를 이용해 클라이언트와 서버 정보 얻기[p]

사용중인 프로토콜 : [%= request.getProtocol() %] [br]

사용중인 메서드 : [%= request.getMethod() %] [br]

컴퓨터의 주소 : [%= request.getRemoteAddr() %] [br]

서버 이름 : [%= request.getServerName() %] [br]

서버 포트 : [%= request.getServerPort() %] [br]

위치 설정 : [%= request.getRequestURI() %] [br]




◇ requestHeadInfo.jsp

[%@page import="java.util.*" contentType="text/html;charset=euc-kr"%]

HTTP 요청 헤더 정보 [p]

Requested URL : [%= HttpUtils.getRequestURL(request)%][BR]

Requested URI : [%= request.getRequestURI() %][BR]

요청 방식 : [%= request.getMethod() %][p]

[% String name="";

String value="";

Enumeration enum = request.getHeaderNames();

while(enum.hasMoreElements()){

name = (String)enum.nextElement();

Enumeration values = request.getHeaders(name);

while(values.hasMoreElements()){

value = (String)values.nextElement();

out.print("[b]" + name + "[/b]" + " : " + value + " [BR]");

}

}

%]







☆ response

◇ sendRedirect.jsp

[%@page contentType="text/html; charset=EUC-KR"%]

url 이동 : response.sendRedirect(url)[p]

[% response.sendRedirect("http://www.naver.com");%]




◇ buffer.jsp

[%@page contentType="text/html; charset=EUC-KR"%]

request 개체를 이용해 버퍼 정보 얻기[p]

현재 버퍼 크기 response.getBufferSize() : [%= response.getBufferSize() %] [br]

버퍼 크기 변경 response.setBufferSize() : [% response.setBufferSize(10000); %]

변경 버퍼 크기 response.getBufferSize() : [%= response.getBufferSize() %] [br]




◇ TextSize.jsp

[%@ page contentType="text/html; charset=euc-kr" %]

[%!

String textSize; // 멤버변수 선언

String textColor;

%]

[%

textSize=request.getParameter("textSize");

textColor=request.getParameter("textColor");

%]

[table border=1]

[tr][th colspan=2]

[font size="[%= textSize %]" color="[%= textColor %]"]

JSP 변수설정 예제[/th][/tr]

[tr][th] 크기 [/th][th] 색상 [/th][/tr]

[tr][td][a href="TextSize.jsp?textSize=1&textColor=[%=textColor%]"]1[/a]

[a href="TextSize.jsp?textSize=2&textColor=[%=textColor%]"]2[/a]

[a href="TextSize.jsp?textSize=3&textColor=[%=textColor%]"]3[/a]

[a href="TextSize.jsp?textSize=4&textColor=[%=textColor%]"]4[/a]

[a href="TextSize.jsp?textSize=5&textColor=[%=textColor%]"]5[/a]

[a href="TextSize.jsp?textSize=6&textColor=[%=textColor%]"]6[/a]

[/td]

[td][a href="TextSize.jsp?textSize=[%=textSize%]&textColor=red"]red[/a]

[a href="TextSize.jsp?textSize=[%=textSize%]&textColor=green"]green[/a]

[a href="TextSize.jsp?textSize=[%=textSize%]&textColor=blue"]blue[/a]

[/td][/tr]

[/table]




◇ sports.jsp

[%@ page contentType="text/html; charset=euc-kr" %]

[form method="get" action="sports.jsp"]

[table border=1]

[tr][th] name [/th][td][input type="text" name="name"] [/td][/tr]

[tr][th] address [/th][td][input type="text" name="addr"] [/td][/tr]

[tr][th colspan=2]당신이 좋아하는 운동은? [/th][/tr]

[tr][th colspan=2][input type="checkbox" name="cb" value="야구"] 야구

[input type="checkbox" name="cb" value="축구"] 축구

[input type="checkbox" name="cb" value="배구"] 배구

[input type="checkbox" name="cb" value="농구"] 농구 [/th][/tr]

[tr][th colspan=2][input type="submit" value="전송"]  

[input type="reset" value="취소"] [/th][/tr]

[/table][/form]

[%! String name;

String address;

String str[];

%]

[% name=request.getParameter("name");

address=request.getParameter("addr");

%]

[hr width="70%"][p]

당신의 이름 : [%= name %][p]

당신의 주소 : [%= address %][p]

당신의 취미 :

[!-- checkbox 배열로 가져오기 --]

[% str=request.getParameterValues("cb");

if(str != null){

for(int i=0; i[str.length ; I++) {

out.print(str[i]+",");

}

} else {

out.println("취미는 없군요.");

}

%]

☆ session

◇ login.htm

login.htm -] login_ok.jsp[p]

[form method=get action="login_ok.jsp"]

[table border=1 bgcolor="#e6e6ff"]

[tr][th] 아이디 [/th][td][input type=text size=10 name=id][/td][/tr]

[tr][th] 암호 [/th][td][input type=password size=10 name=pwd][/td][/tr]

[tr][th colspan=2][input type=submit value="전송"][/th][/td]

[/table]

[/form]




◇ login_ok.jsp

[%@page contentType="text/html; charset=EUC-KR"%]

[%

String id=request.getParameter("id");

String pwd=request.getParameter("pwd");

%]

[% if(id.equals("admin") && pwd.equals("1111")) {

session.setAttribute("userid", id); // session 설정

}

else {

response.sendRedirect("login.htm");

}

%]

[%= id %] 님의 방문을 환영합니다.

[p][a href="main.jsp"]main으로 이동[/a]




◇ main_ok.jsp

[%@page contentType="text/html; charset=EUC-KR"%]

[% try {

if(!session.getAttribute("userid").toString().equals("admin"))

response.sendRedirect("login.htm");

} catch(NullPointerException e) {

response.sendRedirect("login.htm");

} %]

[p]현재 session 값 : [%= session.getAttribute("userid").toString() %]

[p]현재 session ID : [%= session.getId() %]

[p]session이 만들어진 시각 : [%= session.getCreationTime() %]

[p]마지막 session 접속 시각 : [%= session.getLastAccessedTime() %]

[p]현재 session Timeout 시간 : [%= session.getMaxInactiveInterval() %]

[p]session Timeout 시간 변경 [% session.setMaxInactiveInterval(3000); %]

[p]변경 session Timeout 시간 : [%= session.getMaxInactiveInterval() %]

[p][a href="logout.jsp"]logout[/a]




◇ logout.jsp

[%@page contentType="text/html; charset=EUC-KR"%]

[% session.invalidate(); %]

session이 종료되었습니다.[p]

[a href="main.jsp"]main 페이지로 이동[/a]







☆ application

◇ application.jsp

[%@page contentType="text/html; charset=EUC-KR"%]

서블릿 컨테이너의 이름과 버전 application.getServerInfo() :

[%= application.getServerInfo() %][p]

URL을 내부 시스템 경로 application.getRealPath("/") :

[%= application.getRealPath("/") %][p]

Path에 대한 외부환경 정보 application.getRealPath("/") :

[%= application.getContext("/") %][p]




☆ out

◇ out.jsp

[%@page contentType="text/html; charset=EUC-KR"%]

[%@page buffer="1kb"%]

out.println() : 출력을 위한 메서드[p]

[%= "안녕?" %][br]

[font color="red"][%= "안녕?" %][/font][br]

[% out.println("안녕?"); %][br]

[% out.println("[font color='blue']안녕?[/font]"); %][p]







[%

out.println("Buffer의 크기 : " + out.getBufferSize()+"Bytes[br]");

out.println("남은 Buffer의 크기 : " +out.getRemaining()+"Bytes");

out.flush();

%]







☆ config

◇ config.jsp

[%@ page contentType="text/html; charset=euc-kr" %]

내장객체 config를 사용한 정보출력[p]

서블릿 이름 : [%= config.getServletName()%][br]

[% ServletContext context = config.getServletContext(); %]

서버버전 : [%= context.getMajorVersion() +"."+context.getMinorVersion() %]

ServletContext context는 application내장객체와 동일하기 때문에 굳이 이러한

방법으로 ServletContext를 얻을 이유는 없다.







☆ exception

◇ [!-- exceptionTest.jsp --]

[%@page errorPage="error.jsp" contentType="text/html; charset=EUC-KR"%]

[% String str1="1234";

String str2="abcd"; %]

"1234" : [%= Integer.parseInt(str1)%][br]

"abcd" : [%= Integer.parseInt(str2)%][br]




◇ [!-- error.jsp --]

[%@page isErrorPage="true" contentType="text/html; charset=EUC-KR"%]

@page isErrorPage="true" [p]

오류 발생 페이지입니다.[p]

[%=exception.toString() %]




◇ [!-- trycatch.jsp --]

[%@page contentType="text/html; charset=EUC-KR"%]

[% String str1="1234";

String str2="abcd";



try {

int in1=Integer.parseInt(str1);

int in2=Integer.parseInt(str2);

%]

"1234" : [%= in1 %][br]

"abcd" : [%= in2 %][br]

[% } catch(Exception e){ %]

오류가 발생했습니다.[p]

[%= e.toString() %]

[% } %]

댓글

이 블로그의 인기 게시물

[MSSQL] 데이터베이스가 사용 중이어서 배타적으로 액서스할 수 없습니다

[LINUX] CentOS 부팅시 오류 : UNEXPECTED INCONSISTENCY; RUN fsck MANUALLY

구글코랩) 안전Dream 실종아동 등 검색 오픈API 소스를 공유합니다. (구글드라이브연동, 이미지 수집 소스)