JSPスクリプト要素機能(2)


組み込みオブジェクト(組み込み変数)機能
JSPページの組み込みオブジェクト(組み込み変数)とは、JSPがサーブレットに変換されたときにコンテナが自動的に生成するサーブレットメンバー変数のことです.すなわち,実装時によく使用されるオブジェクトを開発者に提供し,テンプレートに変換するのではなく,コンテナが自動的に生成されて使用される.
JSPが提供する組み込みオブジェクト.
組み込みオブジェクトテンプレートタイプ説明requestjavax.servlet.http.HttpServiceletRequestクライアントのリクエスト情報を保存します.responsejavax.servlet.http.HttpServiceletResponseレスポンス情報を保存します.outjavax.servlet.jsp.結果をJspWriterJSPページに出力します.sessionjavax.servlet.http.HttpSession生成情報を保存します.applicationjavax.servlet.サーブレットContextコンテキスト情報を保存します.pageContextjavax.servlet.jsp.PageContextJSPページに関する情報を格納します.pagejavax.lang.ObjectJSPページのサーブレットインスタンスを保存します.configjavax.servlet.サーブレットコンフィグJSPページの設定情報を保存します.exceptionjavax.lang.Exception異常発生時に異常を処理します.
埋め込みオブジェクトのスキャン
1回のリクエストに対して、組み込みオブジェクトスキャンpageはJSPページを共有します.1回のリクエストに対して、RequestHttpServiceletRequestは同じリクエストのJSPページを共有します.sessionHttpSessionなどのブラウザで共有します.アプリケーション(ApplicationServiceServiceletContextなど)で共有します.
埋め込みオブジェクトのサンプル練習
session埋め込みオブジェクトにデータをバインドする実践
package sec01.ex01;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;


@WebServlet("/SessionTest")
public class SessionTest extends HttpServlet {
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html; charset=utf-8");
		PrintWriter pw = response.getWriter();
		HttpSession session = request.getSession(); //session 객체를 가져온다.
		session.setAttribute("name", "이순신"); // session 객체에 name을 바인딩한다.
		pw.println("<html><body>");
		pw.println("<h1>세션에 이름을 바인딩합니다.</h1>");
		pw.println("<a href='/javaWebPro/test01/session1.jsp'>첫 번째 페이지로 이동하기</a>");
		pw.println("</body></html>");
	}


	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

		doGet(request, response);
	}

}
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
	String name=(String)session.getAttribute("name"); // session 객체에 바인딩 된 name 값을 가져온다.
session.setAttribute("address","서울시 강남구"); // session 객체에  ad
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>내장 객체 테스트2</title>
</head>
<body>
	이름은 <%=name %>입니다. <br>
	<a href=session2.jsp>두 번째 페이지로 이동</a>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
	String name=(String)session.getAttribute("name");
	String address=(String)session.getAttribute("address");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>session 내장 객체 테스트3</title>
</head>
<body>
	이름은 <%=name %>입니다. <br>
	주소는 <%=address %>입니다. <br>
</body>
</html>
実行結果

これは最初にサーブレットに要求した結果です.サーブレットリクエスト時にsessionオブジェクトにnameをバインドします.

最初のページに移動するときは、出力をクリックしてサーブレットにバインドされたnameをクリックします.クリックして2ページ目に移動します.

サーブレットと最初のJSPからバインドされた名前(name)とアドレス(address)を出力します.
埋め込まれたアプリケーション・オブジェクトにデータをバインドする実践
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
	session.setAttribute("name", "이순신");
	application.setAttribute("address", "서울시 성동구");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>내장 객체 스코프 테스트</title>
</head>
<body>
	<h1>이름과 주소를 저장한다.</h1>
	<a href=appTest2.jsp>두 번째 웹 페이지로 이동</a>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
	String name=(String)session.getAttribute("name");
	String address=(String )application.getAttribute("address");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>내장 객체 스코프 테스트</title>
</head>
<body>
	<h1>이름은 <%=name %>입니다.</h1>
	<h1>주소는 <%=address %>입니다.</h1>
</body>
</html>
実行結果


同じブラウザで要求された場合、セッションとアプリケーションには2番目のJSPでアクセスできます.

他のブラウザでは、アプリケーションにのみアクセスできる値を決定できます.
request埋め込みオブジェクトにデータをバインドする実践
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
	request.setAttribute("name", "이순신");
	request.setAttribute("address", "서울시 강남구");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
	RequestDispatcher dispatch = request.getRequestDispatcher("request2.jsp");
	dispatch.forward(request, response);
%>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
	String name = (String)request.getAttribute("name");
	String address=(String)request.getAttribute("address");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h1>이름은 <%=name %>입니다.</h1>
	<h1>주소는 <%=address %>입니다.</h1>
</body>
</html>
実行結果

ブラウザで1を要求します.jspが要求された場合、requestオブジェクトにバインドされ、2が要求されます.jspで名前とアドレスを転送して出力します.
out内蔵オブジェクトを使用してデータを出力する
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<form method="post" action="out2.jsp">
		이름:<input type="text" name="name"><br>
		나이:<input type="text" name="age"><br>
		<input type="submit" value="전송">
	</form>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
	request.setCharacterEncoding("utf-8");
	String name=request.getParameter("name");
	String age=request.getParameter("age");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
	if(name!=null || name.length()!=0){
%>
	<h1><%=name %>, <%=age %> </h1>
<%
	}else{
%>
	<h1>이름을 입력하세요</h1>
<%
	}
%>

<%
	if(name!=null || name.length()!=0){
%>
	<h1><% out.println(name+" , "+age); %></h1>
<%
	}else{
%>
	<h1>이름을 입력하세요</h1>
<%
	}
%>
</body>
</html>
実行結果

ブラウザは、名前と年齢を入力して送信するように要求します.

伝達された情報を式とout内蔵オブジェクトとして出力します.
JSPページ異常の処理
ページ異常処理とは、プログラムの実行中に異常やエラーが発生した場合に起動するページです.すなわち,専用の例外処理ページが出現し,より信頼性が高く,よりユーザに優しいページを作成できる.