What is the simplest way to display httpServletRes

2019-01-24 13:41发布

问题:

I have a servlet which does some error checking and if something is wrong I will typically do this:

response.sendError(403, "My message")
return;

I don't want to throw an exception from the servlet - because I would like to conform with HTTP status codes.

In the web.xml I have configured the following:

<error-page>
    <error-code>403</error-code>
    <location>/failure.jsp</location>
</error-page>

In the failure.jsp I have declared usage of JSTL and I would like to get the error messages displayed. I know that I can do the following in scriptlets:

<%= request.getAttribute("javax.servlet.error.message") %>

But I would like to use JSTL with some c:if clause so if I can drop using scriptlets, this would be appreciated.

How can I easily fetch the values from the sendError statement in the servlet in the error page by using JSTL?

回答1:

The scriptlet:

<%= request.getAttribute("javax.servlet.error.message") %>

can be translated to the following EL:

${requestScope['javax.servlet.error.message']}

The brace notation bean['foo.bar'] is very useful if you have dots in Map or scoped key names, because bean.foo.bar obviously doesn't return the desired Map or scoped value.



回答2:

Declare an JSTL tag with an attribute "var", which will have an exception object(if there any error occured between the body of tags) at the end of tag, which have stackTrace and message properties.

<c:catch var="myException">
<%int x=10/0; %>
</c:catch>

<c:if test="${myException !=null}">
There was an exception: ${myException.message} 
</c:if>