Używam Tomcat 5.5 i Spring 3.2. W deskryptorze wdrożenia web.xml, mam następującą konfigurację -Kontener Tomcat nie może użyć konfiguracji <error-page>, jeśli wystąpi wyjątek po otwarciu OutputStream obiektu odpowiedzi
<error-page>
<error-code>500</error-code>
<location>/500.jsp</location>
</error-page>
<error-page>
<error-code>403</error-code>
<location>/403.jsp</location>
</error-page>
<error-page>
<error-code>404</error-code>
<location>/404.jsp</location>
</error-page>
niewyjaśnione zachowanie występuje w sposób podobny do tego poniżej -
public ModelAndView fileDownload(HttpServletRequest request,
HttpServletResponse response) throws Exception
{
String filename = (String) request.getParameter("filename");
//...more code
File file = new File(...+ filename); // pseudo code
OutputStream out = response.getOutputStream();
InputStream stream = new FileInputStream(file); // FileNotFoundException here
//...more code
}
Gdy wystąpi FileNotFoundException, nie zobacz mój niestandardowy plik 500.jsp używany do renderowania strony błędu, ale zamiast tego widzę całą ścieżkę śledzenia wyjątku na stronie. Gdybym po prostu odwrócić kolejność tych dwóch stwierdzeń jak poniżej,
InputStream stream = new FileInputStream(file); // FileNotFoundException here
OutputStream out = response.getOutputStream();
wszystko działa poprawnie i uzyskać właściwą 500.jsp renderowany na stronie.
Dlaczego tak się dzieje? Jedyną różnicą było to, że w tym ostatnim przypadku OutputStream obiektu odpowiedzi nie został otwarty.
tylko przetestować go z Tomcat 5.5.36 + Wiosna 3.2.2.RELEASE i nie może dostać żadnego problemu, jak tu opisać. Niestandardowa strona '500.jsp' wyświetlana zawsze zgodnie z oczekiwaniami. I nie ma zależności od sekwencji tych dwóch linii kodu. Podaj więcej plików konfiguracyjnych, aby odtworzyć ten błąd. –
Czy możesz podać ślad stosu, który widzisz na stronie? – Akshay
@CodeBlue, jeśli wciąż szukasz odpowiedzi, podaj ślad stosu wyjątku. – Akshay