Как предотвратить появление необработанной информации об исключении в JSP в приложении Spring MVC 3.0?

#java #spring #jsp #spring-mvc #error-handling

#java #spring #jsp #spring-mvc #обработка ошибок

Вопрос:

Во время тестирования моего приложения Spring я загрузил файл, размер которого превысил максимально допустимый размер, настроенный в приложении.

Следовательно, в JSP появилось следующее сообщение, видимое пользователю:

 Error
Exception: org.springframework.web.multipart.MultipartException: 
something went wrong here; nested exception is 
org.apache.commons.fileupload.FileUploadBase$FileUploadIOException
  

Что мне нужно изменить, чтобы представить пользователю более удобное сообщение в JSP?

Например:

 Uploaded file exceeds maximum allowed size of 25MB.
  

Ответ №1:

Я раньше не делал Spring MVC, но я думаю, что Spring может это сделать.

Используйте ресурсы сообщений (ResourceBundle). Вам нужно будет перехватить исключение и создать страницу ошибки, на которой может отображаться сообщение об ошибке.

Spring использует ResourceBundleMessageSource для ресурсов сообщений. В этом примере (однако слишком простом) показано, как настроить его и использовать.

Ответ №2:

Используйте HandlerExceptionResolver.

 public class MyExceptionResolver implements HandlerExceptionResolver{
    public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex){
        return new ModelAndView("jsp_to_show_error_message.jsp").
                 addObject("message", ex.getMessage());
    }
}
  

Создайте новый jsp jsp_to_show_error_message.jsp и поместите ${message} куда-нибудь в него. Настройте MyExceptionResolver в своем xml. Если вы используете контроллер на основе аннотаций, прочитайте здесь.

Ответ №3:

Оставляя Spring за рамками рассмотрения, Servlet API предлагает возможность прикреплять пользовательские страницы ошибок к определенным исключениям. В этом конкретном примере речь идет о добавлении следующей записи в web.xml .

 <error-page>
    <exception-type>org.springframework.web.multipart.MultipartException</exception-type>
    <location>errors/upload.jsp</location>
</error-page>
  

Таким образом, вы можете предоставить полностью настраиваемую страницу с ошибкой в макете веб-страницы по умолчанию в виде errors/upload.jsp .