这边文章我们讨论cookies, cookies同样是用户session管理。在这里,让我们从上一边文章(Session in Servlet)重新看一些事情
这样我们就可以关联session与cookies了。当用户首次访问一个web应用,servlet容器通过调用request.getSession()创建新的
HttpSession对象。一个唯一的id分配个这个session。 servlet容器也在Http 响应头中设置了cookies名称,唯一的session ID
作为它的值。
cookies存储在用户的浏览器中,客户端(用户的浏览器)发送到服务器的请求都回发送cookies直到这个cookies不可用。servlet容器
检查请求头中的cookies,并且从cookies中获取session信息,并使用服务器关联的session。
这个session在web.xml标签中指定的时间内是有效的。如果没有在web.xml中指定,那么这个session的有效时间为30分钟。只要用户
的浏览器在运行这个cookies就是有效的,直到浏览器关闭,这个cookies和关联的sessions就被销毁。因此当用户再次打开浏览器并发
送请求到web服务器上,就会创建一个session.
Cookies的类型:
我们可以通过它们的过时时间类酚类它们。
1 Session
2 Persistent
1) SessionCookies:
Session cookies 不会有过期是叫你。它一直存在浏览器的内存中,只有web浏览器被关闭cookies才会被销毁。
2)PersistentCookies:
不像Session Cookies, 它们有过期时间,它们被存储在用户的硬盘中根据过期时间销毁它们。
怎么向客户端发送cookies?
这里是发送cookies 到客户段的步骤:
1 创建Cookies对象
2 设置最大时间
3 把Cookies放入到Http 响应头中
1) 创建Cookies对象:
Cookie c = new Cookie("userName","Chaitanya");
2) 设置最大时间:
通过使用setMaxAge()方法,我们可以设置最大时间,一般这个是秒为单位。
c.setMaxAge(1800);
3) 把Cookies放入到Http 响应头中
我们可以通过下main的方法发送cookies到客户的浏览器
response.addCookie(c);
怎么获取cookies?
Cookie c[]=request.getCookies();
//c.length gives the cookie count
for(int i=0;i<c.length;i++){
out.print("Name: "+c[i].getName()+" & Value: "+c[i].getValue());
}
Cookies类中的方法
1) public void setComment(String purpose):
这个方法用于设置cookies的备注,基本用户描述该cookies
2) public String getComment():
返回该cookies的描述,如果不存在则返回null.
3) public void setMaxAge(int expiry):
设置cookies的最大有效时间,单位秒。
4) public int getMaxAge():
获取该cookies的最大时间,单位秒。默认为-1,表示这个cookies一直存在直到浏览器关闭。
5) public String getName():
返回cookies名称,名称一旦创建就不能改变。
6) public void setValue(String newValue):
设置cookie的值。
7) public String getValue():
获取当前cookies值。
上面的方法只是一般经常被使用的方法。完整的方法清单请参考官方文档。
例子:
index.html
<form action="login">
User Name:<input type="text" name="userName"/><br/>
Password:<input type="password" name="userPassword"/><br/>
<input type="submit" value="submit"/>
</form>
MyServlet1.java
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class MyServlet1 extends HttpServlet
{
public void doGet(HttpServletRequest request,
HttpServletResponse response) {
try{
response.setContentType("text/html");
PrintWriter pwriter = response.getWriter();
String name = request.getParameter("userName");
String password = request.getParameter("userPassword");
pwriter.print("Hello "+name);
pwriter.print("Your Password is: "+password);
//Creating two cookies
Cookie c1=new Cookie("userName",name);
Cookie c2=new Cookie("userPassword",password);
//Adding the cookies to response header
response.addCookie(c1);
response.addCookie(c2);
pwriter.print("<br><a href='welcome'>View Details</a>");
pwriter.close();
}catch(Exception exp){
System.out.println(exp);
}
}
}
MyServlet2.java
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class MyServlet2 extends HttpServlet {
public void doGet(HttpServletRequest request,
HttpServletResponse response){
try{
response.setContentType("text/html");
PrintWriter pwriter = response.getWriter();
//Reading cookies
Cookie c[]=request.getCookies();
//Displaying User name value from cookie
pwriter.print("Name: "+c[1].getValue());
//Displaying user password value from cookie
pwriter.print("Password: "+c[2].getValue());
pwriter.close();
}catch(Exception exp){
System.out.println(exp);
}
}
}
web.xml
<web-app>
<display-name>BeginnersBookDemo</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>Servlet1</servlet-name>
<servlet-class>MyServlet1</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Servlet1</servlet-name>
<url-pattern>/login</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>Servlet2</servlet-name>
<servlet-class>MyServlet2</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Servlet2</servlet-name>
<url-pattern>/welcome</url-pattern>
</servlet-mapping>
</web-app>