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)
JSPは、実行中に異常が発生した場合に、エラー画面ではなく指定JSPページを表示する機能を提供します.
例外が発生した場合は、ページディレクトリのerrorPageプロパティを使用して、表示するJSPページを指定します.
エラー・ページの指定
<%@page errorPage=「異常指定時に表示されるJSP」%>
エラーページの作成
<%@ page isErrorPage = "true"%>
//errorページに対応するJSPページは、pageディレクトリのisErrorPageプロパティの値をtrueとして指定する必要があります.
//exceptionデフォルトオブジェクト:発生した例外オブジェクト
//exception.getMassage():例外メッセージ
//exception.printStackTrace():異常追跡メッセージの出力
web.xmlファイルでの設定(最も一般的な)
1.pageディレクトリのerrorPageプロパティで指定したエラーページが表示されます.
2.JSPページに表示される異常タイプはwebです.xmlファイルの指定した例外タイプと同じ場合は、指定したエラーページが表示されます.
3.JSPページで発生したエラーコードはwebです.xmlファイルの指定した例外タイプと同じ場合は、指定したエラーページが表示されます.
4.該当しない場合は、Webコンテナが提供するデフォルトのエラーページが表示されます.
バッファとエラー・ページ
バッファをリフレッシュする前にエラー・ページを処理する必要があります
バッファ・プロパティ:バッファとサイズを使用するかどうかを指定します.
1)<%@page buffer="8 KB"%>:バッファサイズを8 KBに指定
2)<%@page buffer="none"%>:バッファの無効化
は使用できません.出力をキャンセルできません.
バッファ処理プロセス
Pageディレクトリのautoflushプロパティ
バッファ満杯時の処理方法の指定
true:バッファがいっぱいになった場合は、バッファをリフレッシュして操作を続行します.
false:バッファがいっぱいになると、例外が発生し、操作が停止します.
Autoflushプロパティがtrueの場合、JSPページで生成されたデータサイズがバッファサイズより大きい場合、自動的にバッファがリフレッシュされ、正常に動作します.
ディレクトリラベル(<%@):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に設定
//使用例
<%@ 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≫
<!--
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 + " ");
}
%>
<!-- 자바에서 0으로 나누면 ArithmeticException 발생 -->
<%= 1/0%>
</body>
</html>
Reference
この問題について(JSP第3講-スクリプトラベル、ディレクトリラベル、アクションラベル、エラーページ), 我々は、より多くの情報をここで見つけました https://velog.io/@hazel_jo/3テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol