7

WebSphere で実行されている CWA 1.5 から CWA 2011 にアップグレードした後、クライアントに問題が発生しました。問題は、要求されたバイナリ リソースが 404 を返すことです。要求が再送信されると (つまり、ページが更新/リロードされると)、それらが読み込まれます。

私は彼らの環境にアクセスできず、サードパーティからすべての構成ファイルを取得する必要があります。バイナリでこれらの 404 を引き起こしている可能性があるものについて、誰かが頭の中で何かアイデアを持っているかどうか疑問に思っていましたか?

4

6 に答える 6

12

Websphere 6.1 から、IBM はフィルターの動作を変更し、呼び出している URL がサーバー上に実際に存在しない場合、フィルターは実行されません。

これは、まだ DB にある /somefile.png に対する要求が (技術的には正しい) 404 になることを意味しますが、CWA 対応の Web アプリケーションで期待するものとはまったく異なります。

解決策は、サーブレット マッピングを使用せずにリクエストでフィルターを呼び出すことです。WebSphere 管理コンソールで次の操作を実行できるはずです。

  1. [サーバー] -> [サーバーの種類] -> [Websphere アプリケーション サーバー] -> -> [Web コンテナーの設定] -> [Web コンテナー] をクリックします。
  2. 追加設定の下で、カスタムプロパティをクリックします
  3. カスタム・プロパティー・ページで、「新規」をクリックしてから、プロパティー名として「com.ibm.ws.webcontainer.invokefilterscompatibility」を入力し、値として「true」を入力します。
  4. 更新を保存してサーバーを再起動します
于 2013-02-06T15:31:06.867 に答える
4

CWA を使用してから長い時間が経ちましたが、IIRC は要求に応じてバイナリをディスクにシリアル化し、将来の要求のためにそれらをキャッシュします。そのプロセスに時間がかかりすぎているように思われるため、バイナリの最初のリクエストで 404 が返されます。これは WebSphere で以前に聞いたことがありますが、古い CWA でも発生していなかったのですか?

問題が解決しない場合は、SDL カスタマー サポートに連絡することをお勧めします。

于 2013-02-06T13:52:44.180 に答える
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>

Chris が言ったように、バイナリが初めて要求されると、ファイルはシリアル化されてディスクにキャッシュされます。プロセスが長すぎる場合、アプリ サーバーは 404 を返します。

このパラメータを使用すると、システムはファイルにアクセスする前に数秒 (指定された値) 待機します。

Tomcat サーバーで同じ問題が発生しましたが、これにより pb が修正されました。

于 2013-02-06T18:46:06.150 に答える
3

質問の正確な内容には少し混乱があると思います。したがって、Nick は、バイナリに対する最初のリクエストが 404 になると説明しています。その後のリクエストは、期待どおりにバイナリを提供します。したがって、Elena が出した答えは、実際にはこの問題の修正ではありませんが、その特定の設定WebSphere で行う必要があるという彼女の言うことは非常に正しいです。

「最初のリクエストでのみ 404 を取得する」という問題に対する答えは、web.xml ファイルで、各 URL パターンのバイナリ タイプをデフォルト サーブレットに明示的にマッピングすることです。これは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も修正されることを願っています。お知らせください。

于 2013-02-06T23:28:14.310 に答える
3

WebSphere 7 の場合、デフォルトのサーブレットは 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>
于 2013-02-07T18:43:29.103 に答える
1

Tomcat 7 (およびおそらく Tomcat 6 の最新バージョン) を使用している場合は注意してください。web.xml ファイルをマージする方法には制限があります

正確な理由はわかりませんが、デフォルトのサーブレットに複数のマッピングを定義することはできません。このサーブレットのマッピング エントリは 1 つだけです。

多分これに関連して: 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>

それが役立つことを願っています。

于 2013-03-26T18:28:57.860 に答える