위 글은 해당 카테고리의 수업 강의 자료를 정리한 것입니다.
1. 내부 객체
1.1 정의
- JSP 페이지를 작성할 때 특별한 기능을 제공하는 JSP 컨테이너가 제공하는 특별한 객체
- JSP에서 선언하지 않고 사용할 수 있는 객체
- 스크립트 요소에서 내부 객체와 동일한 변수명으로 선언할 수 없음
- 사용되는 범주에 따라 4가지 형태로 분류
- JSP 페이지 입출력 관련 내부 객체
- JSP 페이지 외부 환경 정보 제공 내부 객체
- JSP 페이지 서블릿 관련 내부 객체
- JSP 페이지 예외 관련 기본 객체
1.2 종류
- request, session, application, pageContext 내부 객체는 임의의 속성 값을 저장하고 읽을 수 있는 메소드를 제공함
2. request 내부 객체
- request 내부 객체는 브라우저에서 JSP 페이지로 전달되는 데이터의 묶음으로 HTTP 헤더와 HTTP 바디로 구성됨
예제: 입력폼에서 받은 데이터 처리하기
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
</head>
<body>
<h1>Request Example1</h1>
<form method="post" action="request1.jsp">
성명 : <input name="name"><br/>
학번 : <input name="studentNum"><br/>
성별 : 남자 <input type="radio" name="gender" value="man" checked>
여자 <input type="radio" name="gender" value="woman"><br/>
전공 : <select name="major">
<option selected value="국문학과">국문학과</option>
<option value="영문학과">영문학과</option>
<option value="수학과">수학과</option>
<option value="정치학과">정치학과</option>
<option value="체육학과">체육학과</option>
</select><br/>
<input type="submit" value="보내기">
</form>
</body>
</html>
<%@ page contentType="text/html;charset=UTF-8"%>
<%
request.setCharacterEncoding("UTF-8");
String name = request.getParameter("name");
String studentNum = request.getParameter("studentNum");
String gender = request.getParameter("gender");
String major = request.getParameter("major");
if(gender.equals("man")){
gender = "남자";
}else{
gender = "여자";
}
%>
<h1>Request Example1</h1>
성명 : <%=name%><p/>
학번 : <%=studentNum%><p/>
성별 : <%=gender%><p/>
학과 : <%=major%>
예제2: 웹 브라우저와 웹 서버의 정보 반환하기
<%@ page contentType="text/html;charset=UTF-8"%>
<%
String protocol = request.getProtocol();
String serverName = request.getServerName();
int serverPort = request.getServerPort();
String remoteAddr = request.getRemoteAddr();
String remoteHost = request.getRemoteHost();
String method = request.getMethod();
StringBuffer requestURL = request.getRequestURL();
String requestURI = request.getRequestURI();
String useBrowser = request.getHeader("User-Agent");
String fileType = request.getHeader("Accept");
%>
<h1>Request Example2</h1>
프로토콜 : <%=protocol%><p/>
서버의 이름 : <%=serverName%><p/>
서버의 포트 번호 :<%=serverPort%><p/>
사용자 컴퓨터의 주소 : <%=remoteAddr%><p/>
사용자 컴퓨터의 이름 : <%=remoteHost%><p/>
사용 method : <%=method%><p/>
요청 경로(URL) : <%=requestURL%><p/>
요청 경로(URI) : <%=requestURI%><p/>
현재 사용하는 브라우저 : <%=useBrowser%><p/>
브라우저가 지원하는 file의 type : <%=fileType%><p/>
3. response 내부 객체
- response 내부 객체는 요청을 시도한 클라이언트로 전송할 응답을 나타내는 데이터의 묶음
예제: sendRedirect와 Cache를 사용하지 않기
<h1>Response Example1</h1>
<%
response.sendRedirect("response1_1.jsp");
%>
<h1>Response Example1</h1>
<h1>Response Example1</h1>
<h1>Response Example1</h1>
<h1>Response Example1</h1>
<h1>Response Example1</h1>
<h1>Response Example1</h1>
<h1>Response Example1</h1>
<%@ page contentType="text/html;charset=UTF-8"%>
<%
request.setCharacterEncoding("UTF-8");
String season = request.getParameter("season");
String fruit = request.getParameter("fruit");
String id = (String)session.getAttribute("idKey");
String sessionId = session.getId();
int intervalTime = session.getMaxInactiveInterval();
if(id != null){
%>
<h1>Session Example1</h1>
<b><%=id%></b>님이 좋아하시는 계절과 과일은<p/>
<b><%=season%></b>과 <b><%=fruit%></b> 입니다.<p/>
세션 ID : <%=sessionId%><p>
세션 유지 시간 : <%=intervalTime%>초<p/>
<%
session.invalidate();
}else{
out.println("세션의 시간이 경과를 하였거나 다른 이유로 연결을 할 수가 없습니다.");
}
%>
4. out 내부 객체
- out 내부 객체는 JSP 페이지의 결과를 클라이언트에 전송해주는 출력 스트림을 나타내며 JSP 페이지가 클라이언트에게 보내는 모든 정보는 out 객체를 통해 전달됨
예제: JSP 페이지의 buffer 상태를 출력하기
<%@ page contentType="text/html;charset=UTF-8"
buffer="5kb"
%>
<%
int totalBuffer = out.getBufferSize();
int remainBuffer = out.getRemaining();
int useBuffer = totalBuffer - remainBuffer;
%>
<h1>Out Example1</h1>
<b>현재 페이지의 Buffer 상태</b><p/>
출력 Buffer의 전체 크기 : <%=totalBuffer%>byte<p/>
남은 Buffer의 크기 : <%=remainBuffer%>byte<p/>
현재 Buffer의 사용량 : <%=useBuffer%>byte<p/>
5. session 객체
- session 내부 객체는 클라이언트 요청에 대한 context 정보의 세션과 관련된 정보(데이터)를 저장하고 관리하는 객체
예제: 세션을 이용한 아이디와 비밀번호 입력하기
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
</head>
<body>
<h1>Session Example1</h1>
<form method="post" action="session1.jsp">
아이디 : <input name="id"><p>
비밀번호 : <input type="password" name="pwd"><p/>
<input type="submit" value="로그인">
</form>
</body>
</html>
<%@ page contentType="text/html;charset=UTF-8"
session="true"
%>
<%
request.setCharacterEncoding("UTF-8");
String id = request.getParameter("id");
String pwd = request.getParameter("pwd");
session.setAttribute("idKey",id);
session.setMaxInactiveInterval(2*60);
%>
<h1>Session Example1</h1>
<form method="post" action="session1_1.jsp">
1.가장 좋아하는 계절은?<br/>
<input type="radio" name="season" value="봄">봄
<input type="radio" name="season" value="여름">여름
<input type="radio" name="season" value="가을">가을
<input type="radio" name="season" value="겨울">겨울<p/>
2.가장 좋아하는 과일은?<br/>
<input type="radio" name="fruit" value="watermelon">수박
<input type="radio" name="fruit" value="melon">멜론
<input type="radio" name="fruit" value="apple">사과
<input type="radio" name="fruit" value="orange">오렌지<p/>
<input type="submit" value="결과보기">
</form>
<%@ page contentType="text/html;charset=UTF-8"%>
<%
request.setCharacterEncoding("UTF-8");
String season = request.getParameter("season");
String fruit = request.getParameter("fruit");
String id = (String)session.getAttribute("idKey");
String sessionId = session.getId();
int intervalTime = session.getMaxInactiveInterval();
if(id != null){
%>
<h1>Session Example1</h1>
<b><%=id%></b>님이 좋아하시는 계절과 과일은<p/>
<b><%=season%></b>과 <b><%=fruit%></b> 입니다.<p/>
세션 ID : <%=sessionId%><p>
세션 유지 시간 : <%=intervalTime%>초<p/>
<%
session.invalidate();
}else{
out.println("세션의 시간이 경과를 하였거나 다른 이유로 연결을 할 수가 없습니다.");
}
%>
6. application 내부 객체
- application 내부 객체는 서블릿 또는 어플리케이션 외부 환경 정보 (Context)를 나타내는 객체로 서버의 정보와 자원, 이벤트 로그 같은 정보를 제공함
예제: 서블릿과 application 정보를 출력하는 예제
<%@ page contentType="text/html;charset=UTF-8"%>
<%
String serverInfo = application.getServerInfo();
String mimeType = application.getMimeType("request1.html");
String realPath = application.getRealPath("/");
application.log("application 내부 객체 로그 테스트");
%>
<h1>Application Example1</h1>
서블릿 컨테이너의 이름과 버전 : <%=serverInfo%><p/>
request1.html의 MIME Type : <%=mimeType%><p/>
로컬 파일 시스템 경로 : <%=realPath%>
7. pageContext 내부 객체
- pageContext 내부 객체는 현재 JSP 페이지의 Context를 나타내면 pageContext 객체를 통해서 다른 내부 객체에 접근할 수 있음
8. page 내부 객체
- page 내부 객체는 JSP 페이지 그 자체를 나타내는 객체로 JSP 페이지 내에서 this로 참조할 수 있음
예제: 페이지의 info 속성 값을 반환하기
<%@ page info = "12345252345"
contentType="text/html;charset=UTF-8"%>
<%
String pageInfo = this.getServletInfo();
%>
<h1>Page Example1</h1>
현재 페이지의 info값 : <%=pageInfo%>
9. config 내부 객체
- config 내부 객체에는 javax.servlet.ServletConfig 클래스 타입으로 Servlet이 초기화 될 때 참조해야 할 다른 여러 정보를 가지고 있음
10. exception 내부 객체
- exception 내부 객체는 개발자가 JSP 페이지에서 발생한 예외를 처리하는 페이지를 지정할 경우 에러 페이지를 전달하는 예외 객체
- page 지시자의 isErrorPage 속성을 true로 지정한 JSP 페이지만 사용 가능한 객체이고 예외 처리를 설정한 JSP 페이지에는 errorPage 속성에 예외처리 페이지를 설정해야 함
예제: 의도적으로 예외를 발생시켜 예외처리하기
<%@ page contentType="text/html;charset=UTF-8"
errorPage="exception2.jsp"
%>
<%
int one = 1;
int zero = 0;
String [] s= {"0","1"};
%>
<h1>Exception Example1</h1>
one / zero = <%=s[2]%><p/>
<%@ page contentType="text/html;charset=UTF-8"
isErrorPage="true"
%>
<%
String message = exception.getMessage();
String objectMessage = exception.toString();
%>
에러 메세지 : <b><%=message%></b><p/>
에러 실체의 클래스명과 에러 메세지 : <b><%=objectMessage%></b><p/>
'강의 > KOSTA' 카테고리의 다른 글
[JSP/Servlet] JSP and JavaBeans (Day22) (0) | 2022.04.04 |
---|---|
[JSP/Servlet] Servlet Basic Syntax (Day22) (0) | 2022.04.04 |
[JSP/Servlet] JSP Directives and Action tags (Day22) (0) | 2022.04.04 |
[JSP/Servlet] How to JSP works and Servlet (Day21) (0) | 2022.04.04 |
[JSP/Servlet] Understanding Web programming (Day21) (0) | 2022.04.04 |