从 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") 状态的最简单方法是啥

用jstl格式化从数据库中读取的时间格式

12-JSP&EL&JSTL

JSTL标签库学习3-fn

jsp和jstl 事务&数据库连接池&DBUtils

十一 JSP&EL&JSTL