□ page 지시어 ■ 정의 - JSP 페이지와 관련된 속성을 정의하고, 이 속성들은 웹 컨테이너에 정보를 제공. ■ 특징 - 한 페이지에서 page 지시어는 한 번 이상 나올 수 있고 위치에 관계 없음. (보통 페이지의 처음부분에 기술.) - import 이외의 다른 속성은 같은 내용을 여러번 기술하면 에러 발생. - 속성 이름에서 철자가 틀리면 에러 발생. (철자에 주의) ■ 형태 <%@ page page_directive_attr_list %> page_directive_attr_list ::= { language = "scriptingLanguage" } { extends = "className" } { import = "importList" } { session = "true | false" } { buffer = "none | sizekb" } { autoFlush = "true | false" } { inThreadSafe = "true | false" } { info = "info+text" } { errorPage = "error_url" } { isErrorPage = "true | false" } { contentType = "ctinfo" } { pageEncoding = "encoding" } { isELIgnored = "true | false" } |
■ 예제 ○ info 속성 <%@ page info = "My First JSP Example" %> |
- JSP 페이지에 관한 간략한 설명을 기술. ○ errorPage 속성 <%@ page buffer="none" isThreadSafe="yes" errorPage="/oops.jsp" %> |
- JSP 출력을 위한 버퍼를 사용하지 않고, 멀티스레드를 사용할 수 있으며, 에러가 발생하는 경우에는 oops.jsp로 제어가 이동. ○ import 속성 <%@ page language="java" import="com.myco.*, java.util.*" buffer="16kb" %> |
- JSP에서 사용할 언어는 자바이고 com.myco와 java.util패키지를 임포트하고, 출력을 위한 버퍼로는 16KB를 사용. ■ 속성 ○ language 속성 ● 특징 - 선언, 식, 스크립트렛에 사용되는 스크립트 언어를 기술. - 속성을 지정하지 않은 경우에는 기본적으로 자바 언어가 사용. ● 예 - 자바 언어 사용 <%@ page language="java" %> |
○ extends 속성
● 특징
- JSP 페이지에 의해 생성된 클래스의 부모 클래스를 지정하기 위해서 사용.
- 사용자가 정의한 서블릿 클래스로부터 JSP 페이지가 상속받게 작성하는 것이 가능. (기존에 JSP가 제공하던 작업들을 모두
사용자가 작성.)
● 속성 값
- 패키지 이름까지 포함하는 클래스 이름을 기술.
● 수행해야할 작업들
- service() 메소드가 _jspService() 메소드를 호출하도록 함.
- init() 메소드가 jspInit() 메소드를 호출하도록 함.
- destroy() 메소드가 jspDestroy() 메소드를 호출하도록 함.
● 예
- extends 속성
<%@ page extends="packageName.ServletName" %> |
○ import 속성 ● 특징 - 스크립트렛과 식에서 사용할 수 잇는 타입을 기술하기 위해서 사용. - 자바 프로그램에서 import 문장과 동일. - 여러 개의 패키지 혹은 클래스를 임포트하는 경우에는 콤마(,)로 구분. - 디폴트로 java.lang.*, javax.servlet.*, javax.servlet.http.*, javax.servlet.jsp.* 패키지는 자동적으로 임포트. ● 예 - 다른 패키지의 클래스를 사용해야 하는 경우 <%@ page import="java.util.*, java.text.*" %> |
○ session 속성 ● 특징 - 페이지가 세션에 참여할 것인가 여부를 기술. ● 속성 값 □ true일 경우 - 현재 페이지는 세션에 참가. - session 디폴트 객체를 사용 가능. □ false일 경우 - 페이지는 세션에 참여하지 않게 됨. - session 디폴트 객체를 사용할 수 없음. □ 디폴트 값 - true ● 예 - 세션을 사용하지 않음 <%@ page session="false" %> |
○ buffer 속성
● 특징
- 페이지 내용을 출력하는 JspWriter 타입의 out 변수의 버퍼링 방법을 설정.
- autoFlush 속성의 값에 따라 버퍼가 채워진 경우에 자동적으로 Flush할 것인지, 버퍼가 Overflow되는 경우 예외를 발생시킬 것
인지가 결정됨.
● 속성 값
□ none
- 버퍼링을 사용하지 않고, 모든 출력은 ServletResponse의 PrintWriter를 통해 전달.
□ 디폴트 값
- 버퍼를 사용하는 것.
- 버퍼 크기는 8kb.
● 예
□ 버퍼를 사용하지 않음
<%@ page buffer="none" %> |
□ 12kb의 버퍼 사용 <%@ page buffer="12kb" %> |
○ autoFlush 속성 ● 특징 - 버퍼의 내용이 자동적으로 Flush될 것인지 여부를 기술. - buffer 속성이 none이면 autoFlush는 false값을 가질 수 없음. ● 속성 값 □ true일 경우 - 버퍼가 채워지면 자동적으로 플러쉬. □ false일 경우 - 버퍼가 채워지면 버퍼 오버플로우 예외 발생. ● 예 - autoFlush 사용 <%@ page autoFlush="ture" %> |
○ isThreadSafe 속성
● 특징
- 현재 페이지의 스레드 세이프(Thread Safe) 정도를 기술.
● Thread Safe 하다
- 멀티스레드(Multithread)가 동시에 작업을 수행하더라도 프로그램이 오작동하지 않고 정상적으로 작동.
● 속성 값
□ true일 경우
- JSP 페이지가 멀티스레드로 실행되더라도 문제가 없다.
- 클라이언트의 요청이 동시에 처리됨. (적절하게 동기화가 이루어지도록 해야함.)
□ false일 경우
- JSP 페이지가 하나의 스레드로 수행되어야 함.
- 서블릿에서 SingleThreadModel 인터페이스를 구현한 것과 같음.
- JSP 페이지는 동기화가 자동적으로 이루어지지만, 그 외 객체들인 ServletContext나 HttpSession을 통해서 공유되는 자원을
이용할 때는 동기화를 해 줘야함.
□ 디폴트 값
- true
● 예
- 스레드에 대해서 안전하지 않음
<%@ page isThreadSafe="false" %> |
○ info 속성 ● 특징 - JSP 페이지에 대한 정보를 제공하는 문자열을 기술. - 서블릿의 getServletInfo() 메소드에 해당. - 기술하는 정보의 길이에는 제한이 없으며, 이 정보들은 프로그램적으로 페이지의 요약 정보를 파악하기 위해서 사용. ● 예 - JSP 페이지 정보. <%@ page info="Test JSP" %> |
○ errorPage 속성
● 특징
- 예외가 발생하는 경우에 에러를 처리하는 페이지의 상대 URL을 기술.
- 예외가 발생하면 페이지가 자동적으로 errorPage 속성에 기술된 페이지로 이동.
- autoFlush 속성이 true이고, 페이지의 출력 내용이 클라이언트에 전달되다가 예외가 발생하는 경우에 에러 페이지로 전달되지
못할 수 도 있음.
● 예
- 에러가 발생하는 경우에 error.jsp로 제어 이동.
<%@ page errorPage="error.jsp" %> |
○ isErrorPage 속성 ● 특징 - 현재 JSP 페이지가 다른 JSP 페이지의 에러를 핸들링하기 위해서 사용되는 페이지인지 아닌지를 기술. ● 속성값 □ true일 경우 - exception 변수를 사용. □ false일 경우 - exception 변수를 사용할 수 없음. □ 디폴트 값 - false ● 예 - 현재 JSP 페이지는 에러를 처리하기 위한 것 임. <%@ page isErrorPage="true" %> |
● 예제 - 에러 메시지를 출력하는 JSP 페이지 작성./* error.jsp */
<%@ page language="java" contentType="text/html; charset=EUC-KR" pageEncoding="EUC-KR"%> <%@ page isErrorPage="true" %> <!-- 에러 처리 페이지임을 기술. --> <!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> 에러 페이지</title>
<!-- detail이라는 ID를 갖는 HTML 태그의 내용을 화면에 보임. --> <script type="text/javascript"> function showDetail() { d = document.getElementById('detail'); d.style.display = 'block'; } </script>
</head> <body>
<!-- 에러 이름 출력. --> <h3 id="header"><%= exception.getClass().getName() %></h3>
<div id="main"> <%= exception.getMessage() %> <!-- 에러 메시지 출력 --> <input type="button" onClick="showDetail()" value="상세보기"> <!-- showDetail() 함수 호출. --> <div id="detail" style="display:none"> <!-- 예외의 printStackTrace()메소드의 결과를 JSP 페이지로 출력 --> <% exception.printStackTrace(new java.io.PrintWriter(out)); %> </div> </div>
</body> </html> |
/* web.xml */
<?xml version="1.0" encoding="UTF-8"?> <web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <display-name> ServletTest</display-name> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> <error-page> <exception-type>java.lang.Exception</exception-type> <location>/jsp/error.jsp</location> </error-page> </web-app> |
○ contentType 속성 ● 특징 - JSP 페이지의 MIME 타입과 문자 인코딩을 정의. ● 속성 값 - MIME 값 이거나 MIME:CHARSET 값. - 디폴트 MIME 타입 : text/html - 디폴트 문자 인코딩 : ISO-8859-1 ● 예 □ MIME 지정 <%@ page contentType="text/html" %> |
□ MIME과 문자 세트를 지정 <%@ page contentType="text/html; charset=KSC5601" %> |
○ pageEncoding 속성
● 특징
- JSP 페이지의 문자 인코딩을 기술.
- 디폴트 값 : ISO-8859-1
- 한글을 사용하기 위해서는 KSC5601이나 EUC-KR 값을 사용.
○ isELlgnored 속성
● 특징
- JSP 페이지에서 EL(Expression Language)을 사용할 것인지 여부를 기술.
● 속성값
□ true일 경우
- EL을 사용하지 않음.
□ false일 경우
- EL을 사용.
□ include 지시어
■ 정의
- JSP에서 서블릿 코드를 생성할 때 텍스트나 코드를 JSP 파일 안으로 포함시킴. (포함되는 파일의 내용은 include 지시어가 있는
위치에 삽입.)
■ 특징
- 외부 데이터를 포함시키기 위해서는 include 지시어나 jsp:include 액션을 사용.
- 삽입되는 파일이 JSP 페이지인 경우에는 JSP 페이지 내용이 파싱(Parsing)되어서 처리.
- 웹 컨테이너는 포함되는 파일에 변경이 생기는 경우에 .jsp 파일을 다시 컴파일 하는 기능을 가지고 있음.
- file 속성의 값으로는 상대 URL을 기술.
■ 형태
<%@ include file="relativeURLspec" %> |
■ 예 - copyright.jsp 파일을 현재 위치에 인클루드. <%@ include file="copyright.jsp" %> |
■ include 지시어 사용법을 알아보는 프로그램/* pinclude.jsp */
<%@ page language="java" contentType="text/html; charset=EUC-KR" pageEncoding="EUC-KR"%> <%@ page errorPage="jsp/error.jsp" %> <!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>include 지시어</title> </head> <body>
<center><h2>include 지시어</h2></center> include 지시어 예제 입니다. <br> .......... <br> .......... <br> <!-- 인크루드할 파일 지정. --> <%@ include file="/jsp/copyright.jsp" %>
</body> </html> |
/* copyright.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>copyright</title> </head> <body>
<hr> <center> <br> <i>Copyright</i> <!-- txt파일을 인크푸드 --> <a href=mailto:<%@ include file="/txt/email.txt" %>> <%@ include file="/txt/name.txt" %> </center> </body> </html> |
/* name.txt */
<%@ page contentType="text/html; charset=EUC-KR" %> 홍길동 |
/* email.txt */
hong@some.com |
/* output */
|
□ 스크립팅 원소 ■ 선언 (Declaration) ○ 정의 - JSP 페이지에서 사용되는 멤버 변수나 메소드를 선언하기 위해서 사용. ○ 특징 - JSP 페이지가 초기화될 때 초기화되어서 다른 선언, 스크립트렛, 식에서 사용할 수 있다. - 선언에서 정의된 변수와 메소드는 '서블릿 코드 생성 단ㄱㅖ' 과정을 거쳐 클래스의 멤버 필드와 메소드로 만들어진다. - <%! 과 %> 태그를 이용해서 기술. ○ 형태 - JSP 페이지에서 메소드 선언 가능.
- 사용자가 선언한 메소드에서는 스크립트렛과 식에서 디폴트로 사용되던 out, request, response 등의 디폴트 객체들을 사용할 수
없음.
○ 예제
- whereFrom() 메소드 선언.
<% // whereFrom() 메소드 선언 pubilc String whereFrom(HttpServletRequest request) { HttpSession ses = request.getSession(); ....... return request.getRemoteHost(); } %> <% // 스크립트렛에서 whereFrom() 메소드 호출 out.print("방문자 컴퓨터는 "); out.println(whereFrom(request)); %> |
■ 스크립트렛 (Scriptlet) ○ 정의 - 자바 문장을 자유롭게 기술. ○ 특징 - <% 과 %> 태그 사이에 자바 코드를 기술. - 스크립트렛에 기술된 자바 문장들은 클라이언트의 요청이 처리되는 동안에 실행. - HTML과 같이 사용되기 때문에 <% 과 %> 태그를 열고 닫는데 실수하지 않아야 함. ○ 형태 ○ 예 <% if (Calendar.getInstance().get(Calendar.AM_PM) == Calendar.AM) { %> Good Morning <% else { %> Good Afternoon <% } %> |
■ 식 (Expression) ○ 정의 - 간단한 계산식이나 변수, 함수 호출 등을 기술. ○ 특징 - 계산식과 함수의 결과는 String 타입으로 변환되어 out 변수를 통해 클라이언트에 전달. - 변수인 경우에는 변수의 값이 String 타입으로 변환되어 전달. - 결과가 String 타입으로 변환될 수 없는 경우에는 ClassCastException 예외가 발생. - 세미콜론(;)을 사용하지 않는 점에 유의. - <%= 과 %> 태그를 사용. ○ 형태 ○ 예 ● Date 객체를 생성해서 내용을 출력 <%= (new java.util.Date()).toLocaleString() %> |
● 변수 값을 출력 ■ 예제/* expr.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"> <%! String msg = "변수 입니다."; int add(int a, int b) { return a + b; } %> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=EUC-KR"> <title>JSP 식</title> </head> <body>
<center><h2>JSP 식</h2></center> <ol> <li> 계산 식 <br> 2 + 5 = <%= 2+5 %> <br><br> <li> 변수 <br> msg = <%= msg %> <br><br> <li>함수 호출 <br> add(2, 3) = <%= add(2, 3) %> <br><br> <li> 리터럴 <br> "안녕" = <%= "안녕" %> <br><br> <li> 디폴트 객체 사용 <br> 사용자 컴퓨터 : <%= request.getRemoteHost() %> </ol>
</body> </html> |
/* output */
|