Tomcat上でJSF実現
   1 min read

非 JavaEE なサーブレットコンテナ上で JSF を実行するように変更する手順。

TL;DR

  • Mojarra を依存関係に含める
  • JSF リソースを javax.faces.webapp.FacesServlet にマップするよう web.xml で設定する

実装例

https://github.com/yukihane/hello-jsf/tree/feature/server/tomcat

feature/server/tomcat ブランチと feature/server/javaee ブランチで diff を取れば、 JavaEE アプリケーションサーバ向け設定との差異がわかります。
(ちなみに masterブランチや README.md の説明は別の内容向けなので気にしないで下さい)

手順

通常の(JSF 未対応の)warに対し、Mojarra 依存関係を追加します。
pom.xml

<dependency>
  <groupId>org.glassfish</groupId>
  <artifactId>javax.faces</artifactId>
  <version>2.2.4</version>
</dependency>

(余談ですが、初見でこのgroupId, artifactIdからこれが Mojarra 本体だとわかるだろうか、いやわからない。)

次にweb.xmlで(今回の例では)拡張子xhtmlファイルへのアクセスを MojarraJSF プロセスエントリポイントへマップします。

src/main/webapp/WEB-INF/web.xml:

<servlet>
  <servlet-name>faces</servlet-name>
  <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
  <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
  <servlet-name>faces</servlet-name>
  <url-pattern>*.xhtml</url-pattern>
</servlet-mapping>

以上です。