JavaSer/javadrive/JSP

Last-modified: 2010-10-15 (金) 18:45:17

JavaサーブレットとJSPの違い

 http://oshiete.goo.ne.jp/qa/488861.html
 1)JSPはHTMLの記述の中にJAVAのコードを記述することでコンパイルなしで※
   データの受取りや動的なページの生成を行う技術
   ※内部的にはJSPコンテナというモジュールによって
    自動的にコンパイルされServletに変換されている
    →JSPもサーバー側で動作する

 2)Servletを用いても動的なHTMLは作れるが、以下の問題点がある
   ・HTMLのコード全てをServletから送信しなければならないので面倒
   ・HTMLは画面デザインに関係してくるのでコンパイルが必要なServletに
    記述していては画面の変更などをHTMLファイルのように簡単に行えない

 3)JSPはコンパイルをせずHTMLファイルの中に直接JAVAコードを記述するだけで
   動的なページを生成できるのでデザインの変更などが行いやすい
   ただし、あまりJAVAコードを記述すると内容が複雑となり管理しにくくなる。

 4)そこで役割としてサーバ内部の処理はServletで行い、
   画面表示はJSPで行うというのが一般的な方法

JSPの使い方

 <%@ page contentType="text/html;charset=Shift_JIS" %>

 <html>
  <head>
   <title>Hello!!</title>
  </head>
  <body>
   <% out.println("Hello!!"); %>  ←このように<%~%>で囲む
  </body>
 </html>

 ※先頭の行はディレクティブというもの(後述)
 ※サーブレットのように、web.xmlなどないので楽。
 ※localhostフォルダへのxxx.xmlの登録は必要
 ※HTMLと同じだが、拡張子は.jspである。
 ※初回起動時は、サーブレットへの変換を行うため若干の時間を要する。
 ※「out」と言う変数を特に宣言せずに利用している。
  これは暗黙オブジェクトと呼ばれるもので、JSPページで
  最初から利用できるようになっているオブジェクトである

JSPの変換した後

 JSPはサーブレットに変換されるが、
 「(Tomcatがインストールされたディレクトリ)\work\Catalina\localhost\」に
 .javaと.classが保存される。

ディレクティブ

 日本語にすると「指示文」という意味。JSPページのヘッダーのようなもの。

 構文は以下の通り
  <%@ ディレクティブ名 属性名1="値1" 属性名2="値2" ... %>

 ディレクティブ名:「page」「include」「taglib」の3つがある
 属性名:ディレクティブ名ごとに異なる
     http://www.javadrive.jp/servlet/jsp_directive/を参照
     MIMEタイプを指定するものや、Javaクラスのimportなどを設定できる
     また、他のJSPをincludeすることも可能

スクリプティング

 1)スクリプトレット
   スクリプトレットとは、JSPの中でJavaのコードを記述する部分のこと

  <%
   Javaのコード
  %>

  スクリプトレットが1つのJSPページ内で分かれていても
  変数名などは共有して使われる

 2)変数値出力の省略形
   <%= 変数名など %>

   改行は入らない

 3)変数の宣言方法

  <%!
   変数や定数の宣言
  %>

  ・サーブレットに変換されたときに、
   Javaソースでの変数宣言が行頭になる
   (_jspServiceメソッドよりも前)

  ・再読み込みしても値がクリアされない
   →初期化は一回だけ。
    スクリプトレット内の変数宣言は、その位置で初期化されるので
    再読み込みで値が初期化されてしまう

 4)メソッドの宣言
  <%!
   メソッドの宣言
  %>

  ・メソッドを呼び出しを使えるようになる
  ・暗黙オブジェクト(outなどの変数)は使えない
   →_jspServiceメソッドで宣言されているから

 5)コメント
  <!-- HTMLのコメント -->
  <%-- JSPのコメント --%>

  ・HTMLのコメントはクライアントに表示されるが、
   JSPのコメントはクライアントに表示されない

  ・もちろん、スクリプトレット中なら、 
   // や /* */ が使える

標準アクション

 JSPで最初から用意されているアクション
 ページの転送や結果のインクルードなど、良くつかわれる機能は
 Javaコードがすでに用意されていて、それを使える

 <jsp:アクション名 属性名1=属性値1 属性名2=属性値2 ... >

 転送の例)
  <jsp:forward page="forwardTo.jsp" />
 ※パラメータを渡して転送することも可能

JSPの余談

 "\n"やout.printlnは、テキストレベルでの改行は行われるが、
 <br>に変換されるわけではないので、
 ブラウザ上での見た目に差はない