トップ 差分 一覧 ping ソース 検索 ヘルプ PDF RSS ログイン

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



目次



記事一覧

キーワード

j2ee_1_4.xsd
web-app_2_4.xsd
jsp_2_0.xsd

error-page

エラーコードもしくは例外をWebアプリケーションのリソースと結びつける

error-code
例えば 404 のような、HTTPエラーコードを指定する

exception-type

javaクラスまたはインターフェース名を指定する。この名前は、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 エラーメッセージを簡易表示する にチェックが入っていると、エラーコードに対応する応答バイト数が閾値を超えない場合、(エラーコードにより、256、512・・・) web.xml に、error-page を設定しても、 Microsfot のデフォルトのエラーページが表示されてしまうので注意

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
MIME 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
javaクラスまたはインターフェース名。を指定する。この名前は、Class.forName() から利用される。
jsp-file
WebアプリケーションJSPファイルの'/'から始まるフルパスを指定する。
init-param
サーブレット、フィルター 初期化用の名前と値のペアを指定
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
servlet 要素で定義されるサーブレット名を指定
url-pattern
servlet に結び付けられるURLのパターン


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

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

サーブレットパスの特定


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ファイルの目的およびコンテンツ、構造についての説明

SCWCD Exam Study Kit: Java Web Component Developer Certification (ペーパーバック)



YAGI Hiroto (piroto@a-net.email.ne.jp)
twitter http://twitter.com/pppiroto

Copyright© 矢木 浩人 All Rights Reserved.