短いイントロ:
Jboss AS 7にjsf 2.1プロジェクトをデプロイしようとしています(Tomcat 7でも試しました)。デプロイは問題なく動作していますが、サイトの CSS にアクセスしようとすると、画像と JavaScript が見つからず、ログから次のような例外タイプが大量に発生します。
0:04:58,261 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[Faces Servlet]] (http--127.0.0.1-8080-21) Servlet.service() for servlet Faces Servlet threw exception: com.sun.faces.context.FacesFileNotFoundException: /projectName/rfRes/calendarIcon.png.xhtml Not Found in ExternalContext as a Resource
ブラウザでは次のように表示されます。
Failed to load resource: the server responded with a status of 500 (Internal Server Error)
テンプレートでは、たとえば画像は次のようになります。
<h:graphicImage library="images" name="logo.png" />
フェースからリソースへの生成されたパス:
<img src="/projectName/javax.faces.resource/logo.png.xhtml;jsessionid=30AEAD88CADB047E3DFBDDA372732F08?ln=images">
画像へのパス:
WebContent/resources/images
Jboss 7.0/7.1、Tomcat 6/7、Java 6/7 など、さまざまな構成でデプロイしようとしました。しかし、それは私のローカル展開でのみ機能し、debian では機能しません。1つの解決策は、jsfを使用せずにリソースへの直接パスをどこにでも配置することですが、リッチフェイスの画像とすべてをどうするか....
プロジェクトとシステム構成:
Java 7
Hibernate 3
JSF 2.1
Richfaces 4.2
Debian 6
顔の構成
<?xml version="1.0" encoding="UTF-8"?>
<faces-config xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"
version="2.0">
<application>
<locale-config>
<default-locale>en_EN</default-locale>
</locale-config>
<resource-bundle>
<base-name>language</base-name>
<var>language</var>
</resource-bundle>
<factory>
<exception-handler-factory>
package.ViewExceptionHandlerFactory
</exception-handler-factory>
</factory>
<lifecycle>
<phase-listener>package.AuthListener</phase-listener>
</lifecycle>
</application>
</faces-config>
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app metadata-complete="true" id="WebApp_ID" version="3.0"
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<display-name>Name</display-name>
<servlet id="JSF_Front_Controller_Servlet">
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.xhtml</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>Jersey REST Service</servlet-name>
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>com.sun.jersey.config.property.resourceConfigClass</param-name>
<param-value>com.sun.jersey.api.core.PackagesResourceConfig</param-value>
</init-param>
<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>package.services</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Jersey REST Service</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
<filter>
<display-name>AuthFilter</display-name>
<filter-name>AuthFilter</filter-name>
<filter-class>package.AuthFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>AuthFilter</filter-name>
<url-pattern>/view/user/*</url-pattern>
</filter-mapping>
<filter>
<display-name>HibernateFilter</display-name>
<filter-name>HibernateFilter</filter-name>
<filter-class>package.HibernateFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>HibernateFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<listener>
<listener-class>package.HibernateListener</listener-class>
</listener>
<session-config>
<session-timeout>30</session-timeout>
</session-config>
<welcome-file-list>
<welcome-file>view/start.xhtml</welcome-file>
</welcome-file-list>
<security-constraint>
<web-resource-collection>
<web-resource-name>shadow</web-resource-name>
<url-pattern>/services/payment/*</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
</web-app>
更新 1
サーバーの問題のようです。apache2 と次の仮想ホストで debian 6 を実行しています。
<VirtualHost *:80>
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
RewriteEngine On
ProxyPreserveHost On
RewriteRule ^/(.*)$ http://127.0.0.1:8080/project-name/$1 [P]
ServerName url.com
</VirtualHost>
rewriteule は jsf にとって何らかの問題があります