Am 2012-11-23 22:50, schrieb Mark Thomas:
On 23/11/2012 21:44, Michael-O wrote:
Am 2012-11-23 22:28, schrieb Mark Thomas:
On 23/11/2012 21:23, Michael-O wrote:
Am 2012-11-23 22:16, schrieb Mark Thomas:
On 23/11/2012 21:09, Michael-O wrote:
Hi,
I've been struggling recently with this builtin valve and some
Spring-based REST services. I some cases I do return states like
404 or
400. SendError seems to be the right thing to do but Tomcat alters the
response with the HTML page. Which is highly unwanted for a REST API.
I have checked Oracle's original JavaDocs for #sendError(int) +
Servlet
Spec 2.5 and 3.0 all three of them, do not explicitly mention that an
error HTML response is returned with this method. The JavaDoc [1]
says:
"...If an error-page declaration has been made for the web application
corresponding to the status code passed in, it will be served back the
error page..."
I did not define a custom error page.
Where as the #sendError(int,String) says:
"... The server defaults to creating the response to look like an
HTML-formatted server error page containing the specified message,
setting the content type to "text/html"."
This one is crystal clear.
sendError(int) simply calls sendError(int,String) with a null string
arg.
Am I misunderstanding the the definition? Should I avoid sendError
alltogher and resort to setStatus? What would be the implications?
I do know that sendError commits and closes the response immediately.
A clarification is highly appreciated.
Use Tomcat 7 and define a custom, default error page. You'll then
remain
in complete control of the error response.
Well, I am still on Tomcat 6 but I would do the following:
1. Define a @Controller
2. Define @RequestMapping on a method
3. Map that controller in the web.xml
Now here's the problem, that method would return ModelAndView or simply
a view's string name. But I would like to use ResponseEntity as it would
be necessary for REST.
Did you had this in mind? Otherwise would "produces" with distinct
methods work for such an error page?
Sorry, I know next to nothing about Spring (and yes, I do work for
SpringSource).
For Tomcat 6 I'd define my own error valve but that is not portable. You
could also define error pages for each error code you use and for
java.lang.Exception
The problem is that our Tomcat is serving a variety of apps. I do not
want to code a custom valve to one app which would impact other ones.
Neither I do want to subclass StandardHost class and disable the valve
and add one on a per-webapp base.
My reading of the specification text quoted above is that the server is
expected to create HTML error pages unless the user defines a custom
error page in web.xml. I don't see any room for an alternative
interpretation.
Well, that applies for the JavaDoc of sendError(int, String).
sendError(int) does not say that the server has to auto-generate a HTML
error page unless one is defined by the developer.
Am I correct?
No.
sendError(int) == sendError(int, null)
sendError(int, null) requires an HTML response, even if the message is null.
I am aware of that implementation detail. I was solely referring to the
definition in the JavaDocs. They seem to be misleading. At least to me.
Mike
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org