コンテキストルートへのリクエストの扱いの違い

Servletフィルタのurl-patternを「/*」にしている場合のコンテキストルートへのリクエストの扱いに違いがあることがわかったのでメモしておきます。

前提(1)

  • WebLogic Server 11gR1とTomcat6.0.20で検証
  • web.xmlにて、
    • Servletフィルタのurl-patternとして「/*」を指定
    • welcome-fileとして「index2.html」を指定
  • コンテキストルート「/context/」にリクエストを送信

index2.htmlが存在しない場合

  • WebLogicでは、Servletフィルタに処理が渡らずコンテナによってindex2.htmlにリダイレクトされます。リダイレクト後にServletフィルタに処理が渡ります。
  • Tomcatでは、Servletフィルタに処理が渡ります。

index2.htmlが存在する場合

  • WebLogicTomcatともに、Servletフィルタに処理が渡らずコンテナによってindex2.htmlにリダイレクトされます。リダイレクト後にServletフィルタに処理が渡ります。

前提(2)

  • WebLogic Server 11gR1とTomcat6.0.20で検証
  • web.xmlにて、
    • Servletフィルタのurl-patternとして「/*」を指定
    • welcome-fileを指定しない
  • コンテキストルート「/context/」にリクエストを送信

index.htmlが存在しない場合

  • WebLogicでは、Servletフィルタに処理が渡らずコンテナによってindex.htmlにリダイレクトされます。リダイレクト後にServletフィルタに処理が渡ります。
  • Tomcatでは、Servletフィルタに処理が渡ります。

index.htmlが存在する場合

  • WebLogicTomcatともに、Servletフィルタに処理が渡らずコンテナによってindex.htmlにリダイレクトされます。リダイレクト後にServletフィルタに処理が渡ります。

まとめ

  • WebLogicでは、welcome-fileで指定したファイル(指定がない場合はindex.html)のありなしに関わらず、コンテキストルートへのリクエストはServletフィルタに処理が渡りません。
  • Tomcatでは、webcome-fileで指定したファイル(指定がない場合はindex.html)がある場合は、コンテキストルートへのリクエストはServletフィルタに処理が渡されません。welcome-fileで指定したファイルがない場合は、Servletフィルタに処理が渡ります。

よって、WebLogic上でYmirを動作させた場合、コンテキストルートへのリクエストに対応するPageクラス(_RootPage)を自動生成することはできません。また_RootPageクラスで何らかの処理を行なうこともできません。

なおTomcatYmirで_RootPageクラスを自動生成したい場合や_RootPageクラスで何らかの処理を行ないたい場合は、web.xmlのwelcome-fileに存在しないファイルを指定すれば良いです(そのためViliで作成されるYmirプロジェクトのweb.xmlには「__dummy__.html」と書いてあります)。