(p86) はじめてのJSP
JSPは コンパイルが不要で、web . xml への登録も不要。
作成した . JSP ファイルはコンテキスト名直下(entryフォルダ内)に置く。
tomcat は起動している必要がある。
htmlファイルと同じような特徴です。
JSPのコードもHTMLの中に埋め込むような格好になっている。
コンテキストとは? コンテキスト名とは?(復習)
http : // localhost : 8080 / entry / hello.txt
プロトコル サーバ名 ポート番号 コンテキスト名 ファイルのパス
JSPの式(Expression)とは、
” <%= ”、” %>” で囲む。
(p88) JSPはサーブレット
この章の始め(p86)に、『JSPはサーブレットと違って…』という記述があったの
だけれど、JSPはサーブレットらしい。クライアントからリクエストが発生した際
コンテナは、
①” . jsp ” ファイルを ”. java”ファイルに変換し、
②その” . java ” ファイルがコンパイルされ、
③”. class”ファイルが生成され、
④”サーブレットのインスタンスが生成される。
という4段階の過程を踏むらしい。
よって、最初にアクセスがあった場合のみ、変換やコンパイルで時間が長くかかるらしい。
これまで、サーブレット(”○○servlet . java” ) を記述した場合、
意識して WEB-INF フォルダ内の src フォルダ を探し、そこに保存してから、
コンパイルするという(class フォルダへ class ファイルの保存は自動的だが)。
少々面倒なことを意識し、 さらには、web . xml に登録しなければならなかったが、
JSP はそれらが不要と言うことですね。
ちなみにコンテナが①~④を実行してくれますが、
” . java ” ファイルや、”. class ” ファイルは、
使用中の tomca tフォルダ > work フォルダ >Catalina フォルダ >localhost フォ
ルダ >entry フォルダ >org フォルダ >apache フォルダ >jsp フォルダ 内に保存
されています。
(p89) JSPを変更した場合
サーブレットを変更した場合は tomcat を再起動(Webアプリケーションをリロード)
する必要がありましたが、JSPの場合は不必要。 なぜ?
それは、JSPにアクセスした時に、再び ①JSPの変換、②javaコードのコンパイル、
③classファイルの生成、④サーブレットインスタンスの生成が行われるから。
(p90) スクリプトレットを使ってみよう
スクリプトレットとは、見た感じ ”JSPの式” に似ている。
<%= ○○○ %> … JSPの式
<% ○○○ %> … スクリプトレット
スクリプトレットにはjavaのコードを記述できる。
(p91) 出力用の変数out
out はオブジェクト? 変数? 混乱してきた。
ググッたら、 わかりやすいブログを見つけたので勉強させてもらいました。
稲員勇輝さんありがとうございました。
コンテナは、
" . jsp ファイル” をサーブレットに変換する際に、予めよく使うであろう変数
( out を含む) を宣言してくれているらしい。 よって、JSPコード内でいちいち
out を宣言しなくてもすぐ使えるようになっている。
これも JSP が楽チンであると言う要素ですね。
この out 変数 には、
JspWriter . class 型のインスタンス(インスタンスのアドレス)が入るようになっている。
JspWriter . class 型を詳しく調べたわけではありませんが、どうやらブラウザへの
レスポンスインスタンス(response)に出力する機能を持っているようですね。
” out ” はオブジェクトと短絡的にイメージしていたが、厳密には
” out ” は インスタンスが存在するメモリー上のアドレスが入るわけで、
変数ですね。
たぶん小生の認識で間違いないと思うのですが、いろいろ確認してみてください。
(p94) JSPのコメント
<%-- JSP Comment --%> これがJSPのコメント
<!-- JSP Comment --> これはHTMLのコメント
JSPをサーブレット(javaコード)に変換すると、 javaコードの中にHTMLを生成するが、
そのHTMLの中に <%-- JSP Comment --%>は存在しない。
<!-- JSP Comment --> はブラウザでは表示されないが、HTML には存在する。
(p95)コンテンツタイプの指定
JSPでコンテンツタイプを指定するには、” page ディレクティブ ” を使用する。
<%@page contentType="text/html ; charset=Windows-31J" %>
ディレクティブとは?
<%@ ○○○ %>で記述するタグを言う。
これに、page が付く ( <%page ○○○ %> )と、
ページディレクティブとなる。
(p97) import宣言
外部クラスをインポートする場合は、page ディレクティブの import 属性を使う。
ここでは、現在時刻を表示する訳だが、”java.util.Date”クラスが必要となり、
JSPコードの最初の段階で、
<%@page import= "java.util.Date" %> でDateクラスをインポートしている。
このおかげで、<%= new Date() %> の記述で、日付が求められる。
このインポートの記述は、複数行に分けて、複数インポートすることもできる。
また、ワイルドカード(*)により1行で複数インポートすることもできる。
javax.servlet、javax.servlet.http、javax.servlet.jsp パッケージについては、
デフォルトでインポートされるので記述はいらない。
(p102) コンテキストパスを理解する
”コンテキスト” とは、個々のWebアプリケーション(これまでの内容では ”entry”)
|← リソースのURL →|
|← WebアプリケーションのURL →|
|← サーバのURL →|
http : // localhost : 8080 / entry / hello.txt
↑ ↑ ↑ ↑ ↑
サーバ名 ポート番号 コンテキスト名 ※ ファイルのパス
※コンテキストルート コンテキストパス = コンテキストルートまでの道のり
コンテキストルートには index.html ファイルなどが配備してありますね。
よって、context.jspでは、
サーバのルート("/" = http://localhost:8080)では、
TOMCATのページが表示され、
リクエストインスタンスの getContextPath() メソッドが返す文字列(”/entry” ※)
では、index . html が表示される。
※ 絶対URLに直すと ”http://localhost:8080/entry” と言うことだが、
少々もやもやしている。
(p105) JSPからサーブレットを呼び出す
テキスト通りコードを入力するも、期待通りの結果は得られない。
”サーバルート”からのパス” は ”servlet”を削除(小生のtomcat7では
invoker を利用できない)することで、表示されるようになったが、
”カレントからのパス” は どのように修正してもエラーとなる。
そもそも、ここで言う ”カレント(. jspファイルから?)からの” の意味が良く
わからない。理解していないのか?!
いろいろ試した結果、
<p><a href="../../../entry/HelloServlet">HelloServlet</a>
(カレントからのパス)
と変更することで期待通りの結果が表示された。
JSPコードからjavaコードに変換されて、コンパイルで生成されたクラスファイルは
tomcat7\work\Catalina\localhost\entry\org\apache\jsp
ここに保存されているということですかね。
まだ、知識が浅いようだ。
取り敢えず先へ進むこととする。
情報処理 再チャレンジ ブログ ホーム へ
JSPは コンパイルが不要で、web . xml への登録も不要。
作成した . JSP ファイルはコンテキスト名直下(entryフォルダ内)に置く。
tomcat は起動している必要がある。
htmlファイルと同じような特徴です。
JSPのコードもHTMLの中に埋め込むような格好になっている。
コンテキストとは? コンテキスト名とは?(復習)
http : // localhost : 8080 / entry / hello.txt
プロトコル サーバ名 ポート番号 コンテキスト名 ファイルのパス
JSPの式(Expression)とは、
” <%= ”、” %>” で囲む。
(p88) JSPはサーブレット
この章の始め(p86)に、『JSPはサーブレットと違って…』という記述があったの
だけれど、JSPはサーブレットらしい。クライアントからリクエストが発生した際
コンテナは、
①” . jsp ” ファイルを ”. java”ファイルに変換し、
②その” . java ” ファイルがコンパイルされ、
③”. class”ファイルが生成され、
④”サーブレットのインスタンスが生成される。
という4段階の過程を踏むらしい。
よって、最初にアクセスがあった場合のみ、変換やコンパイルで時間が長くかかるらしい。
これまで、サーブレット(”○○servlet . java” ) を記述した場合、
意識して WEB-INF フォルダ内の src フォルダ を探し、そこに保存してから、
コンパイルするという(class フォルダへ class ファイルの保存は自動的だが)。
少々面倒なことを意識し、 さらには、web . xml に登録しなければならなかったが、
JSP はそれらが不要と言うことですね。
ちなみにコンテナが①~④を実行してくれますが、
” . java ” ファイルや、”. class ” ファイルは、
使用中の tomca tフォルダ > work フォルダ >Catalina フォルダ >localhost フォ
ルダ >entry フォルダ >org フォルダ >apache フォルダ >jsp フォルダ 内に保存
されています。
(p89) JSPを変更した場合
サーブレットを変更した場合は tomcat を再起動(Webアプリケーションをリロード)
する必要がありましたが、JSPの場合は不必要。 なぜ?
それは、JSPにアクセスした時に、再び ①JSPの変換、②javaコードのコンパイル、
③classファイルの生成、④サーブレットインスタンスの生成が行われるから。
(p90) スクリプトレットを使ってみよう
スクリプトレットとは、見た感じ ”JSPの式” に似ている。
<%= ○○○ %> … JSPの式
<% ○○○ %> … スクリプトレット
スクリプトレットにはjavaのコードを記述できる。
(p91) 出力用の変数out
out はオブジェクト? 変数? 混乱してきた。
ググッたら、 わかりやすいブログを見つけたので勉強させてもらいました。
稲員勇輝さんありがとうございました。
コンテナは、
" . jsp ファイル” をサーブレットに変換する際に、予めよく使うであろう変数
( out を含む) を宣言してくれているらしい。 よって、JSPコード内でいちいち
out を宣言しなくてもすぐ使えるようになっている。
これも JSP が楽チンであると言う要素ですね。
この out 変数 には、
JspWriter . class 型のインスタンス(インスタンスのアドレス)が入るようになっている。
JspWriter . class 型を詳しく調べたわけではありませんが、どうやらブラウザへの
レスポンスインスタンス(response)に出力する機能を持っているようですね。
” out ” はオブジェクトと短絡的にイメージしていたが、厳密には
” out ” は インスタンスが存在するメモリー上のアドレスが入るわけで、
変数ですね。
たぶん小生の認識で間違いないと思うのですが、いろいろ確認してみてください。
(p94) JSPのコメント
<%-- JSP Comment --%> これがJSPのコメント
<!-- JSP Comment --> これはHTMLのコメント
JSPをサーブレット(javaコード)に変換すると、 javaコードの中にHTMLを生成するが、
そのHTMLの中に <%-- JSP Comment --%>は存在しない。
<!-- JSP Comment --> はブラウザでは表示されないが、HTML には存在する。
(p95)コンテンツタイプの指定
JSPでコンテンツタイプを指定するには、” page ディレクティブ ” を使用する。
<%@page contentType="text/html ; charset=Windows-31J" %>
ディレクティブとは?
<%@ ○○○ %>で記述するタグを言う。
これに、page が付く ( <%page ○○○ %> )と、
ページディレクティブとなる。
(p97) import宣言
外部クラスをインポートする場合は、page ディレクティブの import 属性を使う。
ここでは、現在時刻を表示する訳だが、”java.util.Date”クラスが必要となり、
JSPコードの最初の段階で、
<%@page import= "java.util.Date" %> でDateクラスをインポートしている。
このおかげで、<%= new Date() %> の記述で、日付が求められる。
このインポートの記述は、複数行に分けて、複数インポートすることもできる。
また、ワイルドカード(*)により1行で複数インポートすることもできる。
javax.servlet、javax.servlet.http、javax.servlet.jsp パッケージについては、
デフォルトでインポートされるので記述はいらない。
(p102) コンテキストパスを理解する
”コンテキスト” とは、個々のWebアプリケーション(これまでの内容では ”entry”)
|← リソースのURL →|
|← WebアプリケーションのURL →|
|← サーバのURL →|
http : // localhost : 8080 / entry / hello.txt
↑ ↑ ↑ ↑ ↑
サーバ名 ポート番号 コンテキスト名 ※ ファイルのパス
※コンテキストルート コンテキストパス = コンテキストルートまでの道のり
コンテキストルートには index.html ファイルなどが配備してありますね。
よって、context.jspでは、
サーバのルート("/" = http://localhost:8080)では、
TOMCATのページが表示され、
リクエストインスタンスの getContextPath() メソッドが返す文字列(”/entry” ※)
では、index . html が表示される。
※ 絶対URLに直すと ”http://localhost:8080/entry” と言うことだが、
少々もやもやしている。
(p105) JSPからサーブレットを呼び出す
テキスト通りコードを入力するも、期待通りの結果は得られない。
”サーバルート”からのパス” は ”servlet”を削除(小生のtomcat7では
invoker を利用できない)することで、表示されるようになったが、
”カレントからのパス” は どのように修正してもエラーとなる。
そもそも、ここで言う ”カレント(. jspファイルから?)からの” の意味が良く
わからない。理解していないのか?!
いろいろ試した結果、
<p><a href="../../../entry/HelloServlet">HelloServlet</a>
(カレントからのパス)
と変更することで期待通りの結果が表示された。
JSPコードからjavaコードに変換されて、コンパイルで生成されたクラスファイルは
tomcat7\work\Catalina\localhost\entry\org\apache\jsp
ここに保存されているということですかね。
まだ、知識が浅いようだ。
取り敢えず先へ進むこととする。
情報処理 再チャレンジ ブログ ホーム へ
0 件のコメント:
コメントを投稿