首页 > 其他分享 >day11-(cookie&&session)

day11-(cookie&&session)

时间:2022-10-31 15:37:16浏览次数:55  
标签:浏览器 String 购物车 session cookie day11 jsp


回顾:
response:响应
往浏览器写东西
响应行
操作状态码
常用方法:
setStatus(int code): 1 2 3
响应头
格式:
key:value(value可以是多个)
常用方法:
setHeader(String key,String value):设置字符串形式的响应头
addHeader(String key,String value):添加字符串形式的响应头 若没有设置则设置,若设置过则追加
响应体
浏览器展示的内容
常用方法:
getWriter()
getOutputStream()
注意:
俩流互斥,服务器会把我们关闭
//
常见的响应头
location:重定向 配合302
开发中:response.sendRedirect("路径");
refresh:定时刷新
response.setHeader("refresh","秒数;url=路径");//java
meta//html
content-type:设置文件的mimetype,设置响应流的编码且告诉浏览器用什么编码打开
开发中:response.setContentType("text/html;charset=utf-8");
content-disposition:设置文件下载
response.setHeader("content-disposition","attachment;filename="+文件名称);
文件下载:
设置两个头一个流
content-type
content-disposition

getOutputStream()
//
request:请求
获取从浏览器发送过来数据
请求行
常用方法:
获取项目名:getContextPath()
请求头
格式:
key:value(value可以是多个)
常用方法:
getHeader(String key)
请求参数
String getParameter(String key)
String[] getParameterValues(String key)
Map<String,String[]> getParameterMap()
获取参数中文乱码:
通用方式:
new String(参数.getBytes("iso-8859-1"),"utf-8");
针对于post:
request.setCharacterEncoding("utf-8");

常用的头信息:
user-agent:获取浏览器内核
referer:页面从那里跳转过来
///
request域对象:
xxxAttribute()
请求转发:
request.getRequestDispatcher("/内部路径").forward(request,response);




jsp cookie session

案例1-记录用户上次访问时间
需求:
当用户第一次登录的时候,提示:你是第一次访问,且记录该次访问时间,
下一次访问的时候,获取上一次访问时间且展示出来
技术分析:
会话技术
cookie
jsp
//
jsp:
java server pages(java服务器页面)
本质上jsp就是一个servlet,在html代码中嵌套java代码,
运行在服务器端,处理请求,生成动态的内容.
对应的java和class文件在tomcat目录下的work目录
后缀名 .jsp

执行流程:
1.浏览器发送请求,访问jsp页面
2.服务器接受请求,jspSerlvet会帮我们查找对应的jsp文件
3.服务器将jsp页面翻译成java文件.
4.jvm会将java编译成.class文件
5.服务器运行class文件,生成动态的内容.
6.将内容发送给服务器,
7.服务器组成响应信息,发送给浏览器
8.浏览器接受数据,解析展示

jsp的脚本:
<%...%> java程序片段
生成成jsp的service方法中
<%=...%> 输出表达式
生成成jsp的service方法中,相当于在java中调用out.print(..)
<%!...%> 声明成员
成员位置.
/
会话技术
当用户打开浏览器的时候,访问不同的资源,知道用户将浏览器关闭,可以认为这是一次会话.
作用:
因为http协议是一个无状态的协议,它记录不论上次访问的内容.用户在访问过程中难免会产生一些数据,
通过会话技术就可以将起保存起来.
例如:
用户登录
验证码
购物车
访问记录
.....
分类:
cookie:浏览器端会话技术
session:服务器端会话技术
//
cookie:
小饼干 小甜点
cookie是由服务器生成,通过response将cookie写回浏览器(set-cookie),保留在浏览器上,
下一次访问,浏览器根据一定的规则携带不同的cookie(通过request的头 cookie),我们服务器就可以接受cookie
cookie的api:
new Cookie(String key,String value)
写回浏览器:
response.addCookie(Cookie c)
获取cookie:
Cookie[] request.getCookies()
cookie的常用方法:
getName():获取cookie的key(名称)
getValue:获取指定cookie的值
/
案例1-步骤分析:
1.创建一个serlvet RemServlet 路径:/rem
2.在servlet中:
获取指定cookie 例如:名称为 lastTime
request.getCookies()
判断cookie是否为空
若为空:提示信息 第一次访问
若不为空:
获取此cookie的value
展示信息:你上次访问时间是....

将这次访问时间记录,写会浏览器

cookie-总结:
常用方法:
setMaxAge(int 秒):设置cookie在浏览器端存活时间 以秒为单位
若设置成 0:删除该cookie(前提必须路径一致)
setPath(String path):设置cookie的路径.
当我们访问的路径中包含此cookie的path,则携带
默认路径:
访问serlvet的路径,从"/项目名称"开始,到最后一个"/"结束
例如:
访问的serlvet路径:
/day11/a/b/hello
默认路径为:
/day11/a/b
手动设置路径:以"/项目名"开始,以"/"结尾;
/
案例2:记录用户浏览历史
需求:
当用户访问一个商品的时候,需要将该商品保留在浏览记录中
技术分析:
cookie
步骤分析:
1.先将product_list.htm转成jsp
2.点击一个商品,展示该商品的信息,将该商品id记录到cookie (GetProductById)
获取之前的浏览记录 例如名称:ids
判断cookie是否为空
若为空 将当前商品的id起个名称 ids 放入cookie中 ids=1
若不为空,获取值 例如:ids=2-1 当前访问的id=1 使用"-"分割商品id
判断之前记录中有无该商品
若有:
将当前的id放入前面 结果 ids=1-2
若没有:
继续判断长度是否>=3
若>=3,移除最后一个,将当前的id放入最前面
若<3,直接将当前的id放入最前面.

若 ids=3-2-1 现在访问1 结果 ids=1-3-2
若 ids=4-3-2 现在访问1 结果 ids=1-4-3

3.再次回到product_list.jsp页面,需要将之前访问商品展示在浏览记录中
获取ids 例如:ids=2-3-1
切割
/
扩展:删除浏览记录
技术分析:
cookie.setMaxAge(0)
步骤分析:
1.在浏览器记录中添加一个超链接
<a href="/day1101/clearHistroy">清空</a>
2.创建servlet clearHistroy
创建一个cookie
名称路径保持一致
setMaxAge(0)
写回浏览器
3.页面跳转
重定向 product_list.jsp

/
注意:
cookie不能跨浏览器
cookie中不支持中文
/
案例3-添加到购物车
需求:
在商品详情页面有一个添加到购物车,点击则将该商品添加到购物车,点击购物车连接将里面的所有商品展示出来
技术分析:
session
//
session:
服务器端会话技术.
当我们第一次访问的服务器的时候,服务器获取id,
能获取id
要拿着这个id去服务器中查找有无此session
若查找到了:直接拿过来时候,将数据保存,需要将当前sessin的id返回给浏览器
若查找不到:创建一个session,将你的数据保存到这个session中,将当前session的id返回给浏览器
不能获取id
创建一个session,将你的数据保存到这个session中,将当前session的id返回给浏览器

获取一个session:
HttpSession request.getSession()

域对象:
xxxAttribute
生命周期:
创建:第一次调用request.getsession()创建
销毁:
服务器非正常关闭
session超时
默认时间超时:30分钟 web.xml有配置
手动设置超时:setMaxInactiveInterval(int 秒) 了解
手动干掉session
★session.invalidate()
存放的私有的数据.

步骤分析:
1.点击添加到购物车的时候,提交到一个servlet add2CartServlet
需要将商品名称携带过去
2.add2CartServlet中的操作
获取商品的名称
将商品添加到购物车 购物车的结构 Map<String 名称,Integer 购买数量>
将购物车放入session中就可以了

将商品添加到购物车分析:
获取购物车
判断购物车是否为空
若为空:
第一次添加
创建一个购物车
将当前商品put进去.数量:1
将购物车放入session中
若不为空:继续判断购物车中是否有该商品
若有:
取出count 将数量+1
将商品再次放入购物车中
若没有:
将当前商品put进去 数量:1

提示信息:你的xx已添加到购物车中


3.点击购物车连接的时候 cart.jsp
从session获取购物车
判断购物车是否为空
若为空:提示信息
若不为空:遍历购物车即可

//
案例2-扩展清空购物车:
思路1:将购物车移除
思路2:将session干掉
步骤分析:
在cart.jsp上添加一个超链接 清空购物车
<a href="/day1101/clearCart">清空购物车</a>
在clearCart中需要调用session.invalidate()
重定向到购物车页面




























上午回顾:
jsp:
java 服务器页面
就是在html代码嵌套java代码,
本质上就是一个servlet,运行在服务器,接受请求,处理业务逻辑,生成动态内容
jsp三个脚本:
<%...%> java片段
生成在jsp的service方法中
<%=...%> 输出表达式
生成service方法中
不能";"结尾
<%!...%> 声明成员
cookie:浏览器端会话技术
由服务器生成,key=value格式,通过响应头(set-cookie)写回浏览器
保存在浏览器端,当浏览器下一次访问的时候,根据一定的规则携带不同的cookie,通过请求头(cookie)携带
常用方法:
构造:
new Cookie(String key,String value);
写回浏览器:
response.addCookie(Cookie c)
获取:
Cookie[] request.getCookies();
cookie的api:
getName():获取cookie的名称
getValue():获取cookie的值

setMaxAge(int 秒):设置cookie在浏览器的存活时间
若设置为0:删除cookie(前提必须路径保持一致)
setPath(String path):设置cookie的路径 /day1101/
若访问的路径中包含cookie的path,则携带过去
注意:
cookie不能跨浏览器
cookie中不支持中文
///
session:
服务器端会话技术:
依赖于cookie
浏览器访问服务器,服务器获取jsessionid
若获取不到
创建一个sesion,将数据保存,将当前session的jsessionid通过cookie返回浏览器
若获取到
拿着该jsessionid去session池中查找有无该session
若查找到:
直接拿过来使用,将jsessionid写回浏览器
若查找不到
创建一个sesion,将数据保存,将当前session的jsessionid通过cookie返回浏览器

常用方法:
获取session:
HttpSession request.getSession():

域对象:
session
生命周期
创建:java代码中可以认为 第一次使用request.getSession创建
销毁:
服务器关闭
session超时
默认超时
手动设置超时
★手动干掉session
session.invalidate()
/



 

标签:浏览器,String,购物车,session,cookie,day11,jsp
From: https://blog.51cto.com/u_12277263/5809891

相关文章

  • Session兑现的一级缓存
    快照机制: ......
  • 绑定本地的Session
    绑定本地的Session图示解析: 代码的结构:代码:SaveServlet.java1packagecom.itheima.servlet;23importjava.io.IOException;4importjavax.servlet.ServletExce......
  • PHP session 阻塞问题
    由于PHP实现session的机制默认是利用把信息储存在文件里的,这就是涉及到读取文件需要保证一定安全性所以需要在读写的时候锁文件,如果不及时解锁,如程序的业务过程较长就......
  • Cookie
    概念Cookie,有时也用其复数形式Cookies。类型为“小型文本文件”,是某些网站为了辨别用户身份,进行Session跟踪而储存在用户本地终端上的数据(通常经过加密),由用户客户端计算......
  • Session
    概念Session:在计算机中,尤其是在网络应用中,称为“会话控制”。Session对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的Web页之间跳转时,存储在Session......
  • Chrome扩展插件的开发--获取网页Cookies
    Chrome扩展插件的开发--获取网页CookiesChrome浏览器在浏览器类应用软件中一直居于榜首,很多人选择Chrome浏览器不仅仅是因为它的稳定,还有它丰富的可拓展性。那么有没有想......
  • 同一个tomcat 共享session
    问题记录 最近学整理java项目session常常用来存储一些公共信息供不同页面访问,比如用户登录信息。访问同一个tomcat下的不同项目所创建的session是不一样的。自然地面临了如......
  • 问题IllegalStateException: The mail session is already initialized解决
    概述很【简单】的一个问题,之前从来没有遇到过;第一反应是搜索Google,没有找到解决方案。木有办法,只好去看源码;看到源码后,很容易就能解决问题。还是记录一下此文。同时,告诫一下......
  • 验证码案例的实现---MyBatis+Session+Cookie
    展示验证码(jsp页面)首先,我们需要自己利用BufferedImage类去生成一张可以变换的验证码图片;之后,我们就可以利用这样一串代码去将验证码里面的内容获取到:这是一串测试代码:O......
  • Javaweb基础复习------Cookie+Session案例的实现(登录注册案例)
    Cookie对象的创建--Cookiecookie=newCookie("key","value");发送Cookie:resp.addCookie();获取Cookie数据:req.getCookie("","");Cookie不能直接存储中文需要进行转......