JSP 페이지 내에서 지정한 레퍼런스 변수와 특정 객체의 메소드로 접근을 한다.
JSP 페이지에서 사용하게 되는 특정한 변수가 아무런 선언과 객체 생성 없이 사용 할 수 있는 이유는 JSP 페이지가
서블릿으로 변환 될 때 JSP 컨테이너가 자동적으로 제공 하기 때문이다.
public final class directiveTest4_jsp extends org.apache.jasper.runtime.HttpJspBase
implements org.apache.jasper.runtime.JspSourceDependent {
private static java.util.List _jspx_dependants;
static {
_jspx_dependants = new java.util.ArrayList(2);
_jspx_dependants.add("/top.jsp");
_jspx_dependants.add("/bottom.jsp");
}
public Object getDependants() {
return _jspx_dependants;
}
public void _jspService(HttpServletRequest request, HttpServletResponse response)
throws java.io.IOException, ServletException {
JspFactory _jspxFactory = null;
PageContext pageContext = null;
HttpSession session = null;
ServletContext application = null;
ServletConfig config = null;
JspWriter out = null;
Object page = this;
JspWriter _jspx_out = null;
PageContext _jspx_page_context = null;
9개의 내장 객체는 사용되는 범주에 따라 4가지 형태로 분류 된다.
JSP 페이지 입출력 관련 내장 객체
JSP 페이지 외부 환경 정보 제공 내장 객체
JSP 페이지 서블릿 관련 내장 객체
JSP 페이지 예외 관련 내장 객체
JSP페이지의 내장 객체
request javax.servlet.http.HttpServletRequest
javax.servlet.ServletRequest //클라이언트의 요청 정보를 저장하고 있는 객체
response javax.servlet.http.HttpServletResponse
javax.servlet.ServletResponse //요청에 대한 응답정보를 저장하고 있는 객체
out javax.servlet.jsp.JspWriter //JSP 페이지 출력할 내용을 가지고 있는 출력 스트림 객체
session javax.servlet.http.HttpSession //세션 정보를 저장하고 있는 객체
application javax.servlet.ServletContext //웹 어플리케이션 Context의 정보를 저장하고 있는 객체
pageContext javax.servlet.jsp.PageContext //JSP 페이지에 대한 정보를 저장하고 있는 객체
page java.lang.Object //JSP 페이지를 구현한 자바 클래스 객체
config javax.servlet.ServletConfig //JSP 페이지에 대한 설정정보를 저장하고 있는 객첵
exception java.lang.Throwable //JSP 페이지에서 예외가 발생시에만 사용되는 객체
내장 객체의 속성을 저장하고 읽어내는 공통 메소드
void setAttribute (String key, Object value) //주어진 key 속성의 값을 value로 지정한다.
java.util.Enumeration getAttributeNames() //모든 속성의 이름을 구한다.
Object getAttribute(String key) //주어진 key 속성의 값을 언더낸다.
void removeAttribute(String key) //주어진 key 속성의 값을 제거한다.
//-----------------------------------------------------------------------------------------------------------------------
request 내장 객체
request 내장 객체 메소드
String getParameter(name)
String[] getParameterValues(name)
Enumeration getParameterNames()
String getParameter(name) 메소드는 이름이 name이 파라미터에 할당된 값을 리턴하며 지정된 파라미터 값이 없으면 null 값을 리턴
String[] getParameterValues(name) 메소드는 이름이 name인 파라미터의 모든 값을 String 배열로 리턴, checkbox 에서 주로 사용
Enumeration getParameterNames() 메소드는 요청에 사용된 모든 파라미터 이름을 java.util.Enumeration 타입으로 리턴
Enumeration 객체
java.util.Enumeration 인터페이스는 객체를 저장하는 객체라고 생각하면 된다.
요청된 요소의 값들을 Object 타입의 값으로 1:1 저장을 하며, 다음과 같은 메소드들을 가지고 있다.
메소드
boolean hasMoreElements() //더 이상의 객체가 있는지 없는지를 판단하여 객체가 있으면 true,
없으면 false 리턴
Object nextElement() //다음 객체를 가져온다. 그러면 Enumeration 타입으로 받아온 객체를
작업에서 원하는 객체 형태로 형변환(casting)하여 사용하면 된다.
예제
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
<%
String protocol=request.getProtocol(); //사용 중인 프로토콜
String server=request.getServerName(); //서버의 도메인
int port=request.getServerPort(); //서버 Port
String clientIP=request.getRemoteAddr(); //클라이언트 IP
String clientHost=request.getRemoteHost(); //클라이언트의 호스트 이름
String methodType=request.getMethod(); //method
String url=new String(request.getRequestURL()); //URL
String uri=request.getRequestURI(); //URI
String contextpath=request.getContextPath(); //JSP 페이지가 속한 컨텍스트 경로
String contextpath=request.getContextPath(); //JSP 페이지가 속한 컨텍스트 경로
String contextpath=request.getContextPath(); //JSP 페이지가 속한 컨텍스트 경로
String contextpath=request.getContextPath(); //JSP 페이지가 속한 컨텍스트 경로
String contextpath=request.getContextPath(); //JSP 페이지가 속한 컨텍스트 경로
String browser=request.getHeader("User-Agent"); //User-Agent -->지원 프로그램 버전 출력
String mediaType=request.getHeader("Accept"); //HTTP 요청헤더에 지정된 문자열의 값을 리턴
%>
<h2>Request내장 객체 예제2</h2>
프로토콜명 : <%=protocol %><p>
접속한 서버명 : <%=server %><p>
접속한 서버의 포트 번호 : <%=port %><p>
클라이언트의 IP : <%=clientIP %><p>
클라이언트의 호스트명 : <%=clientHost %><p>
현재 페이지의 method방식 : <%=methodType %><p>
요청한 현재 페이지의 경로 : <%=url %><p>
요청한 현재 페이지의 경로 URI: <%=uri %><p>
<%=browser %><p>
</br>
<%=mediaType %><p>
</br>
<%=contextpath %>
</body>
</html>
//-----------------------------------------------------------------------------------------------------------------------
response 내장 객체
response 내장 객체 메소드
void setHeader(name, value)
void setContentType(Type)
void sendRedirect(url)
setHeader(name,value) 메소드는 웹 브라우저로 응답될 Header 정보를 새로 설정하기 위한 메소드이다.
이 메소드는 헤더 설정 정보를 새로 설정하는 작업에서 주로 사용된다.
setContentType(type) 메소는 page 디렉티브의 contentType 속성과 같은 역할을 한다.
sendRedirect(url) 메소드는 해당 페이지로 리다이렉트할 때 사용된다.
sendRedirect(url) 메소드와 유사한 것으로 <jsp:forward> 액션 태그가 있는데 하는 작업은 비슷해 보이지만, 내부적으로 처리되는
요청의 개수가 다르고 세부적으로 적용되는 작업이 다르다.
둘의 차이에 대한 설명은 액션 태그에서 다룬다.
예제
responseTest1.jsp파일
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
<h2>Response 내장 객체 예제</h2>
현재 페이지는 responseTest1.jsp 페이지 입니다.
<%
response.sendRedirect("responseTest1_1.jsp");%>
</body>
</html>
responseTest1_1.jsp파일
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
<h2>Response 내장 객체 예제</h2>
현재 페이지는 responseTest1.jsp 페이지 입니다.
<%
response.sendRedirect("responseTest1_1.jsp");%>
</body>
</html>
//-----------------------------------------------------------------------------------------------------------------------
out 내장 객체
out 내장 객체 메소드
boolean isAutoFlush() //출력 버퍼가 다 찼을 때 처리여부를 결정하는것으로 자동으로 플러시 할
경우는 true , 그렇지 않을 경우 false
int getBufferSize() //출력 버퍼의 전체 크기를 리턴한다.
int getRemaining() //현재 남아 있는 출력 버퍼의 크기를 리턴한다.
void clearBuffer() //현재 출력 버퍼에 저장되어 있는 내용을 웹 브라우저에 전송하지 않고 비운다.
String println(str) //주어진 str 값을 웹 브라우저에 출력한다. 이때 줄바꿈은 적용되지 않는다.
void flush() //현재 출력 버퍼에 저장되어 있는 내용을 웹 브라우저에 전송하고 비운다.
void close() //현재 출력 버퍼에 저장되어 있는 내용을 웹 브라우저에 전송하고
출력스트림을 닫는다.
JSP 페이지가 생성한 결과를 웹 브라우저에 전송해 주는 출력 스트림이며, JSP페이지가 웹 브라우저에게 보내는 모든 정보는 out 객체로 통해서 전송된다.
여기서 모든 정보는 스크립트요소 뿐만 아니라 비스크립트 요소인 HTML, 일반텍스트도 모두 포함된다.
out 객체는 javax.servlet.jsp.JspWriter 클래스 타입으로 JSP에서는 out 객체로 사용 된다.
주로 많이 사용되는 메소드는 웹 브라우저에 출력을 하기 위한 println() 메소드이다.
<%=코드%> 과 <%out.println(코드)%> 는 같은 것이다.
JSP 페이지에서 개발자들의 편의성을 제공하기 위해서
<%=코드%> 이 만들어진 것 뿐이다.
JSP 페이지가 서블릿으로 변환될 때 <%=코드%> 부분은 out.println(코드)로 변환이 되어 실행된다.
표현식 <%=코드%> 는 스크립트릿<% %> 안에서 쓸 수 없다.
예제
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
<%
int bufferSize=out.getBufferSize();
int remainSize=out.getRemaining();
int usedSize=bufferSize-remainSize;
%>
<h2>Out 내장 객체 예제</h2>
<b>현재 페이지에서의 버퍼의 사용현황</b><p>
출력 버퍼의 전체 크기 : <%=bufferSize %><p>
현재 사용한 버퍼의 크기 : <%=usedSize %><p>
남은 버퍼의 크기 : <%out.println(remainSize); %><p>
</body>
</html>
//-----------------------------------------------------------------------------------------------------------------------
page Context 내장 객체
pageContext 내장 객체 메소드
ServletRequest getRequest() //페이지 요청 정보를 가지고 있는 request 내장 객체를 리턴한다.
ServletResponse getResponse() //페이지 요청에 대한 응답 정보를 가지고 있는 response 내장 객체를 리턴 한다.
JspWriter getOut() //페이지 요청에 대한 응답 출력 스트림인 out 내장 객체를 리턴한다.
HttpSession getSession() //요청한 클라이언트의 세션 정보를 담고 있는 session 내장 객체를 리턴 한다.
ServletContext getServletContext() //페이지에 대한 서블릿 실행 환경 정보를 담고 있는
application 내장 객체를 리턴한다.
Object getPage() //page 내장 객체를 리턴 한다.
ServletConfig getServletConfig() //페이지의 서블릿 초기 정보 설정 정보를 담고 있는 config 내장 객체를
리턴한다.
Exception getException() //페이지 실행 중에 발생되는 에러 페이지에 대한 예외정보를 갖고 있는
exception 내장 객체를 리턴 한다.
pageContext 객체는 현재 JSP 페이지의 컨텍스트를 나타내며, 주로 다른 내장 객체를 얻어 내거나,
페이지의 흐름제어 그리고 에러데이터를 얻어낼 때 사용된다.
javax.servlet.jsp.PageContext 객체 타입으로, JSP에서는 pageContext 객체로 사용된다.
ex>
JspWriter outObject=pageContext.getOut(); //pageContext 객체를 이용하여 out 객체를 얻어내는 방법이다.
//-----------------------------------------------------------------------------------------------------------------------
session 내장 객체
session 내장 객체 메소드
String getId() //해당 세션의 고유한 세션 ID를 리턴 한다.
long getCreationTime() //해당 세션이 생성된 시간을 리턴 한다.
long getLastAccessedTime() //웹 브라우저의 요청이 시도된 마지막 접근시간을 리턴 한다.
void setMaxInactiveInterval(time) //해당 세션을 유지할 시간을 초단위로 설정한다.
time에 해당하는 시간 '초' 이 지날경우 session 의 속성값이
모두 제거되어 연결이 끊긴다.
int getMaxInactiveInterval() //기본값은 30분으로 setMaxInactiveInterval(time)로 지정된 값을 리턴 한다.
boolean isNew() //새로 생성된 세션의 경우 true 값을 리턴 한다.
void invalidate() //현재 설정된 세션의 속성 값을 모두 제거한다.
주로 세션을 종료시킬 때 사용된다.
session 객체는 웹 브라우저의 요청시 요청한 웹 브라우저에 관한 정보를 저장하고 관리하는 내장 객체라 할 수 있다.
seesion 객체는 javax.servlet.http.HttpSession 객체 타입으로, JSP에서는 session 객체로 사용된다.
session 객체는 웹 브라우저(클라이언트)당 1개가 할당된다. 따라서 주로 회원관리에서 사용자 인증에 관련된
작업을 수행할 때 사용된다.
다른 내장 객체들은 물론 session 객체도 별도의 생성 없이 암묵적으로 사용된다. 이것은 page 디렉티브의 session 속성이
'true'로 설정이 되어 있어야 가능하다. 물론 session 속성은 기본값이 'true' 이다. 따라서 사용하는데 아무런 문제가 없다.
예제
sessionTestForm1.jsp 파일
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
<h1>Session 내장객체 예제</h1>
<form method=post action="sessionTest1.jsp">
아이디 : <input type="text" name="id"><p>
패스워드 : <input type="password" name="passwd"><p>
<input type="submit" value="로그인">
</form>
</body>
</html>
sessionTest1.jsp 파일
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
<%
request.setCharacterEncoding("euc-kr");
%>
<%
String id=request.getParameter("id");
String passwd=request.getParameter("passwd");
session.setAttribute("id",id); //session속성 id의 값에 id 변수값을 할당
session.setMaxInactiveInterval(60*2); //2분
%>
<h2>Session 내장 객체 예제</h2>
<form method=post action="sessionTest2.jsp">
☆ 가장 좋아하는 스포츠를 선택하세요. ☆ <br>
<input type="radio" name="sports" value="태권도">태권도
<input type="radio" name="sports" value="유도">유도
<input type="radio" name="sports" value="프로레슬링">프로레슬링
<input type="radio" name="sports" value="이종격투기">이종격투기<p>
☆ 가장 좋아하는 게임을 선택하세요. ☆ <br>
<select name="game">
<option value="스타크">스타크(아직도 좋다)</option>
<option value="WOW">WOW</option>
<option value="리니지">리니지</option>
</select>
<input type="submit" value="전송">
</form>
</body>
</html>
sessionTest2.jsp 파일
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
<%
request.setCharacterEncoding("euc-kr");
%>
<h2>Session 내장 객체 예제</h2>
<%
String sports=request.getParameter("sports");
String game=request.getParameter("game");
String id=(String)session.getAttribute("id");
String sessionId=session.getId();
if(id!=null){
%>
<b><%=id %></b>님 접속해주셔서 갑사합니다.</br>
<%=id %>님 좋아하는 스포츠는 <%=sports %>이고,</br>
좋아하는 게임은 <%=game %>입니다.<p>
현재 웹브라우저의 세션ID : <%=sessionId %><p>
<%
session.invalidate(); //세션의 무효화,종료
}
else{
out.println("로그인을 하시기 바랍니다.");
}
%>
</body>
</html>
//-----------------------------------------------------------------------------------------------------------------------
application 내장 객체
application 내장 객체 메소드
String getServerInfo() //applcation.getServerInfo() 일경우 웹 컨테이너의 이름과 버전을 리턴한다.
ex> getServletInfo() 를 사용할 경우는 [page 디렉티브의 info="문자열"] 의 문자열 내용을 리턴
위의 메소드와 혼동하지 말것
String getMimeType(fileName) //지정한 파일의 MIME 타입을 리턴한다.
String RealPath(path) //지정한 경로를 웹 어플리케이션 시스템상의 경로로 변경하여 리턴한다.
void log(message) //로그 파일에 message를 기록한다.
웹 어플리케이션의 설정 정보를 갖는 context와 관련이 있는 객체로 웹 어플리케이션과 연관이 있다.
application 객체는 웹 어플리케이션이 실행되는 서버의 설정 정보 및 자원에 대한 정보를 얻어내거나
어플리케이션이 실행되고 있는 동안에 발생할 수 있는 이벤트 로그 정보와 관련된 기능들을 제공한다.
application 내장 객체는 웹 어플리케이션당 1개의 객체가 생성된다.
따라서 application 내장 객체는 하나의 웹 어플리케이션에서 공유하는 변수로 사용된다.
application 객체는 웹 사이트의 방문자 기록을 카운트할 때 주로 사용된다.
jsp파일이 java파일로 변환된 생성위치
D:\Source1\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\work\Catalina\localhost\startPage\org\apache\jsp
jsp파일 위치
D:\Source\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\webapps\프로젝트명\
예제
applicationTest1.jsp 파일
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
<%
String info=application.getServerInfo();
int major=application.getMajorVersion(); //Major Version
int minor=application.getMinorVersion(); //Minor Version
String path=application.getRealPath("/");
application.log("로그 기록");
%>
<h2>Application 내장 객체 예제</h2>
웹 컨테이너의 이름과 버전 : <%=info %><p>
서블릿의 버전 : <%=major %>,<%=minor %><p>
웹 어플리케이션 폴더의 로컬 시스템 경로 : <%=path %>
</body>
</html>
출력 결과
Application 내장 객체 예제
웹 컨테이너의 이름과 버전 : Apache Tomcat/5.5.27
서블릿의 버전 : 2,4
웹 어플리케이션 폴더의 로컬 시스템 경로 :
D:\Source\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\webapps\application\
//-----------------------------------------------------------------------------------------------------------------------
config 내장 객체
application 내장 객체 메소드
Enumeration getInitParameterNames() //모든 초기 파라미터 이름을 리턴한다.
String getInitParameter(name) //이름이 name 인 초기 파라미터의 값을 리턴한다.
String getServletName() //서블릿의 이름을 리턴한다.
ServletContext getServletContext() //실행하는 서블릿 ServletContext 객체를 리턴한다.
config 내장 객체는 javax.servlet.ServletConfig 객체 타입으로 ServletConfig 객체는 서블릿이 초기화되는 동안 참조해야 할
정보를 전달해 주는 역할을 한다. 즉, 서블릿이 초기화될 때 참조해야하는 정보를 가지고 있다가 전달해준다.
config 내장 객체는 컨테이너당 1개의 객체가 생성된다. 같은 컨테이너에서 서비스되는 모든 페이지는 같은 객체를 공유한다.
//-----------------------------------------------------------------------------------------------------------------------
page 내장 객체
page 내장 객체는 JSP 페이지 그 자체를 나타내는 객체로 JSP 페이지 내에서 page 객체는 this 키워드 (this : 자바에서 자기 자신을
가리키는 레퍼런스) 로 자기 자신을 참조할 수가 있다. 그리고 page 객체는 javax.servlet.jsp.HttpJspPage 클래스 타입으로 제공되는
JSP 내장 객체이다.
웹 컨테이너는 자바만을 스크립트 언어로 지원하기 때문에 page 객체는 현재 거의 사용되지 않는 내장 객체이다. 그러나 자바 이외의
다른 언어가 사용된다면 page 객체를 참조하는 경우가 발생할 수 있다.
예제
pageTest1.jsp 파일
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR" info="Page 내장 객체 예제"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
<%
String info=this.getServletInfo();
%>
<h2>Page 내장 객체 예제</h2>
page 디렉티브의 info속성값 " <%=info %> " 을 얻어낸다.
</body>
</html>
//-----------------------------------------------------------------------------------------------------------------------
exception 내장 객체
exception 내장 객체 메소드
String getMessage() //발생된 예외의 메시지를 리턴한다.
String toString() //발생된 예외 클래스명과 메시지를 리턴한다.
String printStackTrace() //발생된 예외를 역추적하기 위해 표준 예외 스트림을 출력한다.
exception 내장 객체는 JSP 페이지에서 예외가 발생하였을 경우 예외를 처리할 페이지를 지정하였을 때 예외 페이지에 전달되는
객체이다. exception 객체는 page 디렉티브의 isErrorpage 속성을 true로 지정한 JSP 페이지에서만 사용 가능한 내장 객체로
java.lang.Throwable 객체의 타입이다.
//-----------------------------------------------------------------------------------------------------------------------
댓글을 달아 주세요