Страница ошибки 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 включает страницу с ошибкой, а не пересылает ее, поскольку это лучшее, что он может сделать с учетом обстоятельств.

Чтобы перейти на страницу с ошибкой, вам нужно выполнить действие, которое вызывает ошибку, прежде чем ответ будет зафиксирован. Возможные способы сделать это включают в себя:

  • Увеличьте размер буфера страницы, чтобы ответ был зафиксирован позже
  • Выполните рефакторинг страницы, чтобы код, вызывающий ошибку, выполнялся раньше.
Другие вопросы по тегам