トップ 一覧 ping 検索 ヘルプ RSS ログイン

2.3 配備記述子の要素に対応する正しい構造を構築するの変更点

  • 追加された行はこのように表示されます。
  • 削除された行はこのように表示されます。
[j2ee_1_4.xsd|http://java.sun.com/xml/ns/j2ee/j2ee_1_4.xsd]
[web-app_2_4.xsd|http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd]
[jsp_2_0.xsd|http://java.sun.com/xml/ns/j2ee/jsp_2_0.xsd]
!error-page
エラーコードもしくは例外をWebアプリケーションのリソースと結びつける
::error-code
例えば 404 のような、HTTPエラーコードを指定する

::exception-type
[javaクラスまたはインターフェース名|http://java.sun.com/docs/books/jls/third_edition/html/binaryComp.html#13.1]を指定する。この名前は、Class.forName() から利用される
::location
'/' で始まる、Webアプリケーションルートからの相対パスでリソースを指定する
::例

*error-page は複数指定できる
*error-code または exception-type のどちらかを指定

web.xml
 <error-page>
   <error-code>404</error-code>
   <location>/jsp/Section2_3_error.jsp</location>
 </error-page>
   
 <error-page>
   <exception-type>java.lang.NumberFormatException</exception-type>
   <location>/jsp/Section2_3_error.jsp</location>
 </error-page>

*サーブレットコンテナが、エラー発生時に以下の情報をリクエストにセットする
,内容,キー
,ステータスコード,javax.servlet.error.status_code
,例外の型,javax.servlet.error.exception_type
,メッセージ,javax.servlet.error.message
,例外,javax.servlet.error.exception
,リクエストURI,javax.servlet.error.request_uri
,例外が発生したサーブレット,javax.servlet.error.servlet_name

jsp
 ステータスコード
 <%= request.getAttribute("javax.servlet.error.status_code") %>

*Internet Explorer の場合、[Microsoft HTTP エラーメッセージを簡易表示する|http://support.microsoft.com/?scid=kb;ja;218155&spid=2073&sid=360] にチェックが入っていると、エラーコードに対応する応答バイト数が閾値を超えない場合、(エラーコードにより、256、512・・・) web.xml に、error-page を設定しても、 Microsfot のデフォルトのエラーページが表示されてしまうので注意
{{ref_image ie_http_err.jpg}}
!init-param
サーブレット、フィルター 初期化用の名前と値のペアを指定する
::description
説明等の記述
::param-name
パラメータ名
::param-value
パラメータ値
::例
web.xml
 <servlet>
   <servlet-name>Section2_3Servlet</servlet-name>
   <servlet-class>servlet.Section2_3Servlet</servlet-class>
   <init-param>
     <param-name>auther</param-name>
     <param-value>YAGI Hiroto</param-value>
   </init-param>
   <init-param>
     <param-name>created</param-name>
     <param-value>2006-04-16 02:31</param-value>
   </init-param>
 </servlet>

servlet.Section2_3Servlet.java
*ServletConfig経由で、初期化パラメータを取得できる
*GenericServletクラスは、ServletConfigを実装しているため、HttpServletから直接、getInitParameter()メソッドなど利用することも可能

 ServletConfig config = getServletConfig();
 Enumeration paramNames = config.getInitParameterNames();
 while (paramNames.hasMoreElements()) {
   String key = (String) paramNames.nextElement();
   out.print( config.getInitParameter(key) );
 }
!mime-mapping
拡張子とMIMEタイプのマッピングを定義
[RFC 2045 Multipurpose Internet Mail Extensions|http://www.ietf.org/rfc/rfc2045.txt]
[MIME Media Types|http://www.iana.org/assignments/media-types/]
::extension
拡張子
::mime-type
MIMEタイプ
::例

 <mime-mapping>
   <extension>csv</extension>
   <mime-type>application/vnd.ms-excel</mime-type>
 </mime-mapping>

上記のように指定すると、レスポンスヘッダーにContent-Type が出力される

 HTTP/1.1 200 OK
 Server: Apache-Coyote/1.1
 ETag: W/"240-1145124316909"
 Last-Modified: Sat, 15 Apr 2006 18:05:16 GMT
 Content-Type: application/vnd.ms-excel
 Content-Length: 240
 Date: Sat, 15 Apr 2006 18:24:42 GMT
 Connection: close
!servlet
サーブレットの宣言に利用。サーブレットに対する宣言型のデータを含む。
jsp-file を定義して、load-on-startup 要素が存在する場合、JSPは事前にコンパイルされ、ロードされる必要がある。
::servlet-name
サーブレットの名を指定する。サーブレット名は、Webアプリケーション内で一意である必要がある。
::[servlet-class|#p4]
[javaクラスまたはインターフェース名。|http://java.sun.com/docs/books/jls/third_edition/html/binaryComp.html#13.1]を指定する。この名前は、Class.forName() から利用される。
::jsp-file
WebアプリケーションのJSPファイルの'/'から始まるフルパスを指定する。
::[init-param|#p1]
[サーブレット、フィルター 初期化用の名前と値のペアを指定|#p1]
::load-on-startup
Webアプリケーションが起動時にサーブレットがロードされているべきかを指示する。
,値,内容
,load-on-startup 要素なし または 負の整数,サーブレットが呼び出された場合にロード
,0 または 正の整数,サーブレットコンテナは、ロードと初期化をアプリケーションのデプロイ時に行う。また、数値が小さい順にロードする。
::run-as
run-as ID はコンポーネントの実行に使用するために設定する
次の下位要素を含む
*description
*role-name
::security-role-ref
コンポーネントのコードから参照される、セキュリティロールの宣言を行う
次の下位要素を含む
*description
*role-name
*role-link

::例
*servlet-class もしくは jsp-file のいずれかを選ぶ

!servlet-class
サーブレットの[完全限定名(fully qualified name)|http://www.y-adagio.com/public/standards/tr_javalang2/names.doc.html#25430
指定する
!servlet-mapping
サーブレットとURLパターンのマッピングを定義する
::[servlet-name|#p3]
servlet 要素で定義されるサーブレット名を指定
::url-pattern
servlet に結び付けられるURLのパターン

{{ref_image mapping_url_servlet.jpg}}

,名称,内容,HttpServletRequest が提供するメソッド
,Context path,リクエストURIの先頭からWebアプリケーション名と一致するできるだけ長い部分。一致しない場合、デフォルトアプリケーションに結びつけられる。,getContextPath()
,Servlet path,リクエストURIの先頭から、Context path 部分を除いた残りから、サーブレットマッピングに一致するできるだけ長い部分。一致しない場合、エラーページが返される。,getServletPath()
,Path info,Servlet path を除いた残り。,getPathInfo()

+Request URI = context path + servlet + path info
+コンテキストパス、サーブレットパスは '/' で始まるが、'/' では終わらない

'''サーブレットパスの特定'''
{{ref_image servle_mapping_rule.jpg}}

::例
web.xml
 <servlet>
   <servlet-name>Section2_3Servlet2</servlet-name>
   <servlet-class>servlet.Section2_3Servlet2</servlet-class>
 </servlet>
 <servlet-mapping>
   <servlet-name>Section2_3Servlet2</servlet-name>
   <url-pattern>/sec2_3</url-pattern>
 </servlet-mapping>
 <servlet-mapping>
   <servlet-name>Section2_3Servlet2</servlet-name>
   <url-pattern>/sec2/subsec3/*</url-pattern> <!-- '*' が必要 -->
 </servlet-mapping>
 <servlet-mapping>
   <servlet-name>Section2_3Servlet2</servlet-name>
   <url-pattern>*.map</url-pattern>
 </servlet-mapping>

呼び出し例 (context path は /scwcd とする)
 1. 完全に一致
 /scwcd/sec2_3
 2. URLのツリーを下って一致
 /scwcd/sec2/subsec3/about_servletmapping
 3. 拡張子が一致
 /scwcd/s2/sb3/about_servletmapping/extent.map
 4. 一致しない
 /scwcd/s2/sb3/about_servletmapping/extent.map/pathinfo
!servlet-name
サーブレット名を指定する。サーブレット名はWebアプリケーション内で一意になるように設定する。
!welcome-file
index.htmlのような、デフォルトのウェルカムファイルを指定する。

 <welcome-file-list>
   <welcome-file>welcome.html</welcome-file>
 </welcome-file-list>
----
2.4 WARファイルの目的およびコンテンツ、構造についての説明 
{{amazon 1932394389}}
[SCWCD Exam Study Kit: Java Web Component Developer Certification (ペーパーバック)|http://www.amazon.co.jp/dp/1932394389?tag=typea09-22&link_code=as3&creativeASIN=1932394389&creative=3999&camp=767]

----
{{include_html banner_html, "!J2EE"}}