2013-02-06 22 views
7

我的客戶端升級從CWA 1.5到2011 CWA在WebSphere運行後,有一個問題。問題是所請求的任何二進制資源都會返回404.當請求重新提交(即頁面刷新/重新加載)時,它們將被加載。外表套上CWA 2011二進制文件返回404直到裝修一新的

我有自己的環境沒有訪問,並有獲得通過第三方的所有配置文件。我想知道是否有人有任何想法,他們的頭頂上可能會導致這些404s二進制文件?

回答

3

對於WebSphere 7,默認的servlet是被稱爲FileServlet,使所以下面應該工作:

<servlet> 
<servlet-name>FileServlet</servlet-name> 
<servlet-class> 
com.ibm.ws.webcontainer.servlet.SimpleFileServlet 
</servlet-class> 
</servlet> 


<servlet-mapping> 
    <servlet-name>FileServlet</servlet-name> 
    <url-pattern>*.css</url-pattern> 
</servlet-mapping> 
<servlet-mapping> 
    <servlet-name>FileServlet</servlet-name> 
    <url-pattern>*.jpg</url-pattern> 
</servlet-mapping> 
<servlet-mapping> 
    <servlet-name>FileServlet</servlet-name> 
    <url-pattern>*.js</url-pattern> 
</servlet-mapping> 
<servlet-mapping> 
    <servlet-name>FileServlet</servlet-name> 
    <url-pattern>*.gif</url-pattern> 
</servlet-mapping> 
4

這是因爲我已經使用CWA很長一段時間,但IIRC它系列化二進制文件到硬盤上的請求,並對其進行緩存爲將來的請求。這聽起來像是這個過程花費了很長時間,所以你得到了一個二進制文件的第一個請求。我以前在WebSphere上聽說過這個消息,你確定它還沒有發生在舊的CWA上嗎?

如果問題仍然存在,我建議您聯繫SDL客戶支持。

12

與WebSphere 6.1開始,IBM改變了過濾器的行爲,如果你調用的URL實際上並不存在於服務器上,這些將不會被執行。

這意味着/somefile.png一個請求依然在DB將導致(技術上是正確的)404,但完全不是你期望與支持CWA Web應用程序的內容。

的解決方案是在請求過濾器調用沒有一個servlet映射,你應該能夠做到在WebSphere管理控制檯中的以下內容:

  1. 單擊服務器 - >服務器類型 - > WebSphere應用程序服務器 - > - > Web容器設置 - > Web容器
  2. 在額外設置,單擊自定義屬性
  3. 在自定義屬性頁,單擊新建,然後輸入「com.ibm.ws.webcontainer.invokefilterscompatibility」作爲屬性名稱與「真」的價值
  4. 保存更新並重新啓動服務器
3

cd_cwa_conf.xml文件,你還可以添加以下參數:

<configuration> 
... 
    <!-- Number of seconds to wait for the default Servlet to pick up changes on the file-system --> 
    <file-synchronization delay="..." /> 
... 
</configuration> 

正如克里斯說,第一次被請求二進制然後文件被序列化並緩存在磁盤上。如果這個過程太長,則應用服務器會返回一個404

使用此參數,系統將等待幾秒鐘(即指定的值)訪問該文件前。

我們有一個Tomcat服務器同樣的問題,這有固定的PB。

+0

不再是Seb :)在上一個CWA 2011代碼中,該功能已從TDF中取出。現在,我們不是這樣做,而是明確地將DefaultServlet映射到web.xml中的URL模式,並且顯然修復了404問題。 但是請注意,上述問題並不是指該行爲。上面的問題是「每次請求都要404」。您和我所指的是'僅在第一次請求時獲得404'。 –

+0

我發佈了另一個答案,因爲我也對這個問題的實際含義感到困惑......請參閱上面的 –

3

我覺得有一點混淆的究竟是什麼的問題是什麼。因此Nick解釋說,二進制文件的第一個請求會導致404錯誤。任何後續請求都會按預期提供二進制文件。因此,埃琳娜給出的答案是不是真的對這個問題的修復,雖然她是非常正確的是說,那個特定的設置必須在WebSphere確實取得。

爲問題是具有在每個URL模式二進制類型以默認的servlet web.xml文件顯式映射「在第一次請求只得到一個404」的答案。這在http://sdllivecontent.sdl.com/LiveContent/content/en-US/SDL_CWA_10/task_C1FECE85AD5E4F0BB3957C4516D7E2AC描述,子彈#6:

<servlet-mapping> 
    <servlet-name>default</servlet-name> 
    <url-pattern>*.jpg</url-pattern> 
</servlet-mapping> 

文檔指出這個修復的JBoss,Tomcat的,但我也看到了它的WebLogic修復。我希望它也能修復WebSphere。請告訴我們。

+0

僅供參考對Tomcat 7有限制。請參閱下面的答案。 –

1

要小心,如果你使用的是Tomcat 7(和Tomcat 6的可能是最新版本)。 web.xml文件合併的方式有一個限制

我不知道爲什麼,但是你不能定義幾個到默認servlet的映射。這個servlet只能有一個映射條目。

也許關於這個:https://issues.apache.org/bugzilla/show_bug.cgi?id=50026

順便說一句,您可以通過重新定義也默認映射繞過這個限制。

例如:以下不適用於Tomcat 7.0.33。所有資源都在404錯誤。

<servlet-mapping> 
    <servlet-name>default</servlet-name> 
    <url-pattern>/worldwide/binaries/*</url-pattern> 
</servlet-mapping> 
<servlet-mapping> 
    <servlet-name>default</servlet-name> 
    <url-pattern>/france/binaries/*</url-pattern> 
</servlet-mapping> 

以下作品完美

<servlet-mapping> 
    <servlet-name>default</servlet-name> 
    <url-pattern>/worldwide/binaries/*</url-pattern> 
    <url-pattern>/france/binaries/*</url-pattern> 
    <url-pattern>/</url-pattern> 
</servlet-mapping> 

希望它能幫助。