首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JSP错误页生成JSP错误

JSP错误页生成JSP错误
EN

Stack Overflow用户
提问于 2011-03-01 23:16:47
回答 1查看 3.3K关注 0票数 2

我的spring应用程序有一个错误页面,其中包含一个可折叠的堆栈跟踪元素(显然是一个开发/调试选项)。它过去工作得很好,并显示来自控制器(有时来自JSP引擎)的适当堆栈跟踪。

Q:有可能是一个错误页面,还是应该是静态的?

Q:我做错什么了?

事件链(我认为)是由我的web.xml中定义的错误处理程序驱动的:

代码语言:javascript
复制
<error-page>
  <exception-type>java.lang.Throwable</exception-type>
  <location>/view/errors/internalError.jsp</location>
</error-page>

在这个过程中的某个地方(切换到了maven构建系统、升级的jetty和Spring2.5 -> 3.0),我注意到这个错误页面已经停止工作了。它对一个问题呈现相同的结果--显示的异常堆栈跟踪是,而不是来自在控制器中抛出的异常的,而是来自错误页面本身的!

代码语言:javascript
复制
javax.servlet.ServletException: javax.servlet.jsp.JspTagException: 
500 /WEB-INF/jsp/admin/errors/internalError.jsp
    at org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:862)
    at org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:791)
    at org.apache.jsp.WEB_002dINF.jsp.admin.defaultParent_jsp._jspService(defaultParent_jsp.java:225)
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)

这里似乎正在发生的是以下一系列事件:

throw new RuntimeException("no bananas")

  • This
  1. Spring控制器遇到了一个未被察觉的异常:spring基本MultiActionController捕获了
  2. 异常(因为没有为此页面定义自定义错误处理程序),异常将被重新抛出:只会被spring的DispatcherServlet再次捕获。然后,exception:
  3. Spring
  4. DispatcherServlet查看一些东西(可能是my web.xml),以发现适合于该类型的DispatcherServlet的错误页面,然后将这个URL解析为一个视图(以及我的错误JSP),并尝试呈现它。现在,
  5. 在默认父级jsp (*参见下面)中出了问题,抛出了一个JSP异常,这一次会被jetty's ServletHolder捕获。现在(通过web.xml)将此异常映射到错误JSP页面。这里的
  6. ,您可能认为这会导致无限循环。但是,第二次出现的情况很好,它会导致JSP错误。

当呈现默认的父JSP时,JSP引擎似乎死了--它似乎在:org.apache.taglibs.standard.tag.common.core.ImportSupport中遇到了麻烦。我见过一些网络帖子,人们说这与从web目录导入有关。

代码语言:javascript
复制
// disallow inappropriate response codes per JSTL spec
if (irw.getStatus() < 200 || irw.getStatus() > 299) {
  throw new JspTagException(irw.getStatus() + " " + stripSession(targetUrl));
}

虽然这里看起来像任何HTTP 500,但是错误会破坏它。但这难道不是页面应该犯的错误吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-03-01 23:53:48

Q:有可能是一个错误页面,还是应该是静态的?

一切都很好。它甚至可以是一个servlet之类的东西。当然,只要它没有臭虫。

问:我做错什么了?

您的错误页面有一个错误。显然,您在错误页面中使用<c:import>来包含来自/WEB-INF的片段。这是不允许的,因为它不是一个公共资源(老实说,我不记得它在古老的JSTL版本中会起作用)。而是使用<jsp:include>

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5161597

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档