servlet cookie处理实践

一、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。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值