2015-10-20 73 views
1

我在JSF2(使用Primefaces)中有應用程序。我解析URL使用h:outputStylesheet資源,因此鏈接到我的CSS的樣子:通過ajp連接器無法正確解析jsf資源

/project/javax.faces.resource/style.css.xhtml?ln=css 

當我在我的服務器上的一切tomcat的部署項目工作正常。我可以看到我的css文件,當我把網址中broswer:

http://myserver.com:8080/project/javax.faces.resource/style.css.xhtml?ln=css 

當然,我也可以使用直接鏈接到資源就像訪問它:

http://myserver.com:8080/project/resources/css/style.css 

當我配置apache轉發的問題開始請求端口80到tomcat。我嘗試了兩種approches:

  • AJP的mod_jk與
  • AJP與mod_proxy的

訪問它作爲一個JSF資源時,這兩種配置產生無效的css文件。當我把:

http://myserver.com/project/javax.faces.resource/style.css.xhtml?ln=css 

我獲得以下錯誤信息:

This page contains the following errors: 
error on line 1 at column 1: Document is empty 
Below is a rendering of the page up to the first error. 

然而,直接鏈接到我的css文件仍然有效:

http://myserver.com/project/resources/css/style.css 

我的問題是:什麼我錯過了在ajp配置?


這裏是配置:

AJP工人:

worker.list=ajp13_worker 
worker.ajp13_worker.port=8009 
worker.ajp13_worker.host=localhost 
worker.ajp13_worker.type=ajp13 
使用

AJP連接JK:

JkMount /project/ ajp13_worker 
JkMount /project ajp13_worker 
JkMount /project/* ajp13_worker 

替代AJP連接使用代理:

ProxyPass /project/ ajp://127.0.0.1:8009/project/ 
ProxyPassReverse /project/ http://127.0.0.1:80/project/ 

tomcat的server.xml中

<Connector port="8009" enableLookups="false" protocol="AJP/1.3" redirectPort="8443" /> 

我用:

  • 的Tomcat 7
  • 的Java 8
  • Primefaces 4.0
+0

是否http://stackoverflow.com/questions/9905946/jsf-url-rewriting-solution-needed包含相關信息? – Kukeltje

+0

我已經看到了。它沒有 - 它是關於更改資源的生成url,但是我的項目的url是好的,只是當通過ajp完成連接時數據被正確填充。 – gawi

+1

此錯誤對於客戶端中不可解析的XML文檔是很典型的。顯然,代理已經設置了一個與XML相關的內容類型頭,因此客戶端(webbrowser)很困惑,並試圖將其解析爲XML。 CSS文件的內容類型必須是「text/css」。 – BalusC

回答

2

的問題是,作爲BalusC提到,那apache設定的內容鍵入到application/xhtml+xml,它應該是text/css。由於apache中的mod_mime模塊處於打開狀態,因此設置了xml類型。最簡單的解決方案是去除xhtml文件擴展名和內容類型之間的映射。這可以通過添加:

RemoveType xhtml 

行在Apache配置。

更多的解決方案可以在這裏找到:https://serverfault.com/questions/544723/how-to-set-different-mod-mime-rules-for-reverse-proxy