黑马程序员技术交流社区
标题:
cookie_session
[打印本页]
作者:
人生若梦
时间:
2019-8-5 16:27
标题:
cookie_session
1.会话技术
会话: 打开浏览器,不断的访问....然后关闭浏览器,这个过程称之为一次会话
作用: 用来共享数据, 这个存储的方式很明显比request域要大,比ServletContext域要小,一般情况这个共享数据是一次会话有效
2.Cookie
是一种客户端会话技术, 将数据保存到客户端浏览器中
增: ----> 从服务器中写东西给浏览器, 找resp, 设置一个响应头 set-cookie
1.创建Cookie(String key,String value); ---->只能存字符串的键值对
2.通过resp中addCookie(cookie对象);
删: ----->
将maxAge调整成"零"
改: ---->
1.创建Cookie(String key,String value); ---->只能存字符串的键值对
2.通过resp中addCookie(cookie对象);
查: ---->从浏览器会携带cookie过来, 找req ----> 设置了一个请求头 cookie
Cookie[] arr = req.getCookies();
1.常见的方法:
1.构造:
Cookie(String key,String value)
2.方法
String getName(); ---->获取cookie的键
String getValue(); ---->获取cookie的值
void setMaxAge(int seconds) ---->调整cookie的存活时间
正数: -----> 指定时间有效, 默认单位是秒
负数 --->默认一次会话有效
零: ---->删除cookie
Cookie c = new Cookie("aaa","123");
Cookie c1 = new Cookie("aaa","");
setPath("路径") ------> 如果不给值, 默认当前项目的虚拟路径, 也就是有效范围是当前项目;
setDomain("路径") ---->可以在不同的服务器之间共享cookie
2.cookie的有效时间
默认是一次会话有效, 原因默认MaxAge的值是一个负数
3.是否能够存中文
tomcat8以后可以存中文的, 但是我们不用, 原因是他不能存特殊字符!!!!所以还是延用之前的做法
如果有特殊字符要存, 建议用URLEncode编码一下, 取的时候记得要用URLDecode去解码一下
URLEncoder.encode(要编码的字符串,"原来的编码")
URLDecoder.decode(要解码的字符串,"组成的编码")
4.Cookie的范围
默认只在当前项目有效
可以通过setPath做到在同一个服务器中,不同项目来共享数据 day15和day16项目之间想要共享数据,我们可以将setPath("/")
可以通过setDomain("一级域名"),可以在不同的服务器中共享cookie
3.JSP
作用: 为了弥补HTML的缺陷而得到东西, HTML不能写逻辑, html没有办法写java代码, jsp可以, 能够简化书写
本质: 其实JSP本质就是一个Servlet, 如果没有他的话, 我们动态资源只有Servlet, 所有的书写标签的动作都的由我们自己去写很恶心
而jsp老厉害, 既可以写HTML的代码还可以java的代码, 而jsp引擎自动帮我们生成jsp对应的Servlet类, 所有输出动作,由jsp引擎帮
我们自动生成!!!!!
jsp中如何书写java代码
<%%> : 生成的代码在service方法内部
<%!%>: 在成员区域
<%=%>: 输出页面上面,他也是service方法中,out.print(内容);
面试:
1. <%
public void method(){
}
%>
分析: 这个典型错误, 因为<%%>在service方法里面, 方法不能嵌套方法
2.
<%
private String name;
%>
分析: 这个典型错误,因为<%%>在service方法里面,不用权限修饰符修饰
3.
<%! int a; %>
分析:正确,相当于定义一个成员变量
4.
<%
int a;
%>
<%
System.out.println(a);
%>
分析: 典型错误,a是局部变量, 局部没有赋值不能使用
5.
<%
int a;
%>
<%
int a = 10;
System.out.println(a);
%>
分析: 典型错误, 在一个方法中不能出现重名的变量
6.
<%= System.out.println("你好") %>
分析: 典型错误, 因为<%=%> 是out.print()小括号里面的东西
7.
<%
int a = 10;
%>
<%= a;%>
分析:典型错误,因为<%=%> 是out.print()小括号里面的东西
如何学好jsp
jsp = HTML + JAVA + 内置对象
内置对象
9个内置对象
request
response
有缓冲区d
out
有缓冲区abc
out.write("a");
out.write("b");
out.write("c");
resp.getWrite().write("d");
4.Session(HttpSession)
服务器端的技术,说白了, 他的数据保存到服务器中,而且是一个域对象
方法:
setAttr...
getAttr...
removeAttr...
获取:
req.getSession();
原理:
服务器怎么保证张三用户拿到永远的"张三的数据"
他底层基于cookie的, 每个客户的浏览器中保存cookie这个可以看成打开session的钥匙
1.当浏览器关闭后,服务器不关闭,我们获取的session是不是同一个?
答:不是, 因为session基于cookie, 而浏览器关闭后, cookie就消失了, 钥匙失效了, 在次打开浏览器,就不会带着原来的钥匙过去!!!
解决: 我们可以延长cookie的有效时长
面试:session的销毁时机是一次会话结束!
答:错误的, session 默认存活时间是30min, 让session失效并不是session销毁了, 是cookie不见了!!!!
2.当浏览器不关闭, 服务器关闭,
获取的session不是同一个, 但是我们知道数据可以得到,tomcat有活化和钝化机制, 而且tomcat自带的!!!!!!
注意: idea能够完成钝化, 不能完成活化, 原因是因为当idea启动之后会将work目录删除掉, 也会连钝化的文件也会被删掉
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2