Обработка страницы исключений и ошибок в сервлете - PullRequest
0 голосов
/ 22 мая 2019

Используя браузер, когда выдается ошибка, я правильно перенаправляюсь на пользовательскую страницу ошибки, указанную в web.xml file

Но почему я всегда вижу страницу ошибки по умолчанию 400 с ее следом в выводе curl ? Мне не хватает типа обработанного исключения (я использую java.lang.Exception) или другое?

enter image description here

Это код сервлета:

package test.company.com;

import java.io.*;
import java.util.logging.Level;
import java.util.logging.Logger;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.lang.Exception;

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

try {
  // stuff here ..

} catch (Throwable e) {
    // Log and throw the superclass Exception 
    LOGGER.log(Level.SEVERE, e.getMessage());
    throw new ServletException();
} 

}

И это файл конфигурации web.xml:

<error-page>  
  <exception-type>javax.servlet.ServletException</exception-type>  
    <location>/error.jsp</location>  
  </error-page>
  <error-page>
  <exception-type>java.lang.Exception</exception-type>  
    <location>/error.jsp</location>  
  </error-page>
  <error-page>
    <error-code>400</error-code>
    <location>/error.jsp</location>
  </error-page> 
  <error-page>
    <error-code>404</error-code>
    <location>/error.jsp</location>
  </error-page> 
  <error-page>
    <error-code>500</error-code>
    <location>/error.jsp</location>
  </error-page>

Ответы [ 2 ]

1 голос
/ 22 мая 2019

См. Первые два ответа здесь: Какие символы делают URL недействительным? - вы отправляете <aaa> из командной строки, а < и > не допускаются в URL.Браузер автоматически кодирует эти символы в %3C и %3E объекты, когда вы вводите их в поле адреса, но curl этого не делает - он ожидает, что вы знаете, что делаете.;-) Таким образом, Tomcat даже не вызывает ваш сервлет и отвечает неверным запросом (ошибка 400).

Итак, замените <aaa> на %3Caaa%3E в командной строке, и вы получитена ваш сервлет (и, вероятно, ожидаемая ошибка 500).

0 голосов
/ 23 мая 2019

Решено путем установки класса конфигурации ErrorReportValve в server.xml Tomcat 9, теперь трассировка стека ошибок больше не доступна: -)

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...