从 JSTL 显示 httpServletResponse.sendError(403, "My Message") 状态的最简单方法是啥
Posted
技术标签:
【中文标题】从 JSTL 显示 httpServletResponse.sendError(403, "My Message") 状态的最简单方法是啥【英文标题】:What is the simplest way to display httpServletResponse.sendError(403, "My Message") status from JSTL从 JSTL 显示 httpServletResponse.sendError(403, "My Message") 状态的最简单方法是什么 【发布时间】:2010-11-09 10:05:13 【问题描述】:我有一个 servlet,它会进行一些错误检查,如果出现问题,我通常会这样做:
response.sendError(403, "My message")
return;
我不想从 servlet 抛出异常 - 因为我想符合 HTTP 状态代码。
在 web.xml 中,我配置了以下内容:
<error-page>
<error-code>403</error-code>
<location>/failure.jsp</location>
</error-page>
在 failure.jsp 中,我声明了 JSTL 的用法,并且我希望显示错误消息。我知道我可以在 scriptlet 中执行以下操作:
但是我想使用带有一些 c:if 子句的 JSTL,所以如果我可以放弃使用 scriptlet,这将不胜感激。
如何使用 JSTL 从错误页面的 servlet 中的 sendError 语句中轻松获取值?
【问题讨论】:
【参考方案1】:小脚本:
<%= request.getAttribute("javax.servlet.error.message") %>
可以翻译成以下EL:
$requestScope['javax.servlet.error.message']
如果您在Map
或作用域键名中包含点,则大括号符号bean['foo.bar']
非常有用,因为bean.foo.bar
显然不会返回所需的Map
或作用域值。
【讨论】:
【参考方案2】:声明一个带有“var”属性的JSTL标签,该标签的末尾会有一个异常对象(如果标签主体之间发生任何错误),具有stackTrace和message属性。
<c:catch var="myException">
<%int x=10/0; %>
</c:catch>
<c:if test="$myException !=null">
There was an exception: $myException.message
</c:if>
【讨论】:
这行不通。 JSP 页面没有捕获任何异常 - 它在 web.xml 中被配置为错误页面。在这种情况下,异常是请求中的一个属性,但关键是相当尴尬,我不知道如何从 JSTL 中引用它。以上是关于从 JSTL 显示 httpServletResponse.sendError(403, "My Message") 状态的最简单方法是啥的主要内容,如果未能解决你的问题,请参考以下文章
从 JSTL 显示 httpServletResponse.sendError(403, "My Message") 状态的最简单方法是啥