2

这非常简单明了。我想从 servlet 端抛出 503 错误。

response.sendError(503); 

当这个被抛出时,我需要它来点击一个自定义错误页面。基本上是一个 503 错误页面本身,但有一些修改。

说我有503.html,我加了

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

web.xml.

我创建了一个 war 文件,其中包含一个引发 503 错误的 servlet,以及web.xml此内容。我将其保存503.html在父文件夹位置。(我应该把它放在别处吗?)

我在 WLS 中部署了应用程序,但这个自定义503.html没有受到影响。我收到一般的 503 错误。

我错过了什么吗?

我的代码如下:

webapp1.war

->网络信息

->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的 servlet-mapping 中给出了/*,这导致了一个无限循环条件,因为它抛出了与其映射的相同代码。所以我不得不调整 servlet 映射,这样Class1它就不会映射到任何错误页面——比如/images/*.

然后一切都开始正常了。:)

于 2011-03-31T14:04:01.587 回答
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 回答
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 回答
0

我猜您的自定义错误页面的字节数有一个最小限制。下限通常为 512 字节。请参阅自定义错误页面的重要说明。使用 Tomcat 时,我也在 Google-Chrome 中看到了这种行为。

于 2011-03-25T11:51:20.540 回答