サーブレット&JSPの件(十)

6940 ワード

前に議論した主な内容はservletで、実は私の本意はservletだけを論述することですが、jspはjava web開発に不可欠な一環である以上、多く勉強しても悪いところはありません.以前の内容ではservletを使用してダイナミックなWebページを生成する場合、htmlラベルをコードに出力する必要があることがわかりました.また,静的コードと動的コードを混在させなければならない.servletを使用してダイナミックWebページを開発すると、プログラマーとWeb編集者は一緒に仕事をすることができません.Web編集者はjavaを知らない可能性があるのでservletコードを変更することはできません.そのため、sun社(甲骨文に買収されたのは残念だ.)がJSP(java server pages)を発売した.
概要
asp、jspはaspと同じようにhtmlファイルにスクリプトコードを埋め込み、動的なコンテンツを生成するために使用されていることを知っているかもしれませんが、jspはjava文を埋め込んでいます.jspファイルは、ユーザが最初に要求するとservletにコンパイルされ、このservletによってユーザ要求が処理されるため、jspは実行時のservletと見なすこともできる.ここまで言うと、なぜjsp、jsp、servletの違いを使うのか疑問に思うかもしれません.
1)servletは、クライアントおよび他のアプリケーションの中間層としてブラウザの要求をサーバ上で実行および解釈する.servletは主に動的コンテンツを静的コンテンツに混ぜてhtmlを生成する.2)jspページはhtmlにjavaスクリプトコードとjspタグを埋め込み、ファイル長が短くなり、フォーマットがより明確になります.また,jspは静的と動的のコンテンツを区別し,コンテンツと表現の分離を実現した.3)jspを使用すると、各ファイルを個別に構成する必要はなく、拡張子が.jspであれば、jspコンテナ(すなわちservletコンテナ)が自動的に認識され、servletに変換されます.
jspの動作メカニズム
簡単なjspファイルを作成します.まずD:apache-tomcat-7.0.33webappsディレクトリの下にフォルダHelloを新規作成し、HelloフォルダにフォルダWEB-INFとファイルhello.jspを新規作成します.hello.jspコードは次のとおりです.
<html>
	<head><title>Hello</title></head>
	<body>
	<%
		out.println("Hello, JSP!");
	%>
	</body>
</html>
簡単ですね.次にtomcatを起動し、ブラウザのURLバーに入力します.http://localhost:8080/Hello/hello.jspあ、ページにHello、JSP!が表示されます.この中でいったいどんな過程を経験したのだろうか.D:apache-tomcat-7.0.33workCatalinalocalhostディレクトリを開き、Helloフォルダがあることを発見し、それを開き、Helloorgapachejspフォルダに2つのファイルが表示されました:hello_jsp.javaとhello_jsp.class.これはhello.jspにアクセスするとjspコンテナによって生成されます.
jspコンテナは、jspページのライフサイクルの2つのフェーズを管理します.変換フェーズと実行フェーズです.リクエストが来ると、jspコンテナはまずjsp構文が正しいかどうかを検証し、正しい場合はjspファイルをservletファイルに変換し、javacコンパイルを呼び出して.classファイルを生成します.これは変換フェーズです.次に、servletコンテナは変換後のservletクラスをロードし、1つのオブジェクトがクライアントの要求を処理することをインスタンス化し、要求が完了すると、応答オブジェクトがjspコンテナに受信され、コンテナはhtml形式の応答メッセージをクライアントに送信し、これが実行段階である.
私たちは今jspの文法の知識を勉強します.
jspページは、要素とテンプレートデータの2つの部分に分かれています.要素はjspコンテナで処理しなければならない部分であり、テンプレートデータはjspコンテナで処理しない部分である.jspページのhtml文などです.jspの要素には主に3つのタイプがあります.命令要素、スクリプト要素、アクション要素です.
jspの要素タイプ
1)指令要素(directive element)
命令要素は、変換フェーズにjspページ全体に関する情報を提供するために使用され、命令は現在の出力ストリームに出力を生成しない.構文の形式は次のとおりです.
<%@ directive {attr="value"}* %>
命令要素は主にpage、include、taglibの3種類がある.
Page命令構文は次のとおりです.
<%@ page attr1="value1" attr2="value2" ...%>

xml形式の構文は次のとおりです.
<jsp:directive.page attr1="value1" attr2="value2" .../>

Page命令には15の属性があります.language、extends、import、session、buffer、autoFlush、isThreadSafe、info、errorPage、isError、contentType、pageEncoding、isELIgnored、deferredSyntaxAllowedAsLiteral、trimDirectiveWhitespaces.多いですよね?目まぐるしいですよね?実は大体知っていればいいのです.具体的に使うときは資料を調べることができます.ここでいくつか紹介します.
languageは、javaとしてスクリプト要素で使用されるスクリプト言語を指定します.extendsは、jspページ変換後のservletクラスがどのクラスから継承されるかを命令するために使用されます.importは、スクリプト環境で使用できるjavaクラスを指定します.複数のクラスが参照されている場合は、クラスの間をカンマで区切ります.sessionは、jspページがtrueまたはfalseの値でセッションに参加するかどうかを指定します.ErrrorPageは、jspページに異常が発生した場合に転向するエラー処理ページを指定します.ただし、これを使用してエラー処理ページを指定した場合、web.xmlファイルで定義されたエラー処理ページは使用されません.contentTypeは、応答するjspページのMIMEタイプと文字符号化を指定します.pageEncodingは、jspページで使用される文字符号化を指定するために使用されます.
includeコマンドは、jspページ、htmlページ、テキストファイル、javaコードのセグメントであってもよいjspページに静的にファイルを含めるために使用されます.include命令構文は次のとおりです.
<%@ include file="relativeRULspec" %>

xml形式の構文は次のとおりです.
<jsp:directive.include file="relativeRULspec" .../>

fileプロパティの値は、現在のjspファイルに対するURLです.(注意:元のjspファイルと競合しないようになどのラベルを使用しないほうがいいです.)
taglibコマンドは、ページにユーザー定義のラベルを使用することを許可します.taglib命令構文は次のとおりです.
<%@ taglib (uri="tagLibraryURI" | tagdir="tagDir") prefix="tagPrefix" %>
xml形式の構文は、次のとおりです.
<jsp:directive.taglib (uri="tagLibraryURI" | tagdir="tagDir") prefix="tagPrefix" .../>
taglib命令には、uri、tagdir、prefixの3つの属性があります.uriの唯一の識別と接頭辞に関連するラベルライブラリ記述子は,絶対火を対向させるURIを可能にする.tagdirは、プレフィックスが/WEB-INF/tags/ディレクトリまたはそのアルファベットの下にインストールされているラベルファイルを識別するために使用されることを示す.prefixは、複数のカスタムラベルを区別するためにprefix:tagname形式の文字列接頭辞を定義します.
2)スクリプト要素(scripting element)
スクリプト要素には、宣言、スクリプトセグメント、式の3つのセクションがあります.
宣言スクリプト要素jspページスクリプト言語で使用される変数とメソッド宣言を宣言するには、java言語の構文に従う完全な宣言文でなければなりません.現在の出力ストリームに出力は生成されません.構文は次のとおりです.
<%! declaration(s)%>
xml形式の宣言は次のとおりです.
<jsp:declaration> declaration(s) </jsp:declaration>
注:変数を宣言するときは、変数の後ろにあることを忘れないでください.番号.宣言は現在のjspページでのみ有効です.
スクリプトセグメントは、リクエスト処理中に実行されるjavaコードセグメントです.構文の形式は次のとおりです.
<% scriplet %>

xml形式のスクリプトセグメントは次のとおりです.
<jsp:scriplet> scriplet </jsp:scriplet>
式スクリプト要素はjava言語の完全な式であり、要求処理時に計算され、計算結果は文字列に変換され、現在の出力ストリームに挿入されます.構文は次のとおりです.
<%= expression %>

xml形式の構文は次のとおりです.
<jsp:expression> expression </jsp:expression>
注:式を書くときは、式の後に句読点を追加しないでください.
3)動作要素(action element)
アクション要素は、リクエスト処理フェーズに情報を提供します.jsp 2.0仕様では、20の標準的な動作要素が定義されています.
javaBeanへのアクセスに使用します.は、他のラベルに名前と値のペアとして追加情報を提供し、とともに使用します.フォーマットは次のとおりです.
<jsp:param name="name" value="value" />
nameはパラメータ名を与え、valueはパラメータ値を与え、式であってもよい.
は、現在のページに静的および動的リソースを含めるために使用され、含まれるページが実行されると、要求処理は呼び出しページで実行されます.を使用すると、実行時に現在のリクエストを静的リソース、jsp、ページ、またはservletに転送できます.リクエストが転送されたリソースは、jsp送信リクエストと同じコンテキストにある必要があります.
他の動作要素はここでは後述しない.興味があれば自分で資料を見ることができます.
4)コメント
htmlコメント構文は次のとおりです.
<!-- comments -->
jsp注釈構文は、次のとおりです.
<%-- comments --%>
また、java言語自体の注釈メカニズムも使用できます.以下のようにします.
<% // comments %>
<% /* comments*/ %>
JSPの隠しオブジェクト
たとえばhello.jspで使用するoutオブジェクトはその1つであり、outのほかに8つの隠しオブジェクトがあります.この9つの隠しオブジェクトとそのタイプを表1に示す.
オブジェクトを隠す
を選択します.
request
javax.servlet.http.HttpServletRequest
response
javax.servlet.http.HttpServletResponse
pageContext
javax.servlet.jsp.PageContext
session
javax.servlet.http.HttpSession
application
javax.servlet.ServletContext
out
javax.servlet.jsp.JspWriter
config
javax.servlet.ServletConfig
page
java.lang.Object
exception
java.lang.Throwable
表1 JSP隠しオブジェクトのタイプ
転載は出典を明記してください.http://blog.csdn.net/iAm333