2013-03-04 321 views
2

前JBoss AS中7:阿帕奇在JSF

把Apache的與本Jboss的前工作正常:

ProxyPass/http://localhost:8080 
ProxyPassReverse/http://localhost:8080 

所以應用程序是由domain.com/app訪問。瞄準更清晰的網址(只是domain.com)時,會出現

問題:

ProxyPass/http://localhost:8080/app 
ProxyPassReverse/http://localhost:8080/app 

所有javax.faces.resource沒有在第二種情況下交付,因爲它們不使用戰爭上下文URL。

任何想法如何在第二種情況下獲取人臉資源?也許只是搬到mod_jk?

關於ResourceHandler的這answer,幫助很大。

回答

1

的JSF ResourceHandler發出與<contextPath>/javax.faces.resource/路線的網址,雖然是間接地通過ScriptRenderer,StyleSheetRenderer等

既然你在ProxyPass指令省略應用程序名稱(上下文路徑),你需要使用一個URL重寫器,可在將URL提供給瀏覽器之前省略這些URL。請參閱the related question中有關如何實現此目的的答案。

1

出現同樣的問題,也沒有找到配置apache服務器的方法。

如果你只是想整理你的網址,我可以推薦URLRewriteFilter這幫助我在這種情況下。

希望這個盡情享受吧!

2

我使用多個ProxyPassProxyPassReverse條目來適應JSF可能吐出的不同上下文路徑。以下是我通常默認情況下,每一個域(ServerName)...

<VirtualHost 127.0.0.1:8080> 
    ServerAdmin [email protected] 
    DocumentRoot "/" 
    ServerName "dev.mydomain.com" 

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

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

    ProxyPass/ajp://127.0.0.1:8009/MyApp/ 
    ProxyPassReverse/http://127.0.0.1:80/  
</VirtualHost> 

上述的配置將允許訪問使用以下任一URI的Web應用程序:

http://dev.myapp.com/MyApp/ 
http://dev.myapp.com/MyApp 
http://dev.myapp.com/ 

因此,http://dev.myapp.com/javax.faces.resource/example.css會擊中最後一條規則並被路由到http://dev.myapp.com/MyApp/javax.faces.resource/example.css。此外,http://dev.myapp.com/MyApp/javax.faces.resource/example.css會觸及第一條規則並按原樣傳遞。

注:

  1. 的順序很重要!這些規則將自上而下處理。如果您首先將ProxyPass設置爲'/',那麼其他條件將永遠不會得到處理。由於每個URI在主機名後面都有一個/,所以每個請求都將使用該條件進行處理......這就是爲什麼/條件應該始終最後一個。
  2. 我強烈建議使用Apache JServ協議(ajp)連接器(而不是HTTP)。它內置在Apache和JBOSS中,它很容易打開,它顯着提高了性能......特別是如果有任何種類的二進制數據(圖像)被路由。 https://docs.jboss.org/jbossweb/2.1.x/config/ajp.html