Devlog
article thumbnail

위 글은 해당 카테고리의 수업 강의 자료를 정리한 것입니다.

 

 

 

1. 내부 객체

1.1 정의

  • JSP 페이지를 작성할 때 특별한 기능을 제공하는 JSP 컨테이너가 제공하는 특별한 객체
  • JSP에서 선언하지 않고 사용할 수 있는 객체
  • 스크립트 요소에서 내부 객체와 동일한 변수명으로 선언할 수 없음
  • 사용되는 범주에 따라 4가지 형태로 분류
    • JSP 페이지 입출력 관련 내부 객체
    • JSP 페이지 외부 환경 정보 제공 내부 객체
    • JSP 페이지 서블릿 관련 내부 객체
    • JSP 페이지 예외 관련 기본 객체

 

1.2 종류

JSP 페이지의 내부 객체

  • request, session, application, pageContext 내부 객체는 임의의 속성 값을 저장하고 읽을 수 있는 메소드를 제공함

내부 객체의 속성을 저장하고 읽어내는 공통 메소드

 

2. request 내부 객체

  • request 내부 객체는 브라우저에서 JSP 페이지로 전달되는 데이터의 묶음으로 HTTP 헤더와 HTTP 바디로 구성됨

request 내부 객체의 요청 파라미터 메소드
request 내부 객체의 클라이언트 정보 메소드

 

 

예제: 입력폼에서 받은 데이터 처리하기

<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 내부 객체는 요청을 시도한 클라이언트로 전송할 응답을 나타내는 데이터의 묶음

request 내부 객체의 메소드

 

예제: 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 객체를 통해 전달됨

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 정보의 세션과 관련된 정보(데이터)를 저장하고 관리하는 객체

session 내부 객체의 메소드

 

예제: 세션을 이용한 아이디와 비밀번호 입력하기

<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 내부 객체의 메소드

 

예제: 서블릿과 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 객체를 통해서 다른 내부 객체에 접근할 수 있음

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이 초기화 될 때 참조해야 할 다른 여러 정보를 가지고 있음

config 내부 객체의 메소드

 

10. exception 내부 객체

  • exception 내부 객체는 개발자가 JSP 페이지에서 발생한 예외를 처리하는 페이지를 지정할 경우 에러 페이지를 전달하는 예외 객체
  • page 지시자의 isErrorPage 속성을 true로 지정한 JSP 페이지만 사용 가능한 객체이고 예외 처리를 설정한 JSP 페이지에는 errorPage 속성에 예외처리 페이지를 설정해야 함

exception 내부 객체의 메소드

 

예제: 의도적으로 예외를 발생시켜 예외처리하기

<%@ 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/>

profile

Devlog

@덩이

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

검색 태그