ProblemYou want to use a servlet to manually send a response error to the client. SolutionUse the javax.servlet.HttpServletResponse.sendError( ) method. DiscussionThe javax.servlet.http.HttpServletResponse class has two versions of the sendError( ) method: one that takes an int parameter representing the HTTP response code (such as 500), and the other taking an int parameter and a String error message. The String parameter is used to display a message to the client if an error page is not configured for that particular response code. Example 9-3 shows the skeleton of a servlet whose commented sections describe various scenarios for sending response codes.
Example 9-3. Sending a response code from a servletpackage com.jspservletcookbook; import javax.servlet.*; import javax.servlet.http.*; public class Sender extends HttpServlet { public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, java.io.IOException { /* if the servlet tries to access a resource and finds out that the client is not authorized to access it - "401 Unauthorized" */ //response.sendError(401, // "You are not authorized to view the requested component"); /* if the servlet tries to access a resource that is forbidden for this client and there is no further information on it - "403 Forbidden" */ //response.sendError(403, // "You are forbidden from viewing the requested component; no //further information"); /* if the servlet tries to access a resource that is not found given the client's provided URL - "404 Not Found" */ //response.sendError(404, //"The server could not find the requested component"); } public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, java.io.IOException { doPost(request,response); } } If an error page is configured for the error code that you specified in the sendError( ) method, the web container invokes the error page mapped to that error code. If the error code does not have an error page configured for it in web.xml , the web container generates a default HTML page containing the message you included as the String parameter to the sendError( ) method, as in Figure 9-3. The server leaves cookies and other response headers unmodified when it returns this HTML to the client.
Figure 9-3. Server response to HttpServletResponse.sendError when there is no error page is configured for the error codeSee AlsoRecipe 9.1 on declaring exception handlers in the deployment descriptor; Recipe 9.2 on developing a servlet error handler; Recipe 9.4 on sending an error from a JSP; Recipe 9.5 on using JSPs to handle errors; Recipe 9.6 on declaring in a JSP that another JSP will handle its exceptions; Chapter 1 on the deployment descriptor; the Java servlet specification, which covers error handling in Chapter SRV.9.9: http://java.sun.com/products/servlet/index.html. |