[ Team LiB ] |
![]() ![]() |
Recipe 16.9 Setting Request Attributes in ServletsProblemYou want to use a servlet to store an attribute in a request. SolutionUse the javax.servlet.ServletRequest.setAttribute( ) method. DiscussionThe ServletRequest.setAttribute( ) method is often used in code that dynamically forwards requests or includes content with a javax.servlet.RequestDispatcher. Web applications that use RequestDispatchers to share requests between web components can communicate between these components using request attributes. Both the recipient of the RequestDispatcher.forward( ) method and the included file or page involved with the RequestDispatcher.include( ) method have access to the original or enclosing request. Therefore, these web components can also access any object attributes that are stored in those requests. The servlet in Example 16-10 creates an instance of a ContextObject, stores some information in the object by calling its put( ) method, and then places the object in the HttpServletRequest under the name "com.jspservletcookbook.ContextObject." The servlet then uses a RequestDispatcher to forward the request (including the attribute) and response to the servlet path /displayAttr. The web component mapped to that servlet path now has access to the previously created request attribute. Example 16-10. Binding an object to a requestpackage com.jspservletcookbook;
import javax.servlet.*;
import javax.servlet.http.*;
public class RequestBinder extends HttpServlet {
public void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException,
java.io.IOException {
//bind an object to the request
ContextObject contextObj = new ContextObject( );
contextObj.put( request.getRemoteAddr( ), ""+new java.util.Date( ));
request.setAttribute(
"com.jspservletcookbook.ContextObject",contextObj );
//use RequestDispatcher to forward request to another servlet
// mapped to the servlet path '/displayAttr'
RequestDispatcher dispatcher = request.getRequestDispatcher(
"/displayAttr");
dispatcher.forward(request,response);
} //doGet
}
Example 16-11 shows the servlet that receives the forwarded request. The RequestDisplay servlet is mapped in web.xml to the /displayAttr servlet path. This servlet gets the request attribute from the HttpServletRequest object by calling getAttribute( ) with the attribute name: com.jspservletcookbook.ContextObject. Since the return value of getAttribute( ) is typed to Object, the code must cast the result to ContextObject. Example 16-11. The target of RequestDispatcher.forward has access to the request attributepackage com.jspservletcookbook; import javax.servlet.*; import javax.servlet.http.*; public class RequestDisplay extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, java.io.IOException { ContextObject obj = (ContextObject) request.getAttribute( "com.jspservletcookbook.RequestObject"); response.setContentType("text/html"); java.io.PrintWriter out = response.getWriter( ); out.println( "<html><head><title>Request Attribute</title></head><body>"); out.println("<h2>Request attribute values</h2>"); //display the keys of the java.util.Map stored in the request object //attribute if (obj != null) out.println( obj.getValues( ) ); out.println("</body></html>"); } //end doGet } Make sure to check whether the ServletRequest.getAttribute( ) return value is null before calling any of the object attribute's methods. The getAttribute( ) method returns null if the request does not contain an attribute of the specified name. See AlsoRecipe 16.1-Recipe 16.4 on handling ServletContext attributes in servlets and JSPs; Recipe 16.5-Recipe 16.8 on handling session attributes in servlets and JSPs; Recipe 16.10 on setting request attributes in JSPs; Recipe 16.11 and Recipe 16.12 on accessing or removing request attributes in servlets and JSPs; the Javadoc for javax.servlet. ServletRequestAttributeListener: http://java.sun.com/j2ee/1.4/docs/api/javax/servlet/ServletRequestAttributeListener.html. ![]() |
[ Team LiB ] |
![]() ![]() |