Cookies in Servlet: How Cookie Works
Cookies in Servlet: How Cookie Works
A cookie is a small piece of information that is persisted between the multiple client requests.
A cookie has a name, a single value, and optional attributes such as a comment, path and domain
qualifiers, a maximum age, and a version number.
Types of Cookie
There are 2 types of cookies in servlets.
• Non-persistent cookie
• Persistent cookie
Non-persistent cookie
It is valid for single session only. It is removed each time when user closes the browser.
Persistent cookie
It is valid for multiple session . It is not removed each time when user closes the browser. It is
removed only if user logout or signout.
Advantage of Cookies
• Simplest technique of maintaining the state.
• Cookies are maintained at client side.
Disadvantage of Cookies
• It will not work if cookie is disabled from the browser.
• Only textual information can be set in Cookie object.
Note: Gmail uses cookie technique for login. If you disable the cookie, gmail won't work.
Cookie class
javax.servlet.http.Cookie class provides the functionality of using cookies. It provides a lot of
useful methods for cookies.
There are given some commonly used methods of the Cookie class.
Method
Description
public void setMaxAge(int expiry)
Sets the maximum age of the cookie in seconds.
public String getName()
Returns the name of the cookie. The name cannot be changed after creation.
public String getValue()
Returns the value of the cookie.
public void setName(String name)
changes the name of the cookie.
public void setValue(String value)
changes the value of the cookie.
• Cookie ck[]=request.getCookies();
• for(int i=0;i<ck.length;i++){
• out.print("<br>"+ck[i].getName()+"
"+ck[i].getValue());//printing name and value of cookie
• }
Simple example of Servlet Cookies
In this example, we are storing the name of the user in the cookie object
and accessing it in another servlet. As we know well that session
corresponds to the particular user. So if you access it from too many
browsers with different values, you will get the different value.
index.html
FirstServlet.java
• import java.io.*;
• import javax.servlet.*;
• import javax.servlet.http.*;
•
•
• public class FirstServlet extends HttpServlet {
•
• public void doPost(HttpServletRequest request,
HttpServletResponse response){
• try{
•
• response.setContentType("text/html");
• PrintWriter out = response.getWriter();
•
• String n=request.getParameter("userName");
• out.print("Welcome "+n);
•
• Cookie ck=new Cookie("uname",n);//creating cookie
object
• response.addCookie(ck);//adding cookie in the response
•
• //creating submit button
• out.print("<form action='servlet2'>");
• out.print("<input type='submit' value='go'>");
• out.print("</form>");
•
• out.close();
•
• }catch(Exception e){System.out.println(e);}
• }
• }
SecondServlet.java
• import java.io.*;
• import javax.servlet.*;
• import javax.servlet.http.*;
•
• public class SecondServlet extends HttpServlet {
•
• public void doPost(HttpServletRequest request,
HttpServletResponse response){
• try{
•
• response.setContentType("text/html");
• PrintWriter out = response.getWriter();
•
• Cookie ck[]=request.getCookies();
• out.print("Hello "+ck[0].getValue());
•
• out.close();
•
• }catch(Exception e){System.out.println(e);}
• }
•
•
• }
web.xml
• <web-app>
•
• <servlet>
• <servlet-name>s1</servlet-name>
• <servlet-class>FirstServlet</servlet-class>
• </servlet>
•
• <servlet-mapping>
• <servlet-name>s1</servlet-name>
• <url-pattern>/servlet1</url-pattern>
• </servlet-mapping>
•
• <servlet>
• <servlet-name>s2</servlet-name>
• <servlet-class>SecondServlet</servlet-class>
• </servlet>
•
• <servlet-mapping>
• <servlet-name>s2</servlet-name>
• <url-pattern>/servlet2</url-pattern>
• </servlet-mapping>
•
• </web-app>
Output