cookie:客户端会话技术,将数据保存到客户端
package com.data.cookie; import javax.servlet.servletexception; import javax.servlet.annotation.webservlet; import javax.servlet.http.cookie; import javax.servlet.http.httpservlet; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletresponse; import java.io.ioexception; @webservlet("/cookiedemo1") public class cookiedemo1 extends httpservlet { protected void dopost(httpservletrequest request, httpservletresponse response) throws servletexception, ioexception { this.doget(request,response); } protected void doget(httpservletrequest request, httpservletresponse response) throws servletexception, ioexception { //创建cookie对象 cookie cookie = new cookie("msg","hello"); //发送cookie response.addcookie(cookie); //当访问cookiedemo1的servlet的时候,会创建一个cookie对象 //然后把绑定的数据发送给浏览器 } }
package com.data.cookie; import javax.servlet.servletexception; import javax.servlet.annotation.webservlet; import javax.servlet.http.cookie; import javax.servlet.http.httpservlet; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletresponse; import java.io.ioexception; @webservlet("/cookiedemo2") public class cookiedemo2 extends httpservlet { protected void dopost(httpservletrequest request, httpservletresponse response) throws servletexception, ioexception { this.doget(request,response); } protected void doget(httpservletrequest request, httpservletresponse response) throws servletexception, ioexception { //获取cookie cookie[] cs = request.getcookies(); if( cs != null){ //遍历cs,拿到每一个cookie对象 for(cookie c : cs){ string name = c.getname(); string value = c.getvalue(); system.out.println(name+":"+value); } } } }
输出结果 msg:hello idea-a0bb733:23efa255-9ce7-42d9-8d0b-9853348226b8
会话技术原理分析
概念:java server pages : java服务器端页面,可以理解为一个特殊的页面,其中既可以定义html标签,又可以定义java代码
jsp的脚本:jsp定义代码的方式
1.<% 代码 %>: 定义的代码,在service方法中。
2.<%! 代码 %>:定义的java代码,在jsp转换后的java类的成员文字
3.<%+ 代码 %>:定义的java代码,会输出到页面上
概念:在服务器端会话技术,在一次会话的多次请求间共享数据,将数据保存在服务器端的对象中。httpsession
package com.data.session; import javax.servlet.servletexception; import javax.servlet.annotation.webservlet; import javax.servlet.http.*; import java.io.ioexception; @webservlet("/sessiondemo1") public class sessiondemo1 extends httpservlet { @override protected void doget(httpservletrequest req, httpservletresponse resp) throws servletexception, ioexception { //获取httpsession对象 httpsession session = req.getsession(); //当客户端关闭后,服务器不关闭,两次获取的session不是同一个对象 //如果需要相同,可以创建cookie对象,设置id值,因为session的实现依赖于cookie,只要id值不变就是同一个对象 cookie cookie = new cookie("jsessionid",session.getid());//jsessionid=226e48b3ad9f203b2bcbfca2e6ea5d71 cookie.setmaxage(60*60);//一个小时内关闭客户端都是同一个对象,因为他们的id值相同 resp.addcookie(cookie); //在服务器端存储数据 session.setattribute("msg","hello,session"); } @override protected void dopost(httpservletrequest req, httpservletresponse resp) throws servletexception, ioexception { this.doget(req,resp); } }
package com.data.session; import javax.servlet.servletexception; import javax.servlet.annotation.webservlet; import javax.servlet.http.httpservlet; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletresponse; import javax.servlet.http.httpsession; import java.io.ioexception; @webservlet("/sessiondemo2") public class sessiondemo2 extends httpservlet { @override protected void doget(httpservletrequest req, httpservletresponse resp) throws servletexception, ioexception { //创建对象 httpsession session = req.getsession(); //通过键获取值 object msg = session.getattribute("msg"); system.out.println(msg); } @override protected void dopost(httpservletrequest req, httpservletresponse resp) throws servletexception, ioexception { this.doget(req,resp); } }
session原理:session的实现依赖于cookie的,服务在一次会话范围内,多次获取的session对象是同一个。
客户端关闭后,服务器不关闭,两次获取session不是同一个对象,如需相同,可以创建cookie,设置属性。
客户端不关闭,服务器关闭后,两次获取的session不是同一个对象,
session在服务器被关闭时销毁,在调用invalidata()时也会销毁,默认失效时间是30分钟
session用于存储异常会话的多次请求数据,存在服务器端,session可以存储任意类型,任意大小的数据
session存储数据在服务器端,cookie在客户端
session没有数据大小限制,cookie有
session数据安全,cookie相对于不安全
验证码案列 写了4个小时 ,得到的结果500错误,尚没有找到bug,明天再看吧,
如对本文有疑问, 点击进行留言回复!!
SpringBoot引用阿里easyexcel,Excel导出返回浏览器下载
HashMap、Hashtable、ConcurrentHashMap三者间的异同
解决RecycleView 中Item包含Edittext时,滑动view复用导致数据错乱的问题
多线程、同步工作原理、死锁案例、Lock接口、线程的生命周期的讲解及实现
网友评论