Recipe 10.4 Reading Cookie Values with a Servlet


Problem

You want to read cookie values from a client using a servlet.

Solution

Create a Java array of javax.servlet.http.Cookie objects by calling the HttpServletRequest.getCookies( ) method. Then cycle through the array, accessing each cookie and value as needed.

Discussion

The web user will send cookies to a web site only if the user originally received Set-Cookie headers from that domain. In addition, if the cookie was set with a Path attribute specifying a context path, then the servlet can access the cookie only if the servlet is also associated with the context path. As a result, always test the return value of the request.getCookies( ) method (which returns an array of Cookie objects) to see if it is null , indicating that the user has not sent any cookies, before operating upon it.

Example 10-5 displays the value of any found cookies in a web browser. The CookieReader class uses the javax.servlet.http.Cookie.getName( ) and getValue( ) methods in order to display this information.

Example 10-5. A cookie-reading servlet
 package com.jspservletcookbook;            import javax.servlet.*; import javax.servlet.http.*; public class CookieReader extends HttpServlet {   public void doGet(HttpServletRequest request,      HttpServletResponse response) throws ServletException,     java.io.IOException {            Cookie cookie = null;  //Get an array of Cookies associated with this domain       Cookie[] cookies = request.getCookies( );  boolean hasCookies = false;  //if cookies contains an array and not a null value,       //then we can display information about the cookies.           if (cookies != null)           hasCookies = true;  // display the name/value of each cookie       response.setContentType("text/html");       java.io.PrintWriter out = response.getWriter( );            out.println("<html>");       out.println("<head>");       out.println("<title>Cookie information</title>");         out.println("</head>");       out.println("<body>");  if (hasCookies){           out.println(             "<h2> The name and value of each found cookie</h2>");                    for (int i = 0; i < cookies.length; i++){               cookie = cookies[i];               out.println(                 "Name of cookie #"+(i + 1)+": "+cookie.getName( )+"<br>");               out.println(                 "Value of cookie #"+(i + 1)+": "+                   cookie.getValue( )+"<br><br>");        }//for  } else {           out.println(             "<h2> This request did not include any cookies</h2>");       }       out.println("</body>");       out.println("</html>");}         public void doPost(HttpServletRequest request,      HttpServletResponse response) throws ServletException,      java.io.IOException {                doGet(request,response);   }  } 

The javax.servlet.http.Cookie class is an abstraction of a cookie that has getter and setter methods for a cookie's attributes, such as its name, value, path, and secure attributes. However, when you retrieve a cookie, you can only get its name and value, because this is the only information that the client includes in the request header. The Cookie request header looks like:

 Cookie: JSESSIONID=F80F0F571FDE4873CFF3FF0B842D4938; mycookie=1051610231064 

For example, calling Cookie.getPath( ) on a retrieved cookie will return null , even if the cookie was originally set with a valid path attribute, such as /mypath . You can only access these values in the servlet or JSP that creates the cookie object in the first place (see Recipe 10.1 and Recipe 10.3).

Figure 10-3 shows how a web browser displays this servlet's output.

Figure 10-3. A servlet displays cookie information
figs/jsjc_1003.gif

See Also

Recipe 10.1 on setting a cookie with a servlet; Recipe 10.2 on creating an array from all of the request's cookies; Recipe 10.3 on setting a cookie with a JSP; Recipe 10.5 on reading cookie values with a JSP; Recipe 10.6 on altering or removing an existing cookie; the RFC 2109 document dealing with cookies: ftp://ftp.rfc-editor.org/in-notes/rfc2109.txt; Netscape's preliminary specification for cookies: http://wp.netscape.com/newsref/std/cookie_spec.html; the Java Cookie API: http://java.sun.com/j2ee/1.4/docs/api/javax/servlet/http/Cookie.html.



Java Servlet & JSP Cookbook
Java Servlet & JSP Cookbook
ISBN: 0596005725
EAN: 2147483647
Year: 2004
Pages: 326

flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net