关于session

用户状态数据的存储
cookiesession
概念服务器写到浏览器上的一小段String(不支持中文) 中文处理:java.net.URLEncoder.encode(str,编码) java.net.URLDecoder.decode(str,编码)HttpSession是一个作用域,可以存放“命名属性” 会话:client与服务器端的一次完整的通信过程(涵盖多次请求)
数据保存在客户端浏览器中保存用户状态数据在服务器端保存用户状态数据
数据量文本格式存储在浏览器上,4kb不限量
创建对象/获取Cookie c = new Cookie( name , value );HttpSession session = request.getSession( boolean – true );
运行代码①写cookie — response.addCookie©; ②读cookie — request.getCookies() --> Cookie[] 如果没有读到,返回值为null① 存数据 — session.setAttribute(“name”,value); ② 取数据 — Object value = session.getAttribute(“name”); ③ 移除数据 — session.removeAttribute(“name”);
存活时间设置存活时间 — cookie.setMaxAge( xxx ); ① 数字为正数: 表示存活多少秒 ② 数字为负数: 表示cookie会在浏览器关闭时被销毁控制session的有效存活时间 ① 可以在tomcat的配置文件中修改tomcat产生的所有session的存活时间(统一修改) :tomcat — conf — web.xml (不建议) ② 可以针对某一个应用中使用的session进行修改 — 程序中通过函数调用修改:session.setMaxInactiveInterval( time ); time单位秒 ③ 主动销毁session对象 — 完成安全退出:session.invalidate(); (创建ExitAction)
生命周期生命周期较长 begin: 当client访问的程序里第一次出现request.getSession(true)代码时(懒汉式创建) end: timeout关闭session(服务器会为session设置一个有效存活时间 — 默认30分钟 )
访问路径cookie.setPath("…"); 注:http协议规定,只有处于同一路径下的程序才能访问该路径下程序写过的cookie(默认不能跨应用)
forwardredirect
不同一个请求,地址栏不变两个请求,地址栏变化
使用选择如果当前程序执行结束,功能没有彻底完成 or 有大量数据需要传递,则选择 forward 跳转如果当前程序执行结束, 功能已经完成(下一个程序涉及其他功能),选择 redirect 跳转;无法确定,优选 redirect
相同代码运行后都可以使得程序的流程由AServlet跳转到Bservlet程序运行
session 的工作原理

session是一个存在服务器上的类似于一个散列表格的文件。里面存有我们需要的信息,在我们需要用的时候可以从里面取出来。里面存储的是用户的sessionid,用户向服务器发送请求的时候会带上这个sessionid。可以从中取出对应的值。

[外链图片转存失败(img-72BQLeei-1562310646377)(C:\Users\AAA\AppData\Roaming\Typora\typora-user-images\1558444354850.png)]

与用户相关***(一个用户对应一个 session对象)*** — 浏览器软件(用户绑定)

​ ① 问题: 在A程序里 sesssion.setAttribute(“name”,“hehe”); client1 访问了A程序

​ 问:之后哪些程序可以通过session.getAttribute(“name”) 获取hehe数据

​ 答:只要被client1请求的程序(不论功能),就可以得到hehe数据

​ ② 原理:

​ 当client向server申请session对象时,tomcat会首先读取浏览器上的cookie,查找JSESSIONID的cookie

​ —> 没找到: tomcat会为client创建新的session,同时将session的id以cookie的形式写入浏览器(cookie 浏览器关闭销毁)

​ —> 找到:获取cookie里的session id,在内存中查找对应的session对象,返回给client使用

​ ③ 安全退出 和 关闭浏览器退出 的区别

​ 安全退出 : 直接销毁client对应的session对象,并清除浏览器上的cookie

​ 关闭浏览器退出: 存储了sessionid的cookie被销毁,再次访问时,无法提供之前session的id,tomcat为client创建了新的session(原有session仍然存活30分钟)

​ 注意: 保存sessionid的cookie JSESSIONID – 32位16进制数

如果客户端禁止cookie,session 是否还能用

① 如果浏览器拒绝接收cookie,则程序无法完成功能(一般不要求程序做出处理)

② 如果使用response.encodeURL() 来处理跳转路径,则可以在浏览器不支持cookie的情况下,让前后两个 网页使用同一个session对象

方法功能: 检测浏览器是否支持cookie,支持(不做任何处理原样返回),不支持(将当前网页里的sessionid拼接到地址后面 url;jsessionid=xxxxxx )

jsp
jsp和servlet的区别
servletjsp
标签与代码比重在大量的java代码中嵌入少量的html标签,java代码的比重比较大 — XxxAction在大量的html标签中嵌入少量的java代码,html标签比重大 — XxxView
运行原理当client发出servlet请求后,tomcat会根据请求里的网名找到对应程序的对象,调用service方法运行,将程序的执行结果发还给client浏览器显示(client收到的执行结果)-------”Servlet技术是运行在server端的技术“当client发出jsp请求后,tomcat会找到指定的jsp文件,将其翻译成java程序(servlet),然后按照servlet运行方式执行(client收到的执行结果)------”JSP技术是运行在server端的技术“
执行效率较高较低(由于需要tomcat进行编译解释,导致jsp网页第一次被访问时,网页回显速度慢,但文件改变后不需要重启服务器,不需要编写配置文件)
session的创建方式HttpSession session = request.getSession( boolean – true );不需要创建
HttpSession
线程安全问题

servlet 程序 和 jsp 文件都只有一个对象产生:

servlet的线程安全保证:尽量不要定义实例变量

jsp文件的线程安全保证:尽量不要在声明脚本里定义变量

ervlet 程序 和 jsp 文件都只有一个对象产生:

servlet的线程安全保证:尽量不要定义实例变量

jsp文件的线程安全保证:尽量不要在声明脚本里定义变量

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值