Download presentation
Presentation is loading. Please wait.
1
8장. 기본 객체와 영역 제8장
2
1. JSP 기본 객체 소개 JSP가 변환된 Servlet 코드 제8장 package org.apache.jsp.ch02;
import javax.servlet.*; import javax.servlet.http.*; import javax.servlet.jsp.*; public final class helloworld_jsp extends org.apache.jasper.runtime.HttpJspBase implements org.apache.jasper.runtime.JspSourceDependent { ... 중간 생략 ... public void _jspInit() { } public void _jspDestroy() { public void _jspService(HttpServletRequest request, HttpServletResponse response) throws java.io.IOException, ServletException { PageContext pageContext = null; HttpSession session = null; ServletContext application = null; ServletConfig config = null; JspWriter out = null; Object page = this; ... 중간 생략 … 제8장
3
1. JSP 기본 객체 소개 JSP가 변환된 Servlet 코드 (계속)
기본 객체는 JSP가 Servlet으로 자동 변환된 코드 내에서 _jspService 메소드 내에 선언된 파라미터 및 변수들이다. 즉, JSP에서 별도의 선언 및 생성 없이 바로 활용할 수 있는 객체이다. try { ... 중간 생략 ... pageContext = _jspxFactory.getPageContext(this, request, response, null, true, 8192, true); application = pageContext.getServletContext(); config = pageContext.getServletConfig(); session = pageContext.getSession(); out = pageContext.getOut(); } catch (Throwable t) { } 제8장
4
1. JSP 기본 객체 소개 JSP 기본 객체 리스트 제8장
참조 기본 객체 자바 클래스 주요 역할 request javax.servlet.http.HttpServletRequest HTML 폼 요소의 선택 값 등 사용자 입력 정보를 읽어올 때 사용 response javax.servlet.http.HttpServletResponse 사용자 요청에 대한 응답을 처리하기 위해 사용 pageContext javax.servlet.http.PageContext 각종 기본객체를 얻거나 forward 및 include 기능을 활용할 때 사용 session javax.servlet.http.HttpSession 클라이언트에 대한 세션 정보를 처리하기 위해 사용 application javax.servlet.ServletContext 웹 서버의 애플리케이션 처리와 관련된 정보를 레퍼런스하기 위해 사용 out javax.servlet.jsp.JspWriter 사용자에게 전달하기 위한 output 스트림을 처리 config javax.servlet.ServletConfig 현재 JSP에 대한 초기화 환경을 처리하기 위해 사용 page java.lang.Object 현재 JSP 페이지에 대한 참조 변수 제8장
5
getParameter(String name) getParameterValues(String name)
2. request 기본 객체 request 기본 객체 HTML 폼을 통해 전달되는 값을 가져오거나 HTTP 요청 자체에 담겨 있는 정보를 가져올 때 사용한다. request 기본 객체의 주요 메소드 메소드 리턴 타입 설명 getParameterNames() Enumeration 현재 요청에 포함된 파라미터의 이름을 Enumeration (열거) 형태로 넘겨준다. getParameter(String name) String 문자열 name과 같은 이름을 가진 파라미터의 값을 가져온다. getParameterValues(String name) String[] 문자열 name과 같은 이름을 가진 파라미터의 값을 배열 형태로 가져온다. checkbox, multiple list 등에 주로 사용한다. getCookies() Cookie[] 모든 쿠키 값을 javax.servlet.http.Cookie의 배열 형태로 가져온다. getMethod() 현재 요청이 GET, POST인지 가져온다. getSession() HttpSession 현재 세션 객체를 가져온다. getRemoteAddr() 클라이언트의 IP 주소를 가져온다. getProtocol() 요청 프로토콜 및 버전 정보를 문자열 형태로 알려준다. 일반적으로 "HTTP/1.1"이 리턴된다. 제8장
6
setCharacterEncoding() getHeader(String name)
2. request 기본 객체 request 기본 객체의 주요 메소드(계속) 메소드 리턴 타입 설명 getServerName() String 요청을 받은 서버의 호스트 이름이 리턴된다. getServerPort() int 요청을 받은 서버의 포트 번호가 리턴된다. getRequestURI() 요청 URL 중 호스트 이름 이후의 내용이 리턴 된다. 쿼리 스트링 내용은 리턴되지 않는다. getRequestURL() StringBuffer 요청 URL이 리턴된다. 쿼리 스트링 내용은 리턴되지 않는다. getQueryString() 요청 URL 중 쿼리 스트링이 리턴된다. getContextPath() 요청에 대한 컨텍스트 패스 정보가 리턴된다. 컨텍스트 패스 정보는 웹 어플리케이션의 이름을 포함하며 getRequestURI()가 돌려주는 정보의 처음에 위치한다. 항상 "/"로 시작한다. setCharacterEncoding() 현재 JSP로 전달되는 내용을 지정한 캐릭터셋으로 변환해준다. HTML 폼에서 한글 입력 시 정상적으로 처리해주려면 반드시 필요하다. getHeader(String name) Enumeration 문자열 name으로 지정된 헤더 정보를 문자열로서 얻어온다. 제8장
7
2. request 기본 객체 Form 데이터 받아서 처리하기
[예제 8.1-1] jspbook\ch08\request_form.jsp 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 <html> <head> <meta http-equiv="Content-Type" content="text/html;charset=utf-8"> <title>Request Test Form</title> </head> <body> <center> <h2>Request Test Form</h2> <hr> <form method="get" action="request_result.jsp"> <table border=1 cellspacing="1" cellpadding="5"> <tr><td>이름</td><td><input type="text" size="10" name="username"></td></tr> <tr><td>학년</td> <td> <select name="degree"> <option selected>1학년</option> <option>2학년</option> <option>3학년</option> 제8장
8
2. request 기본 객체 Form 데이터 받아서 처리하기 (계속)
[예제 8.1-1] jspbook\ch08\request_form.jsp 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 <option>4학년</option> </select> </td> </tr> <tr><td>관심분야</td> <td> <input type="checkbox" name="favorite" value="사회">사회</input> <input type="checkbox" name="favorite" value="경제">경제</input> <input type="checkbox" name="favorite" value="정보통신">정보통신</input> <tr> <td colspan="2" align="center"> <input type="submit" value="확인"><input type="reset" value="취소"></td> </table> </form> </body> </html> 제8장
9
2. request 기본 객체 Form 데이터 받아서 처리하기
[예제 8.1-2] jspbook\ch08\request_result.jsp 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 page contentType="text/html;charset=utf-8"%> <% request.setCharacterEncoding("utf-8"); %> <html> <head><title>Request Form 처리</title></head> <body> <center> <h2>Request Form 처리 - 1</h2> <hr> <table border=1 cellspacing="1" cellpadding="5"> <tr><td>이름</td><td><%=request.getParameter("username")%></td></tr> <tr><td>직업</td><td><%=request.getParameter("degree")%></td></tr> <tr><td>관심분야</td> <td> <% String favorites[] = request.getParameterValues("favorite"); for(int i=0; i<favorites.length;i++) { out.println(favorites[i]+"<BR>"); } for(String favorite:favorites) { out.println(favorite+"<BR>"); %> </td> </tr> //배열의 크기만큼 루프를 돌면서 값을 출력함. // 배열의 크기만큼 루프를 돌면서 값을 출력함. // Java 5에서 새로 제시된 for 루프 코드. // Java 5에서 새로 제시된 for 루프 코드: 배열값을 출력 제8장
10
2. request 기본 객체 Form 데이터 받아서 처리하기 (계속)
[예제 8.1-2] jspbook\ch08\request_result.jsp 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 </table> <hr> <h2>Request Form 처리 - 2</h2> <table border=0><tr><td> 1. 클라이언트 IP 주소: <%= request.getRemoteAddr() %> <br/> 2. 요청 메서드: <%= request.getMethod() %> <br/> 3. 프로토콜: <%= request.getProtocol() %> <br/> 4. 서버 호스트 이름: <%= request.getServerName() %> <br/> 5. 서버 포트: <%= request.getServerPort() %> <br/> 6. 요청 URI: <%= request.getRequestURI() %> <br/> 7. 요청 URL: <%= request.getRequestURL() %> <br/> 8. 요청 URL중 쿼리 스트링: <%= request.getQueryString() %> <br/> 9. 컨텍스트 패스 정보: <%= request.getContextPath() %> <br/> 10. Referer: <%= request.getHeader("referer") %> </td></tr> </center> </body> </html> 제8장
11
2. request 기본 객체 Form 데이터 받아서 처리하기 (계속) request.getHeader("referer")
"referer"의 의미는 본 페이지 (request_result.jsp)를 보기 직전의 페이지 (request_form.html)를 의미 제8장
12
3. response 기본 객체 response 기본 객체 response 기본 객체의 주요 메소드
사용자 요청에 대한 응답을 처리하기 위해 사용한다. response 기본 객체의 주요 메소드 메소드 리턴 타입 설명 setContentType(String type) void 문자열 형태의 type에 저장된 MIME Type으로 contentType을 설정한다. setHeader(String name, String value) 문자열 name의 이름으로 문자열 value의 값을 헤더로 설정한다. setDateHeader(String name, String value) 문자열 name의 이름으로 설정된 밀리세컨드 시간 값을 date에 지정하여 응답 헤더에 설정한다. sendError(int status, String msg) 오류 코드를 세팅하고 메시지를 보낸다. sendRedirect(url) 클라이언트 요청을 다른 페이지로 보낸다. getOutputStream() ServletOutputStream Binary Data 출력이 가능한 스트림을 얻어온다. 제8장
13
3. response 기본 객체 MIME Type을 헤더 정보로서 전달 이미지 출력과 setContentType() 메소드
setContentType() 메소드를 사용하면 page 지시문에서 contentType을 활용하여 MIME Type을 헤더 정보로서 전달되는 것과 같은 효과를 낼 수 있다. 이미지 파일등을 내보낼 때에 setContentType() 메소드를 활용하여 현재 브라우저로 보내는 내용의 형식을 정확하게 알려주기도 한다. 이미지 출력과 setContentType() 메소드 jsp.jpg 파일의 위치 제8장
14
3. response 기본 객체 이미지 출력과 setContentType() 메소드 (계속)
[예제 8.2] jspbook\ch08\image.jsp 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 page import="java.io.*" %> <% try { response.setContentType("image/jpeg"); // ContentType이 jpeg 이미지임을 설정 response.addHeader("Content-Transfer-Encoding", "binary"); // 전달 내용이 binary임을 설정 String filename = application.getRealPath("/") + "ch08\\images\\jsp.jpg"; FileInputStream fis = new FileInputStream(filename); BufferedOutputStream bos = new BufferedOutputStream(response.getOutputStream()); // response 객체에서 Binary Data 출력을 담당하는 OutputStream 객체를 얻음 byte[] buff = new byte[1024]; for (int i=0; (i = fis.read(buff)) != -1; ){ bos.write(buff,0,i); } bos.flush(); } catch(IOException e) { response.setContentType("text/html;charset=utf-8"); out.println("Error :" + e.getMessage()); %> 제8장
15
3. response 기본 객체 이미지 출력과 setContentType() 메소드 (계속) image.jsp의 동작 과정
제8장
16
3. response 기본 객체 페이지 재요청과 sendRedirect() 메소드
[예제 8.3] jspbook\ch08\redirect.jsp 01 02 03 04 page contentType="text/html;charset=utf-8"%> <% response.sendRedirect(" %> 제8장
17
3. response 기본 객체 응답 헤더 설정 브라우저로 하여금 페이지 내용을 자신의 로컬 메모리 및 하드디스크에 캐쉬 (Cache) 하지 말라고 명령하는 응답 헤더 설정 방법 위와 같은 내용이 있는 JSP 페이지는 요청 이후에도 캐쉬가 되지 않으며 위 페이지 요청 시에는 항상 서버로부터 다시 내용을 얻어온다. <% // HTTP 1.1 response.setHeader("Cache-Control","no-cache"); // HTTP 1.0 response.setHeader("Pragma","no-cache"); response.setHeader("Expires","0"); %> 제8장
18
4. out 기본 객체 out 기본 객체 out 기본 객체의 주요 메소드 서버에서 브라우저로 출력을 담당하는 기본 객체 제8장
리턴 타입 설명 getBufferSize() int 출력 버퍼의 크기를 Byte 단위로 알려준다. getRemaining() 출력 버퍼의 크기 중 남아 있는 사용 가능한 크기를 Byte 단위로 알려준다. clear() void 버퍼에 있는 콘텐츠를 모두 지운다. 만약 이 메소드가 불리워지기 전에 버퍼가 가득차서 한번이라도 비워진 적이 있다면 Exception 예외가 발생한다. clearBuffer() 버퍼에 있는 콘텐츠를 모두 지운다. 버퍼가 가득차서 비워진 적이 있더라도 Exception 예외가 발생하지 않는다. flush() 버퍼를 비우고 출력 스트림을 통하여 브라우저로 전체 내용을 보낸다. isAutoFlush() boolean 버퍼가 다 찼을 때 자동으로 flush 된다면 true를 리턴 한다. page 지시문의 autoFlush 속성이 true 라면 이 메소드도 true를 리턴 한다. (6장의 6.1.6절 참조) close() output stream을 닫고 버퍼를 비운다. println(content) content의 내용을 newline과 함께 출력한다. print(conten) content의 내용을 출력한다. 제8장
19
4. out 기본 객체 buffer 관련 예제 [예제 8.4] jspbook\ch08\out.jsp 01 02 03 04 05
06 07 08 09 10 11 12 13 14 15 16 page contentType="text/html;charset=utf-8"%> <html> <head><title>out 기본 객체 사용</title></head> <body> 1. out.print를 통한 출력 : <% out.print("print"); %> <br/> 2. 설정된 버퍼크기 : <%= out.getBufferSize() %> <br/> 3. 남아있는 버퍼크기 : <%= out.getRemaining() %> <br/> <% out.flush(); %> 4. flush 후 남아있는 버퍼크기 : <%= out.getRemaining() %> <br/> 5. out.print를 통한 출력 : <% out.print("print"); %> <br/> <% out.clear(); %> 6. clear 후 남아있는 버퍼크기 : <%= out.getRemaining() %> <br/> <% out.close(); %> 7. close 후 남아있는 버퍼크기 : <%= out.getRemaining() %> <br/> </body> </html> 제8장
20
4. out 기본 객체 buffer 관련 예제 이전 예제 수행 결과에서 ‘소스보기’
out.isAutoFlush() 메소드는 다음 지시문과 관련된다. autoFlush가 false로 지정되어 있다면 버퍼가 가득차게 될 때 java.io.IOException 발생시키고 JSP 페이지 수행 작업을 중지 6장 참조 <html> <head><title>out 기본 객체 사용</title></head> <body> 1. out.print를 통한 출력 : print <br/> 2. 설정된 버퍼크기 : 8192 <br/> 3. 남아있는 버퍼크기 : 8056 <br/> <% page autoFlush="false" %> 제8장
21
5. session 기본 객체 비연결형 (stateless) 프로토콜 HTTP의 한계
한 웹 페이지가 출력된 다음에는 클라이언트와 서버의 연결(TCP connection)이 끊어진다. 한번 로그인한 사용자가 로그아웃할 때까지 보관해야 할 정보가 있다면 이러한 비연결형 HTTP 프로토콜로만으로는 곤란 사용자의 ‘login – logout 기간’을 어떻게 유지할 것인가: session session과 cookie는 위와 같은 기능을 제공할 수 있는 방법 Session: 사용자 request 정보를 서버(Tomcat)에 보관하는 기본 객체 Cookie: 사용자 정보를 response하여 클라이언트(Browser)의 파일에 보관 Session이 Cookie보다 보안문제에 유리 session이 사용되는 경우 한 사용자 로그인 후 일정 시간이 지나거나, 다른 페이지로 넘어가서도 같은 사용자가 여전히 로그인이 되어 있음을 판단할 때 쇼핑몰에서 장바구니 기능을 구현 (한 사용자가 여러 페이지의 물품을 구입) 한 사용자가 어떤 페이지를 다녀갔는지 등 웹 페이지 트래킹 기능을 구현할 때 개인화(personalized) 홈페이지 구현: 각 사용자 정보 보관 제8장
22
5. session 기본 객체 session 기본 객체의 주요 메소드 (javax.servlet.http.HttpSession) 메소드 리턴 타입 설명 isNew() boolean session이 처음으로 생성되었다면 true를 리턴한다. getId() String 각 접속에 대한 session 고유의 ID를 문자열 형태로 리턴 getCreationTime() long session이 생성된 시간을 January 1, 1970 GMT.부터 long형 밀리세컨드 값으로 리턴한다. getLastAccessedTime() 현재 session으로 마지막 작업한 시간을 long형 밀리세컨드 값으로 리턴한다. getMaxInactiveInterval() int session의 유지시간을 초로 반환한다. 즉 session의 유효시간을 알 수 있다. setMaxInactiveInterval(int t) void session의 유효시간을 t 초로 설정한다. invaildate() 현재 session을 종료한다. session과 관련된 값들은 모두 지워진다. 제8장
23
5. session 기본 객체 session 기본 객체의 활용
[예제 8.5-1] jspbook\ch08\session1.jsp 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 page contentType="text/html;charset=utf-8"%> page import="java.util.Date" %> // 밀리세컨드 시각값을 일시로 변환 <html> <head><title>session 기본 객체 예제-1</title></head> <body> <% if(session.isNew()) { //session이 처음으로 생성된 것인지 확인 out.println("NEW <br/>"); out.println("Session ID: " + session.getId() + "<br/>"); out.println("Creation Time: " + new Date(session.getCreationTime()) + "<br/>"); out.println("Last Access Time: " + new Date(session.getLastAccessedTime()) + "<br/>"); out.println("Max Inactive Interval: " + session.getMaxInactiveInterval() + "<br/>"); } else { // 기본 유효시간 1800초(30분) 동안 inactive하면 session종료 out.println("OLD <br/>"); } %> </body> </html> 제8장
24
5. session 기본 객체 Session 기본 객체의 활용
Sesseion 객체가 최초로 생성되는 시점은 브라우저가 임의의 웹 애플리케이션에 최초로 접속할 때이다. session1.jsp 수행 화면 session1.jsp를 처음 수행이후 1,800초 이내에 같은 브라우저에서 "새로고침“, 혹은 *.jsp를 다시 수행한 화면 (다른 브라우저에서 접속하면 다시 NEW session이 생성됨) 제8장
25
5. session 기본 객체 처음에 session과 함께 웹페이지를 개발할 때에는 setMaxInactiveInterval() 메소드를 활용해서 다음과 같이 10초 정도의 세션 유효 시간을 설정하는 것이 좋다. 유효시간이 지난 상황을 빨리 파악하기 위함 개발이 완료된 이후에는 다시 원래대로 다음과 같이 유효시간을 30분 또는 적절한 값으로 돌려놓아야 한다. session.setMaxInactiveInterval(10); session.setMaxInactiveInterval(1800); 제8장
26
5. session 기본 객체 session 기본 객체의 활용
[예제 8.5-2] jspbook\ch08\session2.jsp 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 page contentType="text/html;charset=utf-8"%> page import="java.util.Date" %> <html> <head><title>session 기본 객체 예제-2</title></head> <body> <% if(session.isNew()) { // session이 처음으로 생성된 것인지 확인 out.println("NEW <br/>"); } else { out.println("OLD <br/>"); out.println("Session ID: " + session.getId() + "<br/>"); out.println("Creation Time: " + new Date(session.getCreationTime()) + "<br/>"); out.println("Last Access Time: " + new Date(session.getLastAccessedTime()) + "<br/>"); out.println("Max Inactive Interval: " + session.getMaxInactiveInterval() + "<br/>"); session.invalidate(); // invalidate() 메소드를 이용해서 session을 삭제 } %> </body> </html> 제8장
27
5. session 기본 객체 session 기본 객체의 활용
session1.jsp 수행 후에 session2.jsp 수행: 그 브라우저의 session 객체가 이미 생성되어 있음 invalidate() 메소드를 사용하여 생성된 session 객체가 삭제된 후 다시 실행 session2.jsp 수행 화면 session2.jsp 수행 후 새로고침한 화면 제8장
28
getInitParameterNames() getInitParameter(String name)
6. config 기본 객체 config 기본 객체 서로 독립적인 파일로 구성된 JSP나 Servlet마다 config 기본 객체가 별도로 대응되어 생성된다. config 기본 객체의 주요 메소드 메소드 리턴 타입 설명 getInitParameterNames() Enumeration 초기 파라미터 값들의 설정 이름을 Enumeration 객체로 리턴한다. getInitParameter(String name) String 문자열 name에 해당하는 초기 파라미터 값을 리턴한다. getServletContext() ServletContext javax.servlet.ServletContext 기본 객체를 리턴한다. 제8장
29
6. config 기본 객체 config를 사용한초기 파라미터 처리 XML 문서에 초기 파라미터 설정
[예제 8.6-1] jspbook\WEB-INF\web.xml <?xml version="1.0" encoding="utf-8"?> <web-app xmlns=" xmlns:xsi=" xsi:schemaLocation=" version="2.5"> <!-- 기존 내용 --> <!-- 아래의 내용만 삽입 --> <servlet> <servlet-name>readInitParamJSP</servlet-name> <jsp-file>/ch08/readInitParam.jsp</jsp-file> <init-param> <param-name> </param-name> </init-param> 제8장
30
6. config 기본 객체 config를 사용한초기 파라미터 처리 XML 문서에 초기 파라미터 설정 (계속)
[예제 8.6-1] jspbook\WEB-INF\web.xml <init-param> <param-name> Host</param-name> <param-value> </param-value> </init-param> <param-name>webMaster</param-name> <param-value>홍길동</param-value> </servlet> <servlet-mapping> <servlet-name>readInitParamJSP</servlet-name> <url-pattern>/ch08/readInitParam.jsp</url-pattern> </servlet-mapping> <!-- 삽입 끝 --> </web-app> 제8장
31
6. config 기본 객체 config를 사용한초기 파라미터 처리 web.xml 내의 JSP 페이지 관련 내용 설정법 제8장
32
6. config 기본 객체 config를 사용한초기 파라미터 처리
[예제 8.6-2] jspbook\ch08\readInitParam.jsp 01 02 03 04 05 06 07 08 09 10 11 12 13 14 page contentType="text/html;charset=utf-8"%> <html> <head><title>JSP에서 초기 파라미터 값 읽어오기</title></head> <body> <%! // 선언 부분 String Host = null; String webMaster = null; public void jspInit() { ServletConfig myConfig = getServletConfig(); Host = myConfig.getInitParameter(" Host"); webMaster = myConfig.getInitParameter("webMaster"); } %> // 초기 파라미터 Host와 webMaster 값 얻어옴 제8장
33
6. config 기본 객체 config를 사용한초기 파라미터 처리
[예제 8.6-2] jspbook\ch08\readInitParam.jsp 15 16 17 18 19 20 21 22 23 24 25 26 27 <table border="1"> <tr> <td> server</td> <td><%= Host%></td> </tr> <td>WebMaster</td> <td><%=webMaster%></td> </table> <%=config.getInitParameter(" ")%> </body> </html> // 초기 파라미터 Host값을 출력 // 초기 파라미터 webMaster값을 출력 // 초기 파라미터 값을 출력 제8장
34
log(Exception ex, String msg)
7. application 기본 객체 application 기본 객체 Servlet이 실행되는 환경이나 서버 자원과 관련한 정보를 얻거나 로그 파일을 기록하는 작업 등을 수행 일반적인 서버 정보 얻기와 로그 기록 남기기 메소드 리턴 타입 설명 getServerInfo() String JSP/Servlet 컨테이너의 이름과 버전을 리턴한다. getMajorVersion() int 컨테이너가 지원하는 Servlet API Major 버전 정보를 리턴한다. getMinorVersion() 컨테이너가 지원하는 Servlet API Miner 버전 정보를 리턴한다. application 기본 객체의 서버 일반 정보 관련 주요 메소드 메소드 리턴 타입 설명 log(String msg) void 문자열 msg의 내용을 로그 파일에 기록한다. 로그 파일의 위치는 컨테이너에 따라 다르다. log(Exception ex, String msg) 예외 상황에 대한 정보를 포함하여 로그 파일에 기록한다. application 기본 객체의 로그 관련 주요 메소드 제8장
35
7. application 기본 객체 일반적인 서버 정보 얻기와 로그 기록 남기기 예제
[예제 8.7] jspbook\ch08\appl.jsp 01 02 03 04 05 06 07 08 - 09 10 11 12 13 14 15 page contentType="text/html;charset=utf-8"%> page import="java.io.*" %> <html> <head><title>application 예제</title></head> <body> <hr/> 1. 서버 정보: <%=application.getServerInfo() %> <br/> 2. 서블릿 API 버전 정보: <%=application.getMajorVersion()+"."+application.getMinorVersion() %> <br/> 로그 기록 남김<p/> <% application.log("appl.jsp 실행"); %> </body> </html> 제8장
36
7. application 기본 객체 일반적인 서버 정보와 로그 기록 남기기
로그 정보는 "C:\apache-tomcat \logs" 폴더 내의 "localhost.XXX.log" 파일에 기록된다. JSP API의 버전 정보 보기 오후 10:40:13 org.apache.catalina.core.ApplicationContext log 정보: appl.jsp 실행 Tomcat 버전별로 연관된 Servlet/JSP의 버전 [예제 8.8] jspbook\ch08\jspversion.jsp 01 02 page contentType="text/html;charset=utf-8"%> JSP API Ver.:<%= JspFactory.getDefaultFactory().getEngineInfo().getSpecificationVersion() %> 제8장
37
7. application 기본 객체 서버 자원 정보 활용하기
메소드 리턴 타입 설명 getMimeType(String filename) String 문자열 filename에 지정된 파일에 대한 MIME Type을 리턴한다. getResource(String path) URL 문자열 path에 지정된 자원을 URL 객체로 리턴한다. getResourceAsStream(String path) InputStream 문자열 path에 지정된 자원을 InputStream 객체로 리턴한다. getRealPath(String path) 문자열 path에 지정된 자원을 파일 시스템의 실제 경로로 리턴한다. getContext(String path) ServletContext 문자열 path에 지정된 자원의 Context 정보를 리턴한다. getRequestDispatcher(String path) RequestDispatcher 문자열 path에 지정된 자원을 위한 request dispatcher 객체를 리턴한다. 제8장
38
7. application 기본 객체 서버 자원 정보 활용하기 ch08 폴더의 test.txt 파일 읽기 예제
[예제 8.9] jspbook\ch08\readtxt.jsp 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 page contentType="text/plain;charset=utf-8" %> // contextType으로 text/html이 아닌 text/plain 사용 page import = "java.io.*" %> <html> <head><title>절대 경로 사용하여 자원 읽기</title></head> <body> <% FileReader fr = null; char[] buff = new char[512]; int len = -1; try { fr = new FileReader(application.getRealPath("/ch08/test.txt")); // "/ch08/test.txt"의 실제 물리적 주소를 얻어 while ( (len = fr.read(buff)) != -1) { // FileReader 객체 생성 out.print(new String(buff, 0, len)); } } catch(IOException ex) { out.println("예외 발생: "+ex.getMessage()); } finally { if (fr != null) try { fr.close(); } catch(IOException ex) {} %> </body> </html> 제8장
39
7. application 기본 객체 서버 자원 정보 활용하기 readtxt.jsp의 스트림 처리 동작 과정 제8장
40
7. application 기본 객체 서버 자원 정보 활용하기
[예제 8.10] jspbook\ch08\readtxtstream.jsp 01 02 03 04 05 06 07 08 09 10 11 12 - 13 14 15 16 17 18 19 20 21 22 23 page contentType="text/plain;charset=utf-8" %> page import = "java.io.*" %> <html> <head><title>스트림을 활용해서 자원 읽기</title></head> <body> <% BufferedReader br = null; char[] buff = new char[512]; int len = -1; try { br = new BufferedReader(new InputStreamReader(application.getResourceAsStream("/ch08/test.txt"))); while ( (len = br.read(buff)) != -1) { out.print(new String(buff, 0, len)); } } catch(IOException ex) { out.println("예외 발생: "+ex.getMessage()); } finally { if (br != null) try { br.close(); } catch(IOException ex) {} %> </body> </html> 제8장
41
7. application 기본 객체 서버 자원 정보 활용하기
[예제 8.11] jspbook\ch08\readtxturl.jsp 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 page contentType="text/plain;charset=utf-8" %> page import = "java.io.*" %> page import = "java.net.URL" %> // URL 클래스를 활용하기 위한 import <html> <head><title>URL를 통한 텍스트 파일 읽기</title></head> <body> <% BufferedReader br = null; char[] buff = new char[512]; int len = -1; try { URL url = application.getResource("/ch08/test.txt"); br = new BufferedReader(new InputStreamReader(url.openStream())); while ( (len = br.read(buff)) != -1) { out.print(new String(buff, 0, len)); } } catch(IOException ex) { out.println("예외 발생: "+ex.getMessage()); } finally { if (br != null) try { br.close(); } catch(IOException ex) {} %> </body> </html> 제8장
42
7. application 기본 객체 Context 초기 파라미터 값 활용하기 web.xml에 초기 파라미터 값 설정
[예제 ] jspbook\WEB-INF\web.xml <?xml version="1.0" encoding="utf-8"?> <web-app xmlns=" xmlns:xsi=" xsi:schemaLocation=" version="2.5"> <!-- 기존 내용 --> <!-- 아래의 내용만 삽입 --> <context-param> <param-name>appName</param-name> <param-value>jspbook</param-value> </context-param> <param-name>appVersion</param-name> <param-value>1.0</param-value> <!-- 삽입 끝 --> </web-app> 제8장
43
getInitParameterNames() getInitParameter(String name)
7. application 기본 객체 Context 초기 파라미터 값 활용하기 application 기본 객체의 Context 파라미터 관련 주요 메소드 메소드 리턴 타입 설명 getInitParameterNames() Enumeration 초기 파라미터 값들의 설정 이름을 Enumeration 객체로 리턴 한다. getInitParameter(String name) String 문자열 name에 해당하는 초기 파라미터 값을 리턴 한다. 제8장
44
7. application 기본 객체 Context 초기 파라미터 값 활용하기
[예제 ] jspbook\ch08\contextparam.jsp 01 02 03 04 05 06 07 08 09 10 11 12 page contentType="text/html;charset=utf-8"%> <html> <head><title>Context 초기 파라미터 활용</title></head> <body> <% String appName = application.getInitParameter("appName"); String appVersion = application.getInitParameter("appVersion"); %> appName: <%= appName %><br/> appVersion: <%= appVersion %><br/> </body> </html> 제8장
45
8. page 기본 객체 page 기본 객체 JSP/Servlet 컨테이너에서 생성된 Servlet 인스턴스 객체를 참조하는 레퍼런스 변수이며 JSP에서 자기 자신을 참조할 때 사용된다. Java인 경우 page 참조변수를 통하지 않고도 생성된 Servlet 클래스의 멤버 변수나 메소드에 직접 접근할 수 있다. 따라서 page 참조 변수는 거의 사용하지 않는다. 제8장
46
9. pageContext 기본 객체 pageContext 기본 객체
다른 모든 기본 객체에 대한 프로그램적인 접근 방법을 제공 제어권을 다른 페이지로 넘기나 다른 페이지를 포함할 때 사용 다른 기본 객체를 리턴하는 pageContext 기본 객체의 주요 메소드 메소드 리턴 타입 설명 getPage() Object 현재 페이지에 대응하여 생성된 Servlet 인스턴스인 page 기본 객체를 리턴한다. getRequest() ServletRequest 현재 페이지의 클라이언트 요청 정보를 가지고 있는 request 기본 객체를 리턴한다. getResponse() ServletResponse 현재 페이지의 클라이언트 응답 정보를 가지고 있는 response 기본 객체를 리턴한다. getOut() JspWriter 현재 페이지의 output stream인 out 기본 객체를 리턴한다. getSession() HttpSession 현재 페이지의 session 기본 객체를 리턴한다. getServletConfig() ServletConfig 현재 페이지의 config 기본 객체를 리턴한다. getServletContext() ServletContext 현재 페이지의 Servlet 컨텍스트(application 기본 객체)를 리턴한다. getException() Exception 오류 페이지, 즉 page 지시어에서 isErrorPage 속성을 true로 지정한 페이지에서 활용가능한 exception 기본 객체를 리턴한다. 제8장
47
9. pageContext 기본 객체 pageContext 기본 객체의 서버 자원 정보 관련 주요 메소드
forward 액션 태그와 include 액션 태그와 완전히 동일한 기능을 수행 (9장) pageContext의 forward(), include() 메소드보다 forward, include 액션 태그를 더 많이 활용 forward 메소드 사용법 include 메소드 사용법 메소드 리턴 타입 설명 forward(String path) void 문자열 path에 지정된 페이지로 포워딩한다. include(String path) 문자열 path에 지정된 페이지를 포함시킨다. pageContext.forward("HelloWorld.jsp") pageContext.include("HelloWorld.jsp"); 제8장
48
printStackTrace(PrintWriter pw)
10. exception 기본 객체 exception 기본 객체 (10장) 예외가 발생할 때 전달되는 java.lang.Throwable 인스턴스에 대한 참조 변수 exception 기본 객체의 주요 메소드 메소드 리턴 타입 설명 getMessage() String 문자열로 된 오류 메시지를 리턴한다. printStackTrace() void 표준 출력 스트림으로 스택 추적 정보를 출력한다. printStackTrace(PrintWriter pw) PrintWriter 객체스트림으로 스택 추적 정보를 출력한다. toString() 예외 클래스 이름과 함께 오류 메시지를 리턴한다. 제8장
49
11. JSP 기본 객체와 활성범위 (Scope) 4개의 활성범위 (scope)
PAGE, REQUEST, SESSION, APPLICATION 제8장
50
11. JSP 기본 객체와 활성범위 (Scope) Scope과 연관된 기본 객체 및 생성/소멸 시기 Scope(활성범위)
연관 기본 객체 생성시기 소멸시기 PAGE pageContext JSP 페이지 처리 시작 JSP 페이지 처리 완료 REQUEST request 웹 브라우저부터의 요청 처리 시작 웹 브라우저로 응답 완료 SESSION session 웹 브라우저부터의 첫 번째 요청 처리 시작 세션 타이머가 만료되거나 명시적으로 세션을 소멸시킬 때 소멸된다. APPLICATION application Tomcat의 구동과 함께 웹 어플리케이션의 첫 시작 Tomcat 서버의 종료 제8장
51
12. 활성 범위와 연관된 기본 객체의 속성 활용 속성 (Attribute)
pageContext, request, session, application 기본 객체만 가지고 있는 정보 저장 장소 각각의 활성 범위가 생성되어 소멸되기 전까지 연관된 기본 객체에 특정 정보를 저장하여 활용한다. JSP 페이지 사이에 특정 정보를 주고받거나 공유할 때 활용한다. 속성 이름: String 값: Object 값으로는 임의의 자바 객체가 저장 가능하다. <속성 이름, 값> 제8장
52
12. 활성 범위와 연관된 기본 객체의 속성 활용 4개 기본 객체에 존재하는 속성 (Attribute) 활용 메소드 목록
리턴 타입 설 명 setAttribute(String name, Object value) void 문자열 name 이름으로 Object형 데이터를 저장한다. Object형이므로 어떠한 Java 객체도 저장이 가능하다. getAttribute(String name) Object 문자열 name에 해당하는 속성 값이 있다면 Object 형태로 가져온다. 따라서 리턴 값에 대한 적절한 형 변환이 필요하다. getAttributeNames() Enumeration 현재 객체에 저장된 속성들의 이름들을 Enumeration 형태로 가져온다. removeAttribute(String name) 문자열 name에 해당하는 속성을 삭제한다. 제8장
53
12. 활성 범위와 연관된 기본 객체의 속성 활용 속성 저장 예 저장된 속성을 가져오는 예 (형 변환 필요)
pageContext.setAttribute("point", new Point(1,2)); request.setAttribute("fruit", new String("Apple")); request.setAttribute("fruit2", "graph"); session.setAttribute("id", "freebird"); session.setAttribute("date", new Date()); application.setAttribute("temp_dir", new File("c:\\temp")); Point p = (Point)pageContext.getAttribute("point"); String myfruit = (String)request.getAttribute("fruit"); String myfruit2 = (String)request.getAttribute("fruit2"); String id = (String)session.getAttribute("id"); Date date = (Date)session.getAttribute("date"); File tempFolder = (File)application.getAttribute("temp_dir"); 제8장
54
12. 활성 범위와 연관된 기본 객체의 속성 활용 주의점 및 래퍼 클래스 (Wrapper Class)
기본 데이터 타입은 속성 값으로 활용할 수 없음 각 기본 데이터 타입과 대응되는 래퍼 클래스들 request.setAttribute("age", 32); (X) session.setAttribute("height", 172.5); (X) request.setAttribute("age", new Integer(32)); (O) session.setAttribute("height", new Double(172.5)); (O) 기본 데이터 타입 대응되는 래퍼 (Wrapper) 클래스 byte java.lang.Byte char java.lang.Character short java.lang.Short int java.lang.Integer long java.lang.Long float java.lang.Float double java.lang.Double boolean java.lang.Boolean 제8장
55
12. 활성 범위와 연관된 기본 객체의 속성 활용 기본 데이터 타입과 래퍼 클래스 대응 관계 기본 데이터 타입
대응되는 래퍼 (Wrapper) 클래스 byte java.lang.Byte char java.lang.Character short java.lang.Short int java.lang.Integer long java.lang.Long float java.lang.Float double java.lang.Double boolean java.lang.Boolean 제8장
56
12. 활성 범위와 연관된 기본 객체의 속성 활용 래퍼 클래스 객체로부터 기본 데이터 값을 읽어 오는 메소드
Java 1.5 이후 허용된 점 래퍼 클래스 객체와 기본 데이터의 자동 변환 래퍼 (Wrapper) 클래스 멤버 메소드 리턴 타입 java.lang.Byte byteValue() byte java.lang.Character charValue() char java.lang.Short shortValue() short java.lang.Integer intValue() int java.lang.Long longValue() long java.lang.Float floatValue() float java.lang.Double doubleValue() double java.lang.Boolean booleanValue() boolean request.setAttribute("age", 32); (Java 1.5 이후 O) session.setAttribute("height", 172.5); (Java 1.5 이후 O) 제8장
57
12. 활성 범위와 연관된 기본 객체의 속성 활용 속성 활용 예제
[예제 8.13] jspbook\ch08\wrapper.jsp 01 02 03 04 05 06 07 08 09 10 11 12 13 14 page contentType="text/html;charset=utf-8"%> <html> <head><title>wrapper 클래스 활용</title></head> <body> <% request.setAttribute("age", new Integer(33)); request.setAttribute("height", 167.6); // Java 5 버전 이상에서 가능한 문법 Integer age1 = (Integer)request.getAttribute("age"); Double height1 = (Double)request.getAttribute("height"); int age2 = ((Integer)request.getAttribute("age")).intValue(); double height2 = height1.doubleValue(); %> 제8장
58
12. 활성 범위와 연관된 기본 객체의 속성 활용 속성 활용 예제 (계속)
[예제 8.13] jspbook\ch08\wrapper.jsp 15 16 17 18 19 20 21 22 23 24 25 age1: <%= age1 %><br/> height1: <%= height1 %><br/> age2: <%= age2 %><br/> height2: <%= height2 %> <hr/> age1 + height1: <%= age1 + height1 %><br/> age1 + height2: <%= age1 + height2 %><br/> age2 + height1: <%= age2 + height1 %><br/> age2 + height2: <%= age2 + height2 %><br/> </body> </html> // Java 5 버전 이상에서 가능한 문법 제8장
59
12. 활성 범위와 연관된 기본 객체의 속성 활용 pageContext 기본 객체에서 속성 활용
극히 드믈다 request 기본 객체에서 속성 활용 예제 (9장) session 기본 객체에서 속성 활용 예제 (11장) application 기본 객체에서 속성 활용 예제 [예제 ] jspbook\ch08\appatt1.jsp 01 02 03 04 05 06 07 08 09 10 11 page contentType="text/html;charset=utf-8"%> <html> <head><title>application 속성 설정</title></head> <body> <% application.setAttribute("appName", "Exciting Jspbook"); application.setAttribute("appVersion", new Double(1.0)); %> appName 속성과 appVersion 속성을 application에 설정 완료 </body> </html> 제8장
60
12. 활성 범위와 연관된 기본 객체의 속성 활용 application 기본 객체에서 속성 활용 예제 (계속)
[예제 ] jspbook\ch08\appatt2.jsp 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 page contentType="text/html;charset=utf-8"%> page import="java.util.Enumeration"%> <html> <head><title>application 속성 보기</title></head> <body> <% // application이 내장한 모든 속성 이름 얻어오기 Enumeration enums = application.getAttributeNames(); String name = null; Object value = null; int i = 1; while (enums.hasMoreElements()) { name = (String)enums.nextElement(); value = application.getAttribute(name); // 각 속성 이름에 대한 값 가져오기 out.println("<b>application 속성" + i + "</b>: " + name + " = " + value + "<br>"); i++; } %> </body> </html> 제8장
61
12. 활성 범위와 연관된 기본 객체의 속성 활용 application 기본 객체에서 속성 활용 예제 (계속)
appatt2.jsp의 수행 모습 제8장
62
12. 활성 범위와 연관된 기본 객체의 속성 활용 application 기본 객체를 활용한 카운터 예제 1
[예제 ] jspbook\ch08\counter.jsp 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 page contentType="text/html;charset=utf-8"%> <html> <body> <center> <% Integer count = (Integer)application.getAttribute("count"); // count 이름 값의 속성을 얻어온다. Integer newCount = null; if (count == null) { application.setAttribute("count", 1); // application 속성으로 count값을 관리 } else { newCount = count + 1; application.setAttribute("count", newCount); // application 속성으로 count값을 관리 } %> 방문자수 : <%= application.getAttribute("count") %>명 </center> </body> </html> 제8장
63
12. 활성 범위와 연관된 기본 객체의 속성 활용 application 기본 객체를 활용한 카운터 예제 2
[예제 ] jspbook\ch08\counter2.jsp 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 page contentType="text/html;charset=utf-8"%> <html> <body> <center> <% Integer count = (Integer)application.getAttribute("count"); Integer newCount = null; if (count == null) { application.setAttribute("count", 1); // application 속성으로 counter 값을 관리 } else { if (session.isNew()) { newCount = count + 1; application.setAttribute("count", newCount); // application 속성으로 counter 값을 관리 } %> 방문자수 : <%= application.getAttribute("count") %>명 </center> </body> </html> 제8장
64
12. 활성 범위와 연관된 기본 객체의 속성 활용 application 기본 객체를 활용한 카운터 예제 3
[예제 ] jspbook\ch08\counter3.jsp 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 page contentType="text/html;charset=utf-8"%> page import = "java.io.*" %> <html> <body> <center> <% String readResourcePath = "/ch08/count.txt"; // counter값이 저장되는 외부 파일 경로명 설정 String writeResourcePath = readResourcePath; String realReadPath = application.getRealPath(readResourcePath); String realWritePath = application.getRealPath(writeResourcePath); BufferedReader br = null; PrintWriter pr = null; String count = null; try { br = new BufferedReader(new FileReader(realReadPath)); count = br.readLine().trim(); // 외부 파일에서 카운트값을 읽는다 br.close(); 제8장
65
12. 활성 범위와 연관된 기본 객체의 속성 활용 application 기본 객체를 활용한 카운터 예제 3 (계속)
개발 단계에서는 임시적으로 새션의 만료 시간을 줄일 필요 있음 [예제 ] jspbook\ch08\counter3.jsp 20 21 22 23 24 25 26 27 28 29 30 31 32 33 if (session.isNew()) { pr = new PrintWriter (new FileWriter(realWritePath)); int num = Integer.parseInt(count); pr.println(num+1); // 외부 파일에 새로운 count값을 저장한다 pr.close(); } } catch(IOException ex) { out.println("예외 발생: " + ex.getMessage()); %> 방문자수 : <%= count %>명 </center> </body> </html> session.setMaxInactiveInterval(3); 제8장
Similar presentations