JSP第3講-スクリプトラベル、ディレクトリラベル、アクションラベル、エラーページ

23694 ワード

3つのアクション、コマンド、スクリプトラベルを覚えてください.
ディレクトリラベル(<%@):page、include、taglib
<%@page import="java.util.Date"%>
ページタグ   ツールバーの       値段
include:jspに別のjspを加える
**重要!taglib:cタグ、format、EL、JSTL
アクションラベル:最近リダイレクト、転送などはほとんど書かれていません
表示言語JSTL
値を表すスクリプト言語
JSPのスクリプト要素を補完します.
  • 基本金
    ${expr}
    //exprセクション:式
  • 、言語定義を表す構文表現値に基づいて
    //ex

    //アクションラベルまたはカスタムラベル+スクリプト以外の要素の部分で値を出力できます
    //ex
    ${sessionScope.member.id}へようこそ

    ページディレクトリ


  • JSPページに関する情報を入力
    JSPが作成するドキュメントのタイプ、使用するクラス、出力バッファが存在するかどうか、セッションが参加するかどうか.

  • JSPディレクトリの作成例
    <%@ page contentType="text/html; charset=euc-kr"%>
    <%@ page import="java.util.Date"%>

  • プライマリ・プロパティ
    contentType:JSPによって生成されるドキュメントのタイプを指定します
    //設定例
    <%@ page contentType="text/html; charset=utf-8"%>
    //UTF-8文字セットを使用してhtmlドキュメントを生成
    text/htmlを//MIMEタイプとして使用し、//contentType属性値をcharsetのUTF-8に設定
  • import:JSPページで使用するJavaクラスを指定
    //使用例
    <%@ page import = "java.util.Calendar"%>
    <%@ page import = "java.util.Calendar, java.util.Date"%>
    <%@ page import = "java.util.*"%>
    セッション:JSPページでセッションを使用するかどうかを指定します
    info:JSPページの説明を入力します.
    errorPage:エラーが発生した場合に表示するページを指定します(true)
    isErrorPage:エラーページかどうかを指定します(デフォルトはfalse)

    directiveTagRan4.jsp

    <%@ page language="java" contentType="text/xml; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <title>Insert title here</title>
    </head>
    <body>
    	<h2>contentType 디렉티브 태그</h2>
    	<h4>text/xml : XML 출력</h4>
    	<h4>charset=UTF-8 : 문자 인코딩</h4>
    </body>
    </html>

    directiveTagRan5.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"%>
    <%@ page import="java.util.Date"%>
    <%@ page import="java.io.*, java.lang.*" %>
    <%@ page session="true" %> 
    <!-- 복수로 import 사용하고 싶을 때 * 사용 -->
    <!-- 세션은 기본 true, 여기서 세션 : jsp 내장객체 중 하나(세션, 어플리케이션, utf, page 등 8개 있음!) -->
    <!DOCTYPE html>
    <html>
    <head>
    <title>Directives Tag</title>
    </head>
    <body>
    	Today is : <%=new Date()%>
    <hr>
    page 디렉티브의 import 속성 : JSP 페이지에서 사용할 자바 클래스 설정<br>
    JSP 컨테이너가 자동으로 java.io.*와 java.lang.* 패키지를 가져와줌
    * page session="true"<br>
    page 디렉티브의 session 속성 : 현재 JSP 페이지의 HTTP 세션 사용 여부 설정<br>
    기본값은 true(세션을 자동으로 사용함)이고, 생략 가능<br>
    </body>
    </html>
    

    directiveTagRan6.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"%>
    <%@ page errorPage="MyErrorPage.jsp" %>
    <!DOCTYPE html>
    <html>
    <head>
    <title>Insert title here</title>
    </head>
    <body>
    
    <%
    	String str = null;
    
    	//오류 발생 -> page 디렉티브의 errorPage속성의 값으로
    	//MyErrorPage.jsp URL로 이동
    	out.print(str.toString());
    %>
    
    </body>
    </html>

    MyErrorPage.jsp

    <%@page import="java.io.PrintWriter"%>
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%@ page isErrorPage="true" %>
    <!-- isErrorPage="true" -> "에러페이지가 맞다" (기본은 false) -->
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Directives Tag</title>
    </head>
    <body>
    <img src="/images/500.jpg" alt="500오류발생" title="500오류발생">
    <!-- 	<h4>errorPage 디렉티브 태그</h4> -->
    <!-- 	<h5>오류가 발생했습니다.</h5> -->
    <!-- * page 디렉티브의 isErrorPage 속성은 현재 JSP 페이지가 오류 페이지인지<br> -->
    <!-- 	여부를 설정하는데 사용. 기본값은 false. -->
    <%
    	//exception.printStackTrace(new PrintWriter(out));
    %>
    </body>
    </html>

    エラー・ページの指定&エラー・ページの作成


    JSPは、実行中に異常が発生した場合に、エラー画面ではなく指定JSPページを表示する機能を提供します.
    例外が発生した場合は、ページディレクトリのerrorPageプロパティを使用して、表示するJSPページを指定します.

  • エラー・ページの指定
    <%@page errorPage=「異常指定時に表示されるJSP」%>

  • エラーページの作成
    <%@ page isErrorPage = "true"%>
    //errorページに対応するJSPページは、pageディレクトリのisErrorPageプロパティの値をtrueとして指定する必要があります.
    //exceptionデフォルトオブジェクト:発生した例外オブジェクト
    //exception.getMassage():例外メッセージ
    //exception.printStackTrace():異常追跡メッセージの出力
  • ≪レスポンス・ステータス・コードによるエラー・ページの指定|Specify Error Page By Response Status Code|emdw≫

  • web.xmlファイルでの設定(最も一般的な)
  •  <!-- 
      	error-code : 404(없다), 500(개발자 실수) 등의 응답 상태 코드
      	location : 오류페이지의  URI(URL(경로) + 기능(파라미터 목록))
       -->
      <error-page>
      	<error-code>404</error-code>
      	<location>/error/404.jsp</location>
      </error-page>
      <error-page>
      	<error-code>500</error-code>
      	<location>/error/500.jsp</location>
      </error-page>
      <!-- 밑의 500 에러코드가 먼저 실행, 없다면 위 에러코드 실행 -->
      <error-page>
      	<exception-type>java.lang.NullPointerException</exception-type>
      	<location>/error/500.jsp</location>
      </error-page>
    エラーページ優先度
    1.pageディレクトリのerrorPageプロパティで指定したエラーページが表示されます.
    2.JSPページに表示される異常タイプはwebです.xmlファイルの指定した例外タイプと同じ場合は、指定したエラーページが表示されます.
    3.JSPページで発生したエラーコードはwebです.xmlファイルの指定した例外タイプと同じ場合は、指定したエラーページが表示されます.
    4.該当しない場合は、Webコンテナが提供するデフォルトのエラーページが表示されます.
    バッファとエラー・ページ
    バッファをリフレッシュする前にエラー・ページを処理する必要があります

    ページディレクトリのbufferプロパティ

  • バッファ・プロパティ:バッファとサイズを使用するかどうかを指定します.
    1)<%@page buffer="8 KB"%>:バッファサイズを8 KBに指定
    2)<%@page buffer="none"%>:バッファの無効化
    は使用できません.出力をキャンセルできません.
  • バッファ処理プロセス

    Pageディレクトリのautoflushプロパティ

  • バッファ満杯時の処理方法の指定
    true:バッファがいっぱいになった場合は、バッファをリフレッシュして操作を続行します.
    false:バッファがいっぱいになると、例外が発生し、操作が停止します.

  • Autoflushプロパティがtrueの場合、JSPページで生成されたデータサイズがバッファサイズより大きい場合、自動的にバッファがリフレッシュされ、正常に動作します.
  • noParameterError.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%@ page errorPage="/error/noParamEx.jsp" %>
    <!-- web.xml에 기재된 오류보다  errorPage가 더 우선순위가 높다 -->
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>파라미터가 없는 오류가 발생함</title>
    </head>
    <body>
    /error/noParamEx.jsp를 생성하여 오류 처리<br>
    <pre>
    * 오류 페이지 처리 순서
    우선순위 1. page 디렉티브의 errorPage 속성 사용(전용 오류 처리)
    우선순위 2. web.xml파일의 exception-type(범용 오류 처리)
    우선순위 3. web.xml파일의 error-code(별도 오류 처리)
    우선순위 4. 우선순위1~3까지 아무것도 안했다면..웹컨테이너(tomcat)가 제공하는 기본 오류 페이지를 보여줌.
    </pre>
    <%
    //memId=a001과 같은 파라미터가 없을 시 null을 toUpperCase하는 과정에서 오류 발생
    String memId = request.getParameter("memId").toUpperCase();
    %>
    </body>
    </html>

    readParameterNoErrorPage.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <title>파라미터 출력</title>
    </head>
    <body>
    name 파라미터 값 :
    <%
    	try{
    	out.print(request.getParameter("name").toUpperCase());
    	}catch(Exception ex){
    		out.print("<img src='/images/500.jpg'>");
    	}
    %>
    </body>
    </html>

    bufferOverflow.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
      pageEncoding="UTF-8"%>
    <%@ page buffer="1kb" %>
    <%@ page errorPage="/error/noParamEx.jsp" %>
    
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>버퍼 플러시 이후 예외 발생 결과</title>
    </head>
    <body>
    
    <!-- 1KB를 초과하는 데이터를 출력하여 버퍼가 flush 되도록 해보자 -->
    <%
    for(int i=0; i<256; i++){
    	out.print(i + "&nbsp;");
    }
    %>
    <!-- 자바에서 0으로 나누면 ArithmeticException 발생 -->
    <%= 1/0%>
    
    </body>
    </html>