2

localhost ではうまく機能するが、アプリケーションが GAE サーバーにデプロイされると失敗する url-pattern を使用して簡単な作業をしようとしています。私がやりたいことは次のとおりです。

  • すべてのリクエストに対応する 1 つのサーブレット
  • このサーブレットは、一部のリクエストを jsp ファイルに転送します (ほとんどの場合)。

これを行うために、web.xml を構成しました。

<servlet>
    <servlet-name>MyServlet</servlet-name>
    <servlet-class>com.mycompany.MyServlet</servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>MyServlet</servlet-name>
    <url-pattern>/MyServlet</url-pattern>
</servlet-mapping>
<welcome-file-list>
    <welcome-file>MyServlet</welcome-file>
</welcome-file-list>

これは、GAE localhost サーバーでは正常に機能しますが、アプリが実際の G​​AE サーバーにデプロイされた場合は機能しません。問題は、myapp.appspot.com/anything にアクセスすると、GAE が次のように応答することです。

エラー: 見つかりません 要求された URL /anything がこのサーバーで見つかりませんでした。

誰でも私を助けてくれますか?

4

1 に答える 1

1

要素がありませんServlet。このServlet-mapping要素だけでは十分ではありません。あなたのweb.xmlから構築して、これを試してください....

    <servlet>
            <servlet-name>MyServlet</servlet-name>
            <servlet-class>package.path.to.my.servlet.MyServlet</servlet-class>
    </servlet>
    <servlet-mapping>
            <servlet-name>MyServlet</servlet-name>
            <url-pattern>/MyServlet</url-pattern>
    </servlet-mapping>

もちろん、package.path.to.my.servletをクラスの実際のパッケージに置き換えますMyServlet。これが完了したら、複数の servlet-mapping 要素を配置して、異なる URL を同じサーブレットにマップできます。

これがアプリスポットの URL で発生している場合は、すべての静的ファイルがアプリスポットにデプロイされていることを確認してください...

    <static-files>
      <include path="/**.css" />
      <include path="/**.xml" />
    </static-files>

これは、war ファイル内にすべての xmls/css ファイルをデプロイしていることを意味することに注意してください。これを行いたくない場合は、それに応じてインクルード パス属性を調整します。

また、すべてのリクエストを 1 つのサーブレットに送信するには、次の URL パターンを使用します...

<url-pattern>/*</url-pattern>

このパターンを使用するときは、画像/css ファイル/jsp ファイルなどがある場合、このサーブレットがそれらのリクエストをインターセプトすることに注意してください。したがって、関心のないリクエストを転送する何らかのロジックが必要になります。単純なことを行う場合は、これで十分かもしれません。しかし、より複雑になると (css ファイルや画像ファイルのキャッシュなど)、おそらく静的リソース フィルターの追加を検討したくなるでしょう。

于 2011-12-30T00:27:02.167 に答える