CH05 내장객체

Gm·2021년 9월 16일
0

JSP 수업

목록 보기
6/10

내장객체(implicit object)

  • jsp 페이지에서 사용할 수 있도록 jsp 컨테이너에 미리 정의된 객체
  • 스크립틀릿 태그나 표현문 태그에 선언을 하거나 객체를 생성하지 않고도 직접 호출하여 사용 가능

※ 내장객체의 종류

1.request 내장 객체

  • 웹 브라우저의 HTTP 요청 정보를 저장

예제01)

==> 결과

<request1.html>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR"/>
</head>
<body>
<h1>Request Example1</h1>
<FORM METHOD="get" 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="checkbox" name="hobby" value="인터넷">
		여행<input type="checkbox" name="hobby" value="여행"> 
		게임<input type="checkbox" name="hobby" value="게임"> 
		영화<input type="checkbox" name="hobby" value="영화"> 
		운동<input type="checkbox" name="hobby" value="운동"><br/>
<INPUT TYPE="submit" value="보내기">
</FORM>
</body>
</html>

<request1.jsp>

<%@ page contentType="text/html; charset=EUC-KR" isErrorPage="true"%>
<%
	request.setCharacterEncoding("EUC-KR");
	String name = request.getParameter("name");
	String studentNum = request.getParameter("studentNum");
	String gender = request.getParameter("gender");
	String major = request.getParameter("major");
	String hobby[] = request.getParameterValues("hobby");
%>
성명 : <%=name%> <br>
학번 : <%=studentNum%><br>
성별 : <%=gender%><br>
전공 : <%=major%><br>
취미 : <%
	for(int i=0; i<hobby.length; i++){
		out.println(hobby[i] + "&nbsp;");
	}
%>

예제02)

==> 결과
<request2.jsp>

<%@page contentType="text/html; charset=EUC-KR"%>
<%
		request.setCharacterEncoding("EUC-KR");
		String protocol = request.getProtocol();
		String serverName = request.getServerName();
		int port = request.getServerPort();
		String remoteAddr = request.getRemoteAddr(); //게시판에서 글쓴이 ip주소 저장되는 값
		String remoteHost = request.getRemoteHost();
		String method = request.getMethod();
		StringBuffer requestURL = request.getRequestURL();
		String requestURI = request.getRequestURI();
		String query = request.getQueryString();
		String useBrowser = request.getHeader("User-Agent");
		String fileType = request.getHeader("Accept");
%>
프로토콜 : <%=protocol%><p>
서버의 이름 : <%=serverName%><p>
서버의 포트 번호 :<%=port%><p>
사용자 컴퓨터의 주소 : <%=remoteAddr%><p>
사용자 컴퓨터의 이름 : <%=remoteHost%><p>
사용 method : <%=method%><p>
요청 경로(URL) : <%=requestURL%><p>
요청 경로(URI) : <%=requestURI%><p>
query : <%=query%><p>
현재 사용하는 브라우저 : <%=useBrowser%><p>
브라우저가 지원하는 file의 type : <%=fileType%><p>
요청된 조건을 포함한 URL : <%=requestURL + "?" + query%>



2. response 내장 객체

  • 웹 브라우저 http 요청에 대한 응답 정보를 저장

예제01) response.setHeader() 메서드 사용하여 캐시영역에 소멸시키기

<response1.jsp>

<%@ page contentType="text/html; charset=EUC-KR"%>
<%request.setCharacterEncoding("EUC-KR");
	response.sendRedirect("response2.jsp");
%>

<response2.jsp>

<%@ page contentType="text/html; charset=EUC-KR"%>
<%request.setCharacterEncoding("EUC-KR");	
	//캐시영역에 저장이 안됨(이 페이지는 항상 서버 요청을 해야함)
	// 공식처럼 사용됨
	// - 예를들어 로그인 후 페이지를 뒤로가기 클릭 시 아래 공식을 쓰지않으면 로그인 페이지가 유지됨
	// --> 뒤로가기 클릭 시 로그인 유지 소멸 시키기 위해 아래 메서드를 사용 
	response.setHeader("Progma", "no-cache");	
	if(request.getProtocol().equals("HTTP/1.1")){
		response.setHeader("Cache-Control","no-store");
	}
%>
response2.jsp 페이지

예제02) response.sendRedirect 메서드 사용

<%@ page contentType="text/html; charset=EUC-KR"%>
<%request.setCharacterEncoding("EUC-KR");
	response.sendRedirect("http://www.google.com");
%>



3. session 내장 객체

  • 웹 브라우저의 정보를 유지하기 위한 세션 정보를 저장

예제01)

==> 결과

<session2.jsp>

<%@ page contentType="text/html; charset=EUC-KR"%>
<%request.setCharacterEncoding("EUC-KR");
	String season = request.getParameter("season");
	String fruit = request.getParameter("fruit");	
	// id는 세션에서 가져옴. 저장했던 타입으로 가져와야 함
	// 객체 불변의 법칙 : new 연산자로 생성된 객체는 불변
	String id =(String)session.getAttribute("idKey");
	String sessionId = session.getId();
	int intevalTime = session.getMaxInactiveInterval();
	if(id!=null){
%>
<%=id%> 님이 좋아하는 계절과 과일은
<%=season%>과 <%=fruit%> 입니다. <br>
세션ID : <%=sessionId%> <br>
세션 유지 시간 : <%=intevalTime%> 초
<%
	// 세션에 저장된 idKey 값을 제거
	//session.removeAttribute("idKey");
	// 세션 객체 자체를 제거(무효화)
	//session.invalidate();
%>
<%} else{
	out.println("세션의 시간이 경과를 하였거나 다른 이유로 연결을 할 수 없습니다.");
	out.println("<a href='session1.html'>로그인</a>");
}%>

<session1.html>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR"/>
</head>
  <body>
   <h1>Session Example1</h1>
   <FORM METHOD="POST" ACTION="session1.jsp">
   아이디 : <INPUT NAME="id" value="aaa"><p>
   비밀번호 : <INPUT TYPE="password" NAME="pwd" value="0000"><p/>
   <INPUT TYPE="submit" VALUE="로그인">   
   </FORM>
  </body>
</html>

<session1.jsp>

<%@ page contentType="text/html; charset=EUC-KR"%>
<%request.setCharacterEncoding("EUC-KR");
	String id = request.getParameter("id");
	String pwd = request.getParameter("pwd");	
	// db연동
	// 세션이라는 저장 공간에 키 값이 idKey로 id를 저장
	session.setAttribute("idKey", id);	
	// 세션의 생명 주기 : 기본 30분
	session.setMaxInactiveInterval(2*60); // 2분	
%>
<FORM METHOD="POST" ACTION="session2.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>



4. application 내장 객체

  • 웹 어플리케이션의 콘텍스트 정보를 저장

예제01)

==> 결과

<application.jsp>

<%@ page contentType="text/html; charset=EUC-KR"%>
<%
	request.setCharacterEncoding("EUC-KR");
	String realPath = application.getRealPath("/");
	// 저장공간의 영역 크기 application > session > request > page
	application.setAttribute("aaa", "테스트");	
%>
서블릿 컨테이너 이름과 버전 <%=application.getServerInfo() %> <br>
로컬파일 시스템 경로 <%=realPath%> <br>
aaa : <%=application.getAttribute("aaa") %>



5. exception 내장 객체

  • jsp 페이지의 예외 발생을 처리

예제01)

- <%@ errorPage="error.jsp" 페이지 작성
- 에러코드 작성

==> 결과

<exception.jsp>

<%@ page contentType="text/html; charset=EUC-KR" errorPage="error.jsp"%>
<%request.setCharacterEncoding("EUC-KR");
	int num = Integer.parseInt("aaa");
%>
exception1.jsp

<error.jsp>

<%@ page contentType="text/html; charset=EUC-KR" isErrorPage="true"%>
<%request.setCharacterEncoding("EUC-KR");
	String msg = exception.getMessage();
	String obj = exception.toString();
%>
에러 메세지 : <%=msg%> <br>
에러 내용 : <%=obj%>

0개의 댓글