深度长文回顾web基础组件 (三)

简介: 深度长文回顾web基础组件 (三)

Reponse#


响应信息格式如下:#


HTTP/1.1 200 OK  //响应行
---------------------------------------
响应头
 // 服务器的类型
Server: server-name 
//服务端告诉客户端,自己推送给它的数据的编码格式(浏览器根据指定的类型进行解码)
Content-Type: text/html;charset=utf-8  
// 响应内容的长度
Content-Length: XXX 
// 响应日期
Date: XXX  
//服务器告诉浏览器用什么格式打开响应体数据, 默认是in-line 表示在当前页面中打开, attachment(文件下载)
Content-disposition: in-line
----------------------------------------
(响应空行)
----------------------------------------
XXX   // 响应体


常用方法#


Response对象就是用来设置响应消息的对象


  • 设置响应行


// 格式: HTTP/1.1 200 ok
setStatus(int status);


  • 设置响应头


setHeader(String name, String value);


  • 设置响应体


// 0 在往客户端写中文前先设置编码
response.setContentType("text/html;charset=utf-8");
// 1. 获取到输出流(字节流/字符流)
// 2. 往客户端写
response.getWriter().write("XXXXXXX");


  • 重定向



// 实现,从 AServlet 重定向到BServlet
// 两步实现: 重定向
// 设置状态码 / 响应头
reponse.setStatus(302);
response.setHeader("location","/项目路径/serlet-url-pattern");
// 单行代理实现重定向
response.sendRedirect("/项目路径/serlet-url-pattern");


特点:

  • 重定向: 浏览器地址栏路径改变了
  • 重定向: 可以请求其他服务器
  • 重定向: 实际上发起了两次请求 (不能使用request域共享数据)


因为我们让浏览器发送了两次请求, 因此重定向的路径中包含 项目路径



常用api#


客户端会话技术,将数据保存在浏览器本地, 下一次访问时会携带着cookie

  • 创建cookie,绑定数据


new Cookie(String name,String value)


  • 发送cookie


response.addCookie(Cookie cookie);


  • 获取解析cookie


Cookie [] cookies = request.getCookies();


  • 一次发送多个cookie


Cookie c1 = new Cookie(String name,String value)
Cookie c2 =new Cookie(String name,String value)
reponse.addCookie(c1);
reponse.addCookie(c2);


  • cookie的生命周期

默认cookie存储在浏览器内存中,一旦浏览器关闭,cookie销毁

设置cookie的生命周期


setMaxAge(int seconds);
seconds 为存活时间, 
正数: 表示以文件的形式进行持久化,默认单位 s
负数: 表示仅仅存在于内存中
零:   表示让浏览器删除cookie


  • cookie存储中文

tomcat8之前,cookie不支持中文,Tomcat8之后cookie支持中文

tomcat8之前需要进行转码,一般采用URL编码

  • cookie获取的范围

默认情况下:在一个tomcat中的部署的多个web项目之间cookie是不能共享的

但是可以通过下面的方法设置更大路径,实现想要的效果


setPath(String path); // 默认是当前的虚拟目录
// 可以设置成下面这样
setPath("/"); // 默认是当前的虚拟目录


跨域tomcat之间cookie共享使用-- 根据域名划分


setDomain(String path); // 只要一级域名相同,则多个服务器之间共享 cookie


特点:#


  • 存储在浏览器,不安全
  • 浏览器对单个cookie大小(一般都在4kb),对同一个域名下的cookie总数也有限制(一般20个以内)


小场景:#


服务器,浏览器协作的流程: 比如登录: 用户通过浏览器往服务端发送登录请求,服务端验证用户名密码,通过后往客户端的发送cookie, 其实是设置了响应头set-cookie=XXX, 浏览器碰到这种响应头,就把这个响应体缓存在本地,再次请求这个网站时,会自动携带这个请求头cookie=XXX , 后端通过解析用户发送过来的cookie,可以判断当前请求的用户是否是合法的


Session#


服务端会话技术,在一次会话中多次请求共享数据,将数据保存在服务端的对象--HttpSession

session也是域对象


常用API#


  • 获取session


HttpSession session = request.getSession();


  • 使用session


setAttribute(String name,Object obj);
getAttribute(String name);
romoveAttribute(String name);


如何确保多次会话中,多次获取到的session是同一个#


  1. 用户通过浏览器向服务端发送请求
  2. 服务端验证用户的信息,通过验证后,如果没有当前的session就为用户创建session(每个session都有唯一的id),创建cookie,给客户端返回相应 set-coolkie:JSESSIONID=shdfiuhduifha
  3. 用户再次访问服务端,浏览器会自动携带上请求头cookie:JSESSIONID=shdfiuhduifha
  4. 服务器解析cookie携带的JSESSIONID=shdfiuhduifha便可以找出唯一的session


细节#


  • 客户端关闭,服务端不关闭,两次获取到的session一样吗?
  • session是依赖cookie的,客户端关闭,cookie被干掉了,也就是说本次会话也就结束了,后端的session将被干掉
  • 但是如果我们发送给浏览器一个可以存活很长时间的cookie,再次打开浏览器访问后端,session还是同一个
  • 客户端不关闭,服务端关闭,两次获取到的session一样吗?
  • 服务器都没了,session肯定被干掉了,session肯定不一样
  • 补救:钝化 tomcat在服务器正常关闭前,将session序列化持久化到磁盘上
  • 补救:活化 tomcat在服务器启动时,将session重新加载进内存


idea中可以成功完成钝化,但是不能完成活化


  • session失效时间
  • 服务器关闭
  • 使用api,自动关闭 invalidate()
  • session默认的失效时间30分钟


过期时间可以在Tomcat中的配置文件目录下的web.xml中配置


<session-config>
    <session-timeout>30</session-timeout>
</session-config>


特点:#

  • session用于存储一次会话的多次请求数据,存储在服务端
  • session可以存储任意类型的数据没有大小限制
相关文章
|
3月前
|
JavaScript 前端开发 开发者
哇塞!Vue.js 与 Web Components 携手,掀起前端组件复用风暴,震撼你的开发世界!
【8月更文挑战第30天】这段内容介绍了Vue.js和Web Components在前端开发中的优势及二者结合的可能性。Vue.js提供高效简洁的组件化开发,单个组件包含模板、脚本和样式,方便构建复杂用户界面。Web Components作为新兴技术标准,利用自定义元素、Shadow DOM等技术创建封装性强的自定义HTML元素,实现跨框架复用。结合二者,不仅增强了Web Components的逻辑和交互功能,还实现了Vue.js组件在不同框架中的复用,提高了开发效率和可维护性。未来前端开发中,这种结合将大有可为。
150 0
|
3月前
|
Web App开发 JavaScript 前端开发
[译] 用 Web Worker 改善 Vue 组件性能
[译] 用 Web Worker 改善 Vue 组件性能
|
1月前
|
前端开发 JavaScript 开发者
Web组件:一种新的前端开发范式
【10月更文挑战第9天】Web组件:一种新的前端开发范式
38 2
|
17天前
|
消息中间件 监控 Kafka
Apache Kafka 成为处理实时数据流的关键组件。Kafka Manager 提供了一个简洁的 Web 界面
随着大数据技术的发展,Apache Kafka 成为处理实时数据流的关键组件。Kafka Manager 提供了一个简洁的 Web 界面,方便管理和监控 Kafka 集群。本文详细介绍了 Kafka Manager 的部署步骤和基本使用方法,包括配置文件的修改、启动命令、API 示例代码等,帮助你快速上手并有效管理 Kafka 集群。
39 0
|
1月前
|
前端开发 JavaScript Go
前端开发趋势:从响应式设计到Web组件的探索
【10月更文挑战第1天】前端开发趋势:从响应式设计到Web组件的探索
38 3
|
4月前
|
Web App开发 前端开发 安全
2024年新一代WebOffice内嵌网页组件,Web网页在线编辑Word/Excel/PPT
WebOffice控件面临兼容性、用户体验和维护难题。随着浏览器更新,依赖插件的技术不再适用,如Chrome不再支持NPAPI和PPAPI。产品普遍不支持多版本Office并存,定制能力弱,升级复杂。猿大师办公助手提供了解决方案,它兼容多种浏览器,包括最新版和国产浏览器,不依赖插件,支持文档对比,具有丰富的功能和接口,兼容多种Office版本,允许源码级定制,提供终身技术支持,并实现静默在线升级。适用于多种行业和操作系统。
249 8
|
3月前
|
数据可视化 数据挖掘 持续交付
Axure Web端元件库:从Quick UI到500+组件的飞跃
在快速变化的数字世界中,产品设计不仅仅是功能的堆砌,更是用户体验的精心雕琢。原型设计作为产品开发过程中的关键环节,其重要性不言而喻。Axure,作为业界领先的原型设计工具,凭借其强大的交互设计和丰富的功能,赢得了全球设计师和开发者的信赖。而Axure Web端元件库,则是这一平台上的一颗璀璨明珠,它以超过500个精心设计的组件为基础,为设计师们打开了一扇通往高效、高质量原型设计的大门。
147 0
|
4月前
|
设计模式 JavaScript 前端开发
Web Components详解-组件通信
Web Components详解-组件通信
79 6
|
6月前
|
域名解析 缓存 网络协议
JavaEE精选-Web组件
JavaEE精选-Web组件
43 1
|
6月前
|
JavaScript 前端开发 API
Vue中的组件:构建现代Web应用的基石
Vue中的组件:构建现代Web应用的基石

热门文章

最新文章