자료 저장소

□ 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 페이지가 초기화될 때 초기화되어서 다른 선언, 스크립트렛, 식에서 사용할 수 있다.
        - 선언에서 정의된 변수와 메소드는 '서블릿 코드 생성 단ㄱㅖ' 과정을 거쳐 클래스의 멤버 필드와 메소드로 만들어진다.
        - <%! 과 %> 태그를 이용해서 기술.
      ○ 형태
 <@! declaration(s) %>

         - 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() %>
        ● 변수 값을 출력
 <%= age %>
    ■ 예제
/* 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 */

'프로그래밍 > JSP' 카테고리의 다른 글

JSP :: 폼 데이터 처리  (0) 2010.11.22
JSP :: JSP 디폴트 객체  (0) 2010.11.22
JSP :: JSP 페이지 구성  (0) 2010.11.22
JSP :: 간단한 JSP 프로그래밍  (0) 2010.11.22
JSP :: Hello Servlet!  (0) 2010.11.22
댓글 로드 중…

최근에 게시된 글