一、servlet中处理cookie的方法
方法描述 |
---|
public void setDomain(String pattern)该方法设置 cookie 适用的域名。 |
public String getDomain()该方法获取 cookie 适用的域名。 |
public void setMaxAge(int expiry)该方法设置cookie生产的时间(以秒为单位)。如果不设置,cookie只会在当前session中有效。 |
public int getMaxAge()获取cookie的最大生存周期(以秒为单位),默认,-1表示cookie将持续下去,直到浏览器关闭。 |
public String getName()获取cookie的名称。name只能被设置一次,不能修改。 |
public void setValue(String newValue)设置cookie的值。 |
public String getValue()获取cookie的值。 |
public void setPath(String uri)设置cookie适用的路径。如果不指定路径,与当前页面相同目录下的(包括子目录下的)所有URL都会返回cookie。 |
public String getPath()获取cookie的适用路径。 |
public void setSecure(boolean flag)设置布尔值,true表示cookie只能在加密的(SSL)连接上发送。 |
public void setComment(String purpose)设置cookie的注释。该注释可以用于浏览器向用户呈现cookie时。 |
public String getComment()获取设置的注释。 |
二、创建cookie和使用cookie的例子
首先写了一个servlet,重写了doGet方法,用于处理来自”/CookiesTest”的GET请求。
//使用注解的方式注册servlet,和在web.xml中注册等效
@WebServlet(name = "CookiesTest", urlPatterns = {"/CookiesTest"})
public class CookiesTest extends HttpServlet{
private static final long serialVersionUID = 1L;
public CookiesTest() {}
@Override
public void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException{
//获取浏览器访问时携带的cookie,以数组的形式保存。
Cookie[] readCookies = request.getCookies();
String userNameStr;
String passwordStr;
if(readCookies == null){//等于null表示浏览器没有携带cookie
//浏览器没有携带cookie时,就从url中获取需要的参数
//http://localhost:8080/ServletCookieTest/CookiesTest?userName=1&password=1
//是本例子的url
userNameStr = request.getParameter("userName");//获取userName参数的值
passwordStr = request.getParameter("password");//获取password参数的值
//创建两个cookie,以name和value作为参数
Cookie userName = new Cookie("userName", userNameStr);
Cookie password = new Cookie("password", passwordStr);
//设置cookie的生存时间,单位是秒。
userName.setMaxAge(60*60); //60s * 60 = one hour
password.setMaxAge(60*60); //60s * 60 = one hour
//将新创建的cookie添加到HttpServletResponse中
response.addCookie(userName);
response.addCookie(password);
}
else{//说明浏览器携带了cookie,直接从浏览器携带的cookie中获取参数的值,不关心url了
userNameStr = readCookies[0].getValue();
passwordStr = readCookies[1].getValue();
}
//以下内容用于返回html,使用了userNameStr和passwordStr。
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
String title = "设置 Cookies 实例";
String docType =
"<!doctype html public \"-//w3c//dtd html 4.0 " +
"transitional//en\">\n";
out.println(docType +
"<html>\n" +
"<head><title>" + title + "</title></head>\n" +
"<body bgcolor=\"#f0f0f0\">\n" +
"<h1 align=\"center\">" + title + "</h1>\n" +
"<ul>\n" +
" <li><b>User Name</b>:"
+ userNameStr + "\n</li>" +
" <li><b>Password</b>:"
+ passwordStr + "\n</li>" +
"</ul>\n" +
"</body></html>");
}
}
编写index.html,一个简单的表单,action=”CookiesTest” method=”GET”
<html>
<head>
<meta charset="utf-8">
<title>ServletCookieTest</title>
</head>
<body>
<form action="CookiesTest" method="GET">
姓名<input type="text" name="userName">
<br />
密码<input type="text" name="password" />
<input type="submit" value="提交" />
</form>
</body>
</html>
部署
创建动态web工程,命名ServletCookieTest;
创建java类,创建CookiesTest;
在WebContent目录下创建index.html;
部署到tomcat;
访问http://localhost:8080/ServletCookieTest/index.html即出现用户名密码登陆界面,点击提交则出现http://localhost:8080/ServletCookieTest/CookiesTest?userName=test&password=test ,上文定义的servlet将处理这个url,第一次登陆时,不携带cookie,将使用填写的用户名和密码并设置cookie,之后登陆则忽略用户名和密码,使用cookie。
推荐一个chrome的插件EditThisCookie,可以修改删除cookie。
时间: 2024-11-07 01:47:07