【servelt原理_13_状态管理】
创始人
2024-03-15 16:28:26
0

状态管理

1.现有问题

  • Http是无状态的,不能保存每次提交的信息
  • 如果用户发来一个新的请求,服务器无法知道它是否与上次请求是否有联系.
  • 对于那么需要提交多次信息才能完成的操作,比如购物,就很有问题

2.概念
将浏览器和web服务器之间多次交互当成一个整体来处理,并且将多次交互所涉及的数据(即状态)保存先来。

3.状态管理分类

  • 客户端状态管理:将状态保存在客户端。代表性技术就是Cookie技术
  • 服务器状态管理: 将状态保存在服务端,代表性技术就是Session技术

Cookie的使用

1.什么是cookie
Cookie是服务器发送到用户浏览器并保持在本地的一小块信息,他会在浏览器下次向服务器发起请求时被携带并发送到服务器上。通常,它用于告知服务端两个请求是否来自同一浏览器。
在这里插入图片描述
2.cookie的基本操作

@WebServlet("/cs")
public class CookieServlet extends HttpServlet{@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//1.服务端创建cookie对象Cookie cookie = new Cookie("username", "qcby");//2.设置cookie有效期 1 小时  cookie.setMaxAge(60*60);  // 存储数据有三种方式:>0有效期,单位秒;=0浏览器关闭;<0 临时存储,默认为-1//3.将cookie响应给客户端resp.addCookie(cookie);}
}

访问:http://localhost:8080/SecondServlet/cs
查看cookie
我们可以在chrome浏览器的设置—>隐私设置和安全性中找到查看Cookie和网站数据
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
3.cookie的获取
浏览器jquary获取cookie

function getCookie(cname){var name = cname + "=";var ca = document.cookie.split(';');for(var i=0; ivar c = ca[i].trim();if (c.indexOf(name)==0) { return c.substring(name.length,c.length); }}return "";
}

服务器获取cookie的值

@WebServlet("/getCookie")
public class GetCookieServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// 通过request对象获取所有的cookieCookie[] cookies = req.getCookies();// 通过for循环遍历cookieif (cookies != null) {for (Cookie cookie : cookies) {System.out.println(cookie.getName() + " " + cookie.getValue());}}}
}

4.Cookie的编码和解码
cookie默认不支持中文,只能包含ASCII码。所以cookie需要对Uncode字符进行编码,否则会出现乱码
①:创建带有中文的cookie

@WebServlet("/cs")
public class CookieServlet extends HttpServlet{@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//1.服务端创建cookie对象Cookie cookie = new Cookie(URLEncoder.encode("姓名","UTF-8"),URLEncoder.encode("张三","UTF-8"));//2.设置cookie有效期 1 小时cookie.setMaxAge(60*60);//3.将cookie响应给客户端resp.addCookie(cookie);}
}

②:解码带有中文的cookie

@WebServlet("/getCookie")
public class GetCookieServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// 通过request对象获取所有的cookieCookie[] cookies = req.getCookies();// 通过for循环遍历cookieif (cookies != null) {for (Cookie cookie : cookies) {System.out.println(URLDecoder.decode(cookie.getName(),"UTF-8")+" " + URLDecoder.decode(cookie.getValue(),"UTF-8"));}}}
}

5.cookie的优缺点
优点:

  • 可配置到期规则
  • 简单性:cookie是一种包含文本轻量结构,包含简单的键值对
  • 数据持久性:cookie默认在过期之前可以一直保存在客户端浏览器上

缺点:

  • 大小受限制:大多数浏览器对cookie的大小有限制,分别是4k和8k字节
  • 用户配置为禁用:有些用户禁用了浏览器或者客户端设备接收cookie的能力,因此限制了这一功能
  • 潜在的安全风险:Cookie可能被篡改

相关内容

热门资讯

原创 新... 最近几个赛季,孙铭徽一直都被视为广厦的“小外援”,距离他上一次场均得分不到两位数,还要追溯到2018...
意大利要求Meta暂停禁止竞争... 意大利已下令Meta公司暂停其禁止企业在WhatsApp上使用商业工具提供自家AI聊天机器人的政策。...
山西证券(002500)披露现... 截至2025年12月25日收盘,山西证券(002500)报收于6.11元,较前一交易日上涨0.33%...
瑞典北部发生暴力犯罪事件,多人... 斯德哥尔摩消息:据瑞典媒体报道,25日圣诞节当天,瑞典北部布登市中心城区发生一起暴力犯罪事件,多人受...
博世科及子公司累计新增诉讼、仲... 12月25日,博世科(300422)发布公告,自2025年7月29日至2025年12月24日,公司及...
阳泉市郊区靶向发力精准落实低保... “民生无小事,枝叶总关情。”群众的“急难愁盼”就是监督的发力点。山西省阳泉市郊区纪委监委、阳泉市郊区...
公开背刺?亨特·拜登批评其父移... 亨特·拜登,美国前总统乔·拜登之子,在一档新播出的访谈节目中,就其父亲宽松的移民政策以及从阿富汗撤军...
倍轻松因涉嫌违反证券法律法规等... 证券之星消息,12月26日倍轻松公开信息显示,深圳市倍轻松科技股份有限公司,董事长马学军因涉嫌违反证...
22岁小伙深夜在河边喝酒落水溺... 小伙高某晚上跟3个朋友在饭店喝酒,之后跟其中两人到大渡口边继续喝酒聊天期间不幸溺亡。事后,家属将共同...