[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() %]
[% } %]
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() %]
[% } %]
댓글