1. JSP の概要
JSP (Java Server Pages) は、HTML ページに Java 言語を追加して動的ページを生成するテクノロジです。新しいタグ (<%、%> など) が追加されます。
JSP は、Java とサーブレットに基づいて開発された動的 Web ページ生成テクノロジであり、その基礎となる実装は Java サーブレットです。
JSP ページは、HTML コードと、それに埋め込まれた Java コードで構成されます。サーバーは、クライアントによってページが要求された後、これらの Java コードを処理し、生成された HTML ページをクライアントのブラウザに返します。
2. JSP 実行プロセス クライアントが JSP ページを要求 → JSP パーサーが *.jsp を解析して *.java にコンパイル → javac コマンドが *.class にコンパイル → クラスファイルを実行 → 応答して結果を返すクライアント
JSP コードには、JSP 要素とテンプレート データという 2 つのカテゴリが含まれています。テンプレートデータとは、JSP エンジンが処理しない部分、つまりタグ <%...%> 以外の部分を何も処理せずにそのまま渡すものを指します。
JSP を初めて実行するとき、または JSP ファイルを変更した後に実行するときは、JSP パーサーを呼び出して *.jsp ファイルをサーブレット プログラムにコンパイルするため、処理が遅くなります。
3. JSPの基本構文
1. 2 つのアノテーション タイプ
(1) HTML コメント JSP コードに HTML 形式のコメントを追加できます。このコメントはクライアントに送信されますが、ページには表示されません。構文は次のとおりです。
<!-- HTML 形式のコメント。クライアントでソース コードを表示するときに表示されます -->
<!-- このコメントは <%=programmer%> によって追加されました -->
プログラマがハッキラーである場合、クライアントに返されるコメントは <!-- このコメントはハッキラーによって追加されました --> です。
(2) JSP コメントは JSP コード内に記述されますが、クライアントには送信されません。
<%-- JSP コメント、このコメントは JSP のコンパイル時に無視されます --%>
<%-- /*スクリプトレット内の複数行のコメント*/ --%>
<%-- /**スクリプトレット内の複数行のコメント。javadoc*/ --%> を使用して Java ファイルから抽出できます。
<%-- JSP 単一行コメント--%>
2. 3 つのスクリプト要素
(1) グローバル変数の宣言
<%! int i=0; str="Hello World!";
(2)表現
JSP コードでは、変数の値を出力するために式がよく使用されます。変数の値はどこにでも出力できます。
<%! int a=1; int b=2; %>
<%=a+b%> <%=str>
PS: 式の終了文字として「;」記号を使用することはできません。ただし、スクリプトレットでは同じ式がセミコロンで終わる必要があります。
(3)スクリプトレット
スクリプト セグメントは、有効な Java プログラム セグメントを含めるために使用されます。
<% int b=3; ローカル変数
3. 3つのコマンド要素
(1)ページコマンド
<%@ page contentType="text/html;charset=utf-8"%>
JSP ファイルのグローバル属性を定義します。次のものが含まれます: language、extends、import、session、buffer、autoflush、isThreadSafe、info、errorPage、isErrorPage、contentType (サーバーからクライアントへの出力形式)
場所はページ上のどこにでも問題ありませんが、ページの上部に配置することをお勧めします。
language: スクリプト言語の種類を宣言します。現在、「java」のみを使用できます。
extends: JSP のコンパイル時に追加する必要がある Java クラスの完全名を示します。これは JSP のコンパイル能力を制限するため、使用には注意してください。
import: インポートする必要がある Java パッケージのリスト。
session: クライアントが HTTP セッションを必要とするかどうかを設定します。デフォルトは true です。
バッファ: バッファのサイズは、実行された JSP の出力をクライアント ブラウザに処理するために out オブジェクトによって使用されます。デフォルト値は 8Kb です。
autoFlush: バッファーがオーバーフローした場合に出力を強制するかどうかを設定します。 true (デフォルト値) に定義されている場合、出力は正常に行われます。 false に定義されている場合は、予期しないエラーが発生します。
isThreadSafe: JSP ファイルをマルチスレッドで使用できるかどうかを設定します。デフォルトは true です。
info: テキスト情報。これは、Servlet.getServletInfo() メソッドを使用して取得できます。
errorPage: 例外イベントを処理する JSP ファイルを設定します
sErrorPage: このページが例外イベントを処理するページであるかどうかを設定します。 true に設定すると、例外オブジェクトを使用できます。
contentType: MIMEタイプと文字エンコードセットを設定します。デフォルトの MIME タイプは text/html、デフォルトの文字セットは charset=ISO-8859-1 です。
1 つのページ内で複数の < %@page %> ディレクティブを使用できますが、import 属性を除き、他の属性は 1 回しか使用できません。
デフォルトで JSP によってインポートされるパッケージ。次のパッケージは JSP のコンパイル中にインポートされるため、JSP ファイルにこれらを導入するために page ディレクティブを使用する必要はありません。
java.lang.*
javax.servlet.*
javax.servlet.jsp.*
javax.servlet.http.*
(2)ディレクティブを含める
HTMLコード
<%@ インクルード ファイル = "相対パス" %>
include ディレクティブを使用して静的ファイルを JSP に組み込み、このファイル内の JSP ステートメントを解析します。
パスが「/」で始まる場合、このパスは主に JSP アプリケーションのコンテキスト パスを指します。
パスがファイル名またはファイル ディレクトリとして開かれた場合、このパスは使用されている JSP ファイルの現在のパスになります。
(3)taglibコマンド
HTMLコード
<%@ taglib uri = "TagLibrary" プレフィックス = "mypfx" %>
taglib ディレクティブを使用して、タグ ライブラリとそのカスタム プレフィックスを定義します。
uri:Uniform Resource Identifier は、ラベルのプレフィックス (相対パスまたは絶対パス) に基づいてカスタム ラベルに一意の名前を付けます。
prefix: カスタムラベルの接頭辞。 jsp、jspx、java、javax、servlet、sun、sunw をプレフィックスとして使用しないでください。これらは Sun によって予約されていると宣言されています。
4. 8つのアクションコマンド
(1) ページジャンプ:<jsp:forward>
<jsp:forward> タグは、ユーザー リクエストを含むリクエスト オブジェクトを、ある jsp ファイルから別の jsp ファイルに渡します。
合計 2 つの属性が含まれます
ページ属性は、転送されるファイルまたは URL を説明する式または文字列です。
<jsp:param>1 つ以上のパラメータを動的ファイルに送信します。 <jsp:param> タグを使用する場合、対象ファイルは動的ファイル (サーブレットや JSP など) である必要があります。
HTMLコード
<jsp:forward page=test.jsp>
<jsp:param name="ユーザー名" value="<%=user%>"/>
<jsp:param name="パスワード" value="12345678"/>
</jsp:forward>
request.getParameter("username") を通じてユーザー名を取得します。
(2)インクルードページ:<jsp:include>
<jsp:include> では、静的および動的 Web リソースを含めることができます。これら 2 つの含めた結果は異なります。
静的ファイルのみがインクルードされている場合、このインクルードは、< %@include% > と同様に、インクルードされたファイルの内容を JSP ファイルに追加するだけです。
動的 Web リソースがインクルードされている場合、インクルードされたファイルも JSP コンパイラーによって実行されます。
このインクルード ファイルが動的である場合は、 <jsp:param> を使用してパラメータとパラメータ値を渡すこともできます。
(3) Beanの作成:<jsp:useBean>
Bean インスタンスを作成し、その名前とスコープを指定します。
<jsp:useBean id="beanInstanceName"scope="page|request|session|application" class="package.className"/>
5つの属性が含まれます。
id: 定義したスコープ内のBean変数を確認し、プログラム内でこのBeanインスタンスを使用する際にそのidを使用します。 id の値は大文字と小文字が区別されます。
スコープ: Bean が存在するスコープと ID 変数名の有効なスコープ。デフォルト値はページです。
class: new キーワードとクラス コンストラクターを使用して、クラスから Bean をインスタンス化します。クラスは抽象クラスであってはならず、引数のないパブリックなコンストラクターを持たなければなりません。
type: この Bean が指定されたスコープにすでに存在する場合、type を使用すると、この Bean にデータ型が割り当てられます。 type が class または beanName なしで使用される場合、Bean はインスタンス化されません。
beanName: beanName は文字列 package.class または JSP 式にすることができ、その値は Beans.instantiate メソッドに渡されます。 type の値は、beanName、その基本クラス、またはそれが実装するインターフェイスと同じにすることができます。
(4) Beanプロパティの設定:<jsp:setProperty>
<jsp:setProperty name="beanInstanceName" property="*"|property="propertyName" value="string|<%=expression%>"|param="parameterName"/>
name: <jsp:useBean>で作成したBeanインスタンスの名前、つまりidを示します。
property: Bean 内のプロパティと一致します。
param: リクエストオブジェクト内のパラメータ名を参照し、対応する値をBean属性に設定します。
value: 指定された値を使用して Bean プロパティを設定します。この値は文字列または式にすることができます。文字列の場合は、Bean 属性の型に変換されます (たとえば、「0.98」は double 型の 0.98 に変換されます)。式の場合、その型は Bean 属性の型と一致している必要があります。
PS: Param 属性と value 属性を同じ <jsp:setProperty> 内で同時に使用することはできません。
(5) Beanプロパティの取得:<jsp:getProperty>
既存のBeanオブジェクトの属性値を取得し、ページ上に表示します。
<jsp:getProperty name="beanInstanceName property="propertyName"/>
name: 既存のオブジェクト インスタンスと同じ名前。
property: オブジェクト内のプロパティの名前
(6) アプレットプラグインを使用する: <jsp:plugin>
HTMLコード
<jsp:plugin type="applet" code="MeidaPlay.class" codebase="../classes">
<jsp:parmas>
<jsp:param name="way" value="ホール"/>
</jsp:params>
<jsp:フォールバック>
<p>アプレットをロードできません!</p>
</フォールバック>
</jsp:プラグイン>
<jsp:plugin> を使用してアプレットまたは Bean を挿入し、必要に応じて Java プラグインをダウンロードして実行します。
(7) パラメータを定義します: <jsp:param>
<jsp:include>、<jsp:forward>、<jsp:plugin> で使用できます。
(8) プラグインのエラー メッセージ: <jsp:fallback>
<jsp:plugin>プラグインが正常に表示できない場合は、プロンプトメッセージが表示されます。
3. JSP 組み込みオブジェクト
1. リクエスト: リクエスト オブジェクト。このオブジェクトは、ユーザーが送信した情報をカプセル化します。カプセル化された情報は、オブジェクトの対応するメソッドを呼び出すことで取得できます。
リクエストオブジェクトが顧客から送信された漢字を取得すると文字化けが発生し、特別な処理が必要となります。
一般的に使用される方法:
getParameter(StringparameterName): フォーム送信情報を取得します。
getProtocol(): 顧客が使用するプロトコルを取得します。
getServletPath(): 顧客が情報を送信したページを取得します。
getMethod(): 顧客が送信した情報を取得するメソッド。
getHeader(String str): HTTPヘッダファイルのaccept、accept-encoding、Hostの値を取得します。
getRermoteHost(): 顧客の IP アドレスを取得します。
getServerName: サーバー名を取得します。
getServerPort: サーバーのポート番号を取得します。
getParameterNames(): クライアントによって送信されたすべてのパラメータの名前を取得します。
2. 応答: 応答オブジェクトはクライアントの要求に動的に応答し、データをクライアントに送信します。
(1) contentType 属性に動的に応答する ページの contentType 属性を静的に設定するには、response.setContextType("text/html;charset=utf-8"); を使用します。
(2)レスポンスリダイレクト
response.sendRedirect("index.jsp");
3. セッション: セッションオブジェクト
(1)Sessionオブジェクトとは何ですか?
最初の JSP ページがロードされてセッション管理が完了すると、Session オブジェクトが自動的に作成されます。
クライアントがブラウザを開いてサーバーに接続すると開始され、クライアントがブラウザを閉じてサーバーから離れると終了します。これはセッションと呼ばれます。
(2) SessionオブジェクトのID
顧客がサーバー上の JSP ページに初めてアクセスすると、JSP エンジンはセッション オブジェクトを生成し、文字列型の ID 番号を割り当てて、この ID 番号をクライアントに送信し、Cookie に保存します。このようにして、Session オブジェクトは、クライアントがブラウザを閉じるまでサーバーによって変更され、クライアントとのセッションの対応が失われます。
(3)一般的な方法
public String getId(): Session オブジェクトの番号を取得します。
public void setAttribute(String str,Object obj): パラメーター オブジェクトを Session オブジェクトに追加します。
public Object getAttribute(): 属性名に基づいて Session オブジェクト内の属性を取得します。
public boolean isNew(): 新規顧客かどうかを判断します。
4. アプリケーション: アプリケーションオブジェクト
(1)Applicationオブジェクトとは何ですか?
この Application オブジェクトは、サーバーの起動後に生成され、顧客が訪問した Web サイトのさまざまなページ間を参照するときに、Application オブジェクトは同じであり、すべての顧客がこの組み込みの Application オブジェクトを共有します。
(2)一般的な方法
setAttribute(String key,Object obj): パラメータ オブジェクトを Application オブジェクトに追加します。
getAttibute(String key): 属性名に基づいて Application オブジェクトの属性を取得します。
5. Out: 出力オブジェクト
out オブジェクトは、クライアントにデータを出力するために使用される出力ストリームです。
out.print(): 各種データを出力します。
out.newLine(): 改行文字を出力します。
out.close(): ストリームを閉じます。
6. Config: 構成オブジェクト 通常、Config オブジェクトを使用して初期化構成情報を取得します。一般的に使用されるメソッドは、サーブレットの初期化中にパラメーターを取得する getInitParameter および getInitParameterNames です。
7.ページ: ページオブジェクト
ページ オブジェクトは、JSP ファイルによって生成された実行クラス オブジェクトを表すため、一般の読者にはお勧めできません。
8.PageContext: ページコンテキストオブジェクト
JSP によって導入された PageContext クラスを使用すると、ページの多くのプロパティにアクセスできるようになります。 pageContext 変数には、現在のページに関連付けられた PageContext オブジェクトの値が格納されます。 PageContext クラスには、getRequest、getResponse、getOut、getSession などのメソッドがあります。
9.例外: 例外オブジェクト
例外オブジェクトは、JSP ファイルの実行時に生成される例外オブジェクトを表します。このオブジェクトは通常の JSP ファイルで直接使用することはできません。
< %@page isErrorPage="true"%> は JSP ファイルで使用されます。これは、JSP ファイルの実行時に生成されたエラー オブジェクトはスローされ、 < %@pageisErrorPage="true"% > タグを使用してエラー オブジェクトをインターセプトする JSP によってのみインターセプトできるためです。最も一般的に使用されるメソッドは getMessage で、エラー情報を取得するために使用されます。
4. インスタンスのログイン ページ:index.jsp
HTMLコード
<%@ ページ言語="java" pageEncoding="UTF-8" contentType="text/html; charset=UTF-8" %>
<html>
<頭>
<title>システムログイン</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<link href="css/vbulletin.css" rel="stylesheet" type="text/css">
<style type="text/css">
.btn {
フォントファミリー: "Tahoma"、"宋体";
フォントサイズ: 9pt;
カラー: #001E3C;
ボーダーボトム: #6794BC 1px ソリッド;
ボーダー左: #8BB8E0 1px ソリッド。
ボーダー右: #6794BC 1px ソリッド;
ボーダートップ: #8BB8E0 1px ソリッド。
背景画像: url(image/buttonbg.gif);
カーソル: 手;
フォントスタイル: 通常;
パディング左: 3px;
パディング右: 3px;
}
</スタイル>
<script type="text/javascript">
関数 doLogin(){
var vform = document.loginform;
if(!loginform.username.value){
alert("ユーザー名を入力してください!")
戻る;
}
if(!loginform.password.value){
alert("パスワードを入力してください!")
戻る;
}
vform.submit();
}
</script>
</head>
<body topmargin="0" leftmargin="0" >
<form action="receive.jsp" name="longinForm" Method="post">
<テーブル幅="100%" 高さ="100%">
<tr>
<td align="center" valign="middle">
<TABLE id="フォーム1"
cellpacing="0" cellpadding="0" border="0" style="width: 500;">
<CAPTION style="表示: なし">
</CAPTION>
<TR>
<TD>
<TABLE width="100%" height="100%" cellpacing="0"
cellpadding="0" border="0" style="table-layout:fixed">
<TR>
<TD valign="トップ">
<FIELDSET id="form1_group0" style="幅: 100%;">
<LEGEND>システムログイン</LEGEND>
<DIV>
<DIV スタイル="幅: 100%; 高さ: 100%">
<TABLE width="100%" セル間隔="0"
cellpadding="4" border="0" style="table-layout:fixed;">
<コログループ>
<COL width="100"></COL>
<COL width="50%"></COL>
<COL width="100"></COL>
<COL width="50%"></COL>
</コルグループ>
<TR>
<TD align="right">
ユーザー名
</TD>
<TD class="InnerTableContentCell">
<input type="text" name="ユーザー名"
スタイル="幅: 100%;">
</TD>
<TD align="right">
パスワード
</TD>
<TD>
<input type="パスワード" name="パスワード"
スタイル = "幅: 100%;" />
<input type="hidden" name="action2" value="0">
</TD>
</TR>
<TR>
<TDcolSpan="4"
整列 = "右">
<input type="button" name="login" value="ログイン" onclick="this.form.submit();" class="btn"/>
</TD>
</TR>
</テーブル>
</DIV>
</DIV>
</フィールドセット>
</TD>
</TR>
</テーブル>
</TD>
</TR>
</テーブル>
</td>
</tr>
</テーブル>
</form>
</body>
</html>
データ受信ページ:receive.jsp
HTMLコード
<%@ ページ言語="java" pageEncoding="UTF-8" contentType="text/html; charset=UTF-8" info="アクション タグ"%>
<jsp:useBean id="userVo" class="exercise.vo.UserVo"scope="request">
<jsp:setProperty name="userVo" property="name" param="username"/>
<jsp:setProperty name="userVo" property="password" param="password"/>
</jsp:useBean>
<html>
<頭>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8" >
<link href="css/vbulletin.css" rel="stylesheet" type="text/css">
</head>
<本文>
これは私の JSP ページです。<br>
<hr><jsp:getProperty> を使用して、フォームに送信された値を取得します。<br>
名前:<jsp:getProperty property="name" name="userVo"/><br>
パスワード:<jsp:getProperty property="password" name="userVo"/>
<br><br><時間>
<%
out.println("vo オブジェクトから直接取得:<br> name:"+userVo.getName()+
"<br>パスワード:"+userVo.getPassword()+"<br>");
String serviceName = request.getServerName();//1.jsp 内のリクエスト オブジェクト
out.println("<br><hr>サーバー名: "+serviceName);
out.println("<br>MIME タイプ: "+response.getContentType());//2.jsp 内部応答オブジェクト
session.setAttribute("sessionName","jsp 内のセッション オブジェクト");//3.jsp 内部セッション オブジェクト
out.println("<br>セッション オブジェクト: "+session.getAttribute("sessionName"));//4.jsp 内部出力オブジェクト
pageContext.setAttribute("pageContext","コンテキスト環境参照");//5.jsp内のpageContextオブジェクト
//6.アプリケーション
//7. ServletConfig インスタンスを設定します。
//8. ページ java.lang.Object のインスタンス
//9. 例外は、ページ ディレクティブで isErrorPage=true を指定したページで java.lang.Throwable のインスタンスを使用する必要があります。
文字列情報 = pageContext.getServletContext().getServerInfo();
out.println("ページコマンドの情報属性を取得します: "+info);
%>
</body>