How to properly send an HTTP message to the client

后端 未结 7 1270
一生所求
一生所求 2021-02-05 00:14

I\'m working on a RESTful web service in Java. I need a good way to send error messages to the client if something\'s wrong.

According to the Javadoc, HttpServlet

7条回答
  •  青春惊慌失措
    2021-02-05 00:51

    I think the sendError should do it, but your application server may be failing... IBM WebSphere 3.5 failed on me a long time ago while Tomcat would propagate the message just fine; see JavaServer Pages (JSP) and JSTL - Error page: preserve header "HTTP/1.x 400 My message"? on the Sun forums.

    Eventually I used the following workaround, but this is kind of JSP specific, and may in fact be old:

    <%@ page isErrorPage="true" %>
    <%
        // This attribute is NOT set when calling HttpResponse#setStatus and then
        // explicitely incuding this error page using RequestDispatcher#include()
        // So: only set by HttpResponse#sendError()
        Integer origStatus = 
            (Integer)request.getAttribute("javax.servlet.error.status_code");
        if(origStatus != null) {
            String origMessage = 
                (String)request.getAttribute("javax.servlet.error.message");
            if(origMessage != null) {
                response.reset();
                response.setContentType("text/html");
                // deprecated, but works:
                response.setStatus(origStatus.intValue(), origMessage); 
                // would yield recursive error:
                // response.sendError(origStatus, origMessage); 
            }
        }
    %>
    

    And if you happen to test with Internet Explorer: disable "Show friendly HTTP error messages". (When not disabling that, IE has some odd requirement of some minimum length of the HTML content which, if not met, would —or will— make IE show its own error message instead. See also the registry key HKEY_LOCAL_MACHINE\Software\Microsoft\Internet Explorer\Main\ErrorThresholds at Microsoft's Description of Hypertext Transport Protocol Error Messages.)

提交回复
热议问题