2

これは非常に単純で簡単です。サーブレット側から 503 エラーをスローしたい。

response.sendError(503); 

これがスローされると、カスタム エラー ページにヒットする必要があります。基本的には 503 エラー ページそのものですが、いくつかの変更が加えられています。

私が持っていると言って503.html、追加しました

<error-page>
    <error-code>503</error-code>
    <location>/503.html</location>
</error-page>

web.xml

503 エラーをスローするサーブレットとweb.xml、このコンテンツを含む war ファイルを作成しました。503.html親フォルダーの場所に保管しました。(別の場所に保管する必要がありますか?)

アプリを WLS にデプロイしましたが、このカスタム503.htmlはヒットしません。一般的な 503 エラーが発生します。

何か不足していますか?

私のコードは以下の通りです:

webapp1.war

->web-inf

->web-inf->classes->prject4->Class1.class

->web-inf->jsp->error->custom.html

web.xml

<?xml version="1.0"?>
<!DOCTYPE web-app
    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
    "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>

     <servlet>
      <servlet-name>Class1</servlet-name>
      <servlet-class>project2.Class1</servlet-class>
   </servlet>   

   <servlet-mapping>
      <servlet-name>Class1</servlet-name>
      <url-pattern>/*</url-pattern>
   </servlet-mapping>

   <error-page>
    <error-code>503</error-code>
    <location>/WEB-INF/jsp/error/custom.html</location>
</error-page>

</web-app>

class1.java

public class Class1 extends HttpServlet
{   
  private ServletConfig config;

  public void init(ServletConfig config)throws ServletException
  {
   this.config=config;
  }

   public void service (HttpServletRequest request, HttpServletResponse response)
      throws IOException
   {

     response.setContentType("text/html");     
     ServletOutputStream l_out = response.getOutputStream();     

     response.sendError(503); 
   }
}
4

4 に答える 4

2

わかりました、これは最初はわからなかった小さなエラーでした。

web.xmlの場合、サーブレット マッピングは として指定されまし/*た。これは、マッピングされたのと同じコードをスローするため、無限ループ状態を引き起こしていました。そのため、サーブレットのマッピングを調整してClass1、エラー ページにマップされないようにする必要がありまし/images/*た。

そして、すべてがうまくいき始めました。:)

于 2011-03-31T14:04:01.587 に答える
1

また、カスタム エラー ハンドラーで処理することもできます。

public void service (HttpServletRequest request, HttpServletResponse response)
      throws IOException
 {
      try
      {
          //some error generating code
           throw new Exception("503_Exception");
      }
      catch(Exception e)
      {
          response.sendRedirect(HandleError.handle(e, request));
      }
 }

エラーを処理する別のクラス。これにより、さまざまな種類のエラーを処理できます。スタックトレースをログに記録したり、問題が発生した場合にメールを送信したりする機能を追加できます。

public class HandleError{
    public static String handle(Throwable t, javax.servlet.http.HttpServletRequest request)
    { 
         String sErrorMsg = t.getMessage();

         if (sErrorMsg.equals("503_Exception")) {
            request.setAttribute("msg", Constants.EINVALSESSION);
            return "/503.html";
         }


         return "/default_error.html";
    }
}
于 2011-03-25T13:00:59.463 に答える
1

プロジェクトのビルド ツールとして Maven を使用している場合は、src/main/webapp ディレクトリが検索されるため、たとえば、構成は次のようになります。

<error-page>
    <error-code>404</error-code>
    <location>/WEB-INF/jsp/error/error404.html</location>
</error-page>

error404.html は次のフォルダーにあります。

${PROJECT_NAME}/src/main/webapp/WEB-INF/jsp/error/

Maven を使用していない場合、場所のパスには、index.jsp を置く場所のベース ディレクトリがあります。

于 2011-03-25T11:23:08.840 に答える
0

カスタム エラー ページのバイト数には最小制限があると思います。下限は通常 512 バイトです。カスタム エラー ページに関する重要な注意事項 を​​参照してください。Tomcatを使用している場合、Google-Chromeでもこの動作を見てきました。

于 2011-03-25T11:51:20.540 に答える