6

この機能を使用して、404 などのいくつかのエラー ステータス コードを含む html ページを提供するアプリケーションがあります。ただし、リクエストの一部は、安静サービスまたは安静サービスによって提供される JSON を返す必要がある画像のようなものです。画像のケース。サーブレット コンテナとして Tomcat を使用しています。

明確にするために、画像を提供するサーブレットとhtmlを提供するサーブレットがいくつかあり、ユーザーが構成できるさまざまなパスのhtmlを提供するフィルターがあります。404 ステータスは、通常、要求されたパスにマップされたフィルターまたはサーブレットがないために発生します。したがって、エラーページ機能は、応答するフィルターやサーブレットがないパスの応答を提供するのに便利です。

だから私がweb.xmlに持っているのは(/と*の間のスペースを無視する)です:

... several other mappings above

<servlet-mapping>
  <servlet-name>RestServlet</servlet-name>
  <url-pattern>/servlet/rest/ *</url-pattern>
</servlet-mapping>

<servlet-mapping>
  <servlet-name>ErrorPageServlet</servlet-name>
  <url-pattern>/servlet/errorPage/ *</url-pattern>
</servlet-mapping>

...

<filter-mapping>
  <!--This will serve content and not forward to the filter chain for certain paths-->
  <filter-name>MainFilter</filter-name>
  <url-pattern>/ *</url-pattern>
</filter-mapping>

...

<error-page>
  <!--Page not found-->
  <error-code>404</error-code>
  <location>/servlet/errorPage/404</location>
</error-page>

エラー ページ サーブレットで一部のリクエストを無視し、他のリクエストの応答で html を提供することは可能ですか? または、エラー ページを配信する別の方法を使用する必要がありますか?

明確にするために、誰かが /foo (存在しない) を GET すると ErrorPageServlet に移動しますが、GET /servlet/rest/foo/bar の場合は 404 応答コードを返し、ErrorPageServlet には移動しません。

4

3 に答える 3

6

私はついに問題が何であるかを理解しました。安らかなサービスが のHttpServletResponse.sendError()代わりに呼び出していましたHttpServletResponse.setStatus()。両者には大きな違いがありsendError()、サーブレットが使用されるだけであることがわかりました。

解決策は簡単sendError()です。エラー ページで出力を処理する場合に使用setStatus()し、現在のサーブレットに出力を書き込みたい場合に使用します。

于 2013-11-08T15:33:48.937 に答える
-1

シンプルな web.xml マッピングで実現できます。例は

<servlet>
    <servlet-name>ExceptionServlet</servlet-name>
    <servlet-class>examples.Exception</servlet-class>
</servlet>

    <servlet-mapping>
        <servlet-name>ExceptionServlet</servlet-name>
        <url-pattern>/errorCodeRequest</url-pattern>
    </servlet-mapping>

   <servlet>
        <servlet-name>JsonServlet</servlet-name>
        <servlet-class>examples.JSON</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>JsonServlet</servlet-name>
        <url-pattern>/restRequest</url-pattern>
    </servlet-mapping>
于 2013-11-07T09:19:29.303 に答える