从servlet java抛出的自定义503错误页面

时间:2011-03-25 11:12:36

标签: java servlets weblogic-10.x http-status-code-503

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

response.sendError(503); 

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

说我有503.html,我添加了

<error-page>
    <error-code>503</error-code>
    <location>/503.html</location>
</error-page>
web.xml中的

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

我在WLS中部署了应用,但此自定义503.html未受到影响。我收到通用503错误。

我错过了什么吗?

我的代码如下:

webapp1.war

  

- &GT; WEB-INF

     

- &GT; web的INF-&GT;类 - &GT; prject4-&GT; Class1.class

     

- &GT; web的INF-&GT; JSP-&GT;无错误&GT; 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 个答案:

答案 0 :(得分:2)

好的,这是一个小错误,我在开始时没有弄清楚。

在我的web.xml中,servlet-mapping以/*的形式给出,这导致了无限循环条件,因为它抛出了已映射的相同代码。所以我不得不调整servlet映射,以便Class1不会映射到任何错误页面 - 比如说/images/*

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

答案 1 :(得分: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 /主/ web应用/ WEB-INF / JSP /错误/

如果您没有使用Maven,该位置的路径将具有您放置index.jsp的基本目录

答案 2 :(得分: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";
    }
}

答案 3 :(得分:0)

我猜自定义错误页面的字节数有最小限制。下限通常为512字节。见Important note for your Custom error pages。我在使用Tomcat时也在Google-Chrome中看到过这种行为。