Not a jsp/maven/java dev myself, i'm trying to configure error pages in a generic way, for a webapp, without touching jboss's configuration.
Here's how i'm trying to do so: in my web.xml, i've set up
<error-page>
<error-code>*</error-code>
<location>/actions/erreur</location>
</error-page>
Here, I doubt using '*' works, but that's for the example. Then, in my strut-config.xml
<action path="/erreur" forward="erreurView" />
And finally in my tiles-def.xml:
<!-- ERREURS -->
<definition name="erreurView" extends=".formPremiereConnexionLayout">
<put name="titrePage" value="Erreur"/>
<put name="body" value="/jsp/erreurs.jsp"/>
</definition>
You get the idea, if you have an appropriate answer, thanks for the help.
One last thing : even though any server error code send to a generic error view, i'd like to detail the error in the jsp. I think a scriptlet would do fine, buyt once again, I have no idea on how to do so. Thanks.
The wildcard wouldn't work. How verbose, you really need to define the status codes of interest separately. E.g.
<error-page>
<error-code>403</error-code>
<location>/actions/erreur</location>
</error-page>
<error-page>
<error-code>404</error-code>
<location>/actions/erreur</location>
</error-page>
<error-page>
<exception-type>java.lang.Throwable</exception-type>
<location>/actions/erreur</location>
</error-page>
...
The last one listens on all exceptions/errors the server could throw. However you can't be sure if it will ever be displayed on a java.lang.Error
.
Inside the error page you can get the important details from the request scope and headers like so:
<p>Request URI: <c:out value="${requestScope['javax.servlet.forward.request_uri']}" /></p>
<p>Exception type: <c:out value="${requestScope['javax.servlet.error.exception']}" /></p>
<p>Exception message: <c:out value="${requestScope['javax.servlet.error.message']}" /></p>
<p>HTTP status code: <c:out value="${requestScope['javax.servlet.error.status_code']}" /></p>
<p>HTTP user agent: <c:out value="${header['user-agent']}" /></p>
If you want to print the stacktrace as well, you'll have to prepare this inside a servlet/beanclass by writing it to a String
and putting it in the request scope and finally display it in a <pre></pre>
.