пользовательская страница ошибки 503 выброшена из сервлета Java - PullRequest
2 голосов
/ 25 марта 2011

Это довольно просто и понятно.Я хочу выбросить ошибку 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 с этим содержимым.Я сохранил 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 ]

2 голосов
/ 31 марта 2011

Хорошо, это была небольшая ошибка, которую я не обнаружил в начале.

В моем web.xml отображение сервлета было задано как /*, что вызывало условие бесконечного цикла, поскольку он генерирует тот же код, для которого он был отображен. Поэтому мне пришлось настроить отображение сервлета таким образом, чтобы Class1 не отображался ни на какие страницы ошибок - как, скажем, /images/*.

А потом все стало работать нормально. :)

1 голос
/ 25 марта 2011

Вы также можете попробовать обработать его с помощью пользовательского обработчика ошибок.

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";
    }
}
1 голос
/ 25 марта 2011

Если вы используете 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

0 голосов
/ 25 марта 2011

Полагаю, есть минимальное количество байт, которое есть на вашей странице ошибки. Нижний предел обычно составляет 512 байт. См. Важное примечание для пользовательских страниц ошибок . Я видел такое поведение и в Google-Chrome при использовании Tomcat.

...