Страница ошибки JSP вставляется вместо пересылки?
При попытке обработки ошибок в JSP я заметил странное поведение.
Я создаю Myobject, но ничего не вставляю в него, чтобы вызвать нулевой указатель для тестирования.
Я включил директиву errorPage на своей странице, чтобы она появлялась на моей странице ошибок при возникновении этого исключения.
Фактическая ошибка произойдет при вводе формы:
....
<input type="hidden" id="INITIAL_ACTION" name="INITIAL_ACTION" value="<%=Myobject.myMethod()%>"/>
<input type="hidden" name="INITIAL_PAGE" ....
Я вижу содержимое моей страницы ошибок, поэтому директива errorpage работает, но страница не выглядит нормально. Теперь, когда я смотрю на источник страницы, создается впечатление, что страница ошибки фактически вставлена в значение этого входа INITIAL_ACTION на моей предыдущей странице, а не является форвардом:
...
<input id="INITIAL_ACTION" type="hidden" value=" <html> <head> <title>ErrorPage</title> <link rel = 'stylesheet' type = 'text/css' href = '../css/newstyle.css' /> </head> <body> <div id=" name="INITIAL_ACTION"></input>
<table class="borderedtable">
<tbody>
<tr> … </tr>
<tr> … </tr>
...
Конечно, это дает мне некоторые проблемы с макетом / CSS на текущей странице ошибок. Может ли кто-нибудь объяснить это поведение или указать мне правильное направление?
Редактировать:
Увеличение буфера страницы работает.
Но моему нынешнему приложению было бы сложно определить, каким страницам это нужно, чтобы убедиться, что их обработка ошибок работает.
Проблема заключалась в том, что первая двойная квота атрибута id первого DIV на странице ошибок использовалась для закрытия атрибута value того места, где он был вставлен.
В верхней части страницы ошибок я добавил html-комментарий, который содержит двойную кавычку + объяснение. Теперь эта цитата используется, а остальная часть страницы отображается нормально.
Но мне не нравится мое решение, я не чувствую себя твердым
1 ответ
Я предполагаю, что вы используете Apache Tomcat или один из других JSP-контейнеров, который использует Jasper (движок JSP Tomcat) или его производную.
Если ответ уже был зафиксирован при возникновении ошибки, Jasper включает страницу с ошибкой, а не пересылает ее, поскольку это лучшее, что он может сделать с учетом обстоятельств.
Чтобы перейти на страницу с ошибкой, вам нужно выполнить действие, которое вызывает ошибку, прежде чем ответ будет зафиксирован. Возможные способы сделать это включают в себя:
- Увеличьте размер буфера страницы, чтобы ответ был зафиксирован позже
- Выполните рефакторинг страницы, чтобы код, вызывающий ошибку, выполнялся раньше.