servlet 学习笔记3

1.会话
a.定义:一个浏览器与一个服务端的一次完整的交流
b.特点:
①在一次会话过程中,经历多次请求与响应
②在一次会话过程中,同一个浏览器往往访问多个Servlet
c.需求:在一次会话过程中,在浏览器要访问的Servlet之间进行数据共享
d.解决方案:Cookie 和 HttpSession

2.Cookie
a.介绍
Cookie是Servlet规范提供一个工具类,它在参与一个会话过程中Servlet之间进行数据共享,Cookie存储在浏览器上,保存本次会话的共享数据。

b.工作原理
①在浏览器访问OneServelt时,OneServelt负责将当前浏览器产生的私人数据保存到Cookie,然后OneServelt负责将Cookie推送到当前浏览器上。
②在浏览器再次来访问当前网站TwoServlet时,需要无条件的将服务端之前推送过来的Cookie在推送回去,这样TwoServlet得到OneServlet提供的共享数据。
在这里插入图片描述
c.Cookie使用
①如何创建一个Cookie对象,来保存共享数据
Cookie c1 = new Cookie(“key”,“共享数据”);
注意:一个Cookie对象只能有一个键值对,cookie对象只能存储String类型共享数据。
②如何将Cookie写入到响应包中的响应头上
response.addCookie(c1);
③如何从请求协议包的请求头读取浏览器返还的cookie
Cookie array []= request.getCookies();

d.cookie对象的生命周期
①默认情况:cookie是保存在浏览器的内存中,所以在浏览器关闭时,cookie会被windows进行销毁。
②人工干预:要求将Cookie保存到客户端计算机的硬盘上,同时制定cookie在硬盘上存活时间。在存活时间范围之内,关闭浏览器甚至关闭计算机,都不会导致cookie被销毁。
cookie.setMaxAge(以秒为单位时间)

e.cookie缺点
①一个cookie对象只能存放一个键值对,如果存储的数据较多,需要管理多个cookie。
②cookie只能存放String类型数据,无法存放高级类型Java数据,比如List,Map。

3.HttpSession接口
a.介绍
来自于Servlet规范中接口,接口实现类来自于Tomcat,可以为参与同一个会话的servlet之间提供共享数据。我们习惯于将HttpSession接口修饰的对象称为会话作用域对象,也可以叫做session对象。

b.HttpSession与Cookie区别
相同点:为参与同一个会话的servlet之间提供共享数据。
不同点:
①存储位置:cookie存储在客户端浏览器内存中或者硬盘上,HttpSession存储在服务端计算机的内存中。
②存储内容: cookie只能存储String类型数据,HttpSession可以存储任意类型数据。
③存储数量: 一个Cookie只可以存储一个键值对,一个HttpSession对象可以存储任意个数的键值对。

c.使用
在浏览器来访时,Tomcat不会主动为当前浏览器创建对应的HttpSession对象。只有浏览器所访问的Servelt向Tomcat提出要求时,Tomcat才会为当前浏览器创建一个HttpSession对象。
如何在Servelt中为当前浏览器,申请一个HttpSession对象:
①HttpSession session = request.getSession();
getSession(): 如果当前浏览器在服务端中已经拥有了一个session对象,此时Tomcat需要将这个session对象进行返回。如果当前浏览器在服务端中尚未拥有session对象,此时Tomcat需要创建一个全新的session对象返回。

②HttpSession session = request.getSession(true);
getSession(true): 与getSession()完全一致。

③HttpSession session = request.getSession(false);
getSession(false):如果当前浏览器在服务端中已经拥有了一个session对象,此时Tomcat需要将这个session对象进行返回。如果当前浏览器在服务端中尚未拥有session对象,此时返回一个null。

注意:如果来访的用户身份已经确认合法了,此时可以使用getSession()或者getSession(true)。如果来访的用户身份尚未确认,此时只可以使用getSession(false)。

d.Tomcat是如何将浏览器与session对象关联
在Tomcat创建了一个session对象时,为session对象生成一个唯一编号,然后将这个编号保存到cookie中,推送到当前的浏览器内存中。等到浏览器再次发送请求时,Tomcat就可以通过读取浏览器返回的cookie来判断浏览器在服务端中是否有session对象。

e.如何使用HttpSession对象
在本次会话过程中,AServlet需要为本次会话中其他Servelt提供共享数据
session.setAttribute(“key”,共享数据)
在本次会话过程中,BServlet需要得到当前浏览器session的数据
session.getAttribute(“key”)

4.Http状态码
a.介绍
①Http状态码是由一个三位数字组成的符号。
②Http状态码由Tomcat负责创建生成。
③Http状态码由Tomcat写入到状态行。
④Http状态码通知浏览器在接收到响应包之后的行为,Http状态码通知浏览器,服务端无法提供本次服务的原因。

b.分类介绍
①1xx: 通知浏览器本次返回的资源文件并不完整,需要浏览器继续向服务端发送申请。
在这里插入图片描述
如下,我只想百度发送了一次请求,但是浏览器会向它要很多东西:
在这里插入图片描述
注意状态码为什么显示200:状态码中间是1xx,但是它会显示最终结果。

② 2xx:通知浏览器,服务端将一个完整的文件推送给浏览器。
200:浏览器与服务端进行了一次完美通信。

③3xx: 服务端推送给浏览器的是一个网址,要求浏览器在接收到这个网址后,立刻自动向这个网址发送请求。
response.sendRedirect(“地址”)
在这里插入图片描述
④4xx: 通知浏览器,服务端本次未能提供服务的原因,是由于服务端没有对应的资源文件。
404: 服务端没有对应的资源文件
405:服务端有本次请求对应的Servlet,但是Servlet不负责处理浏览器当前的请求方式。
GET
浏览器-------》 Tomcat-------------->OneServlet.doGet
/one.do
POST
浏览器-------》 Tomcat-------------->OneServlet.doPost
/one.do
HTTP Status 405 - HTTP method GET is not supported by this URL
浏览器使用GET方式发送请求,但是对应Servlet中没有重写doGet方法。

⑤5XX: 通知浏览器,服务端本次未能提供服务的原因是被调用Servlet在运行时抛出了异常。
此时我们要去控制台看异常信息,看异常只看第一个:
在这里插入图片描述

5.默认欢迎资源文件
a.定义:Http服务器在接收到一个默认请求时返回的资源文件

b.默认请求:浏览器向某一个网站发送请求时,并没有指定索要的文件的情况。
http://localhost:8080/myWeb 默认请求
http://localhost:8080/myWeb/one.html 具体请求

c.默认欢迎文件配置
第一种方式: 手动在web.xml配置

<welcome-file-list>
	<welocome-file>one.html</welcome-file>
</welcome-file-list>

在这里插入图片描述
第二种方式: 由Tomcat自行确认
如果Tomcat在当前网站中没有找到<welcome-file-list>标签,此时Tomcat回到自己的config文件夹下寻找一个web.xml文件,在这个web.xml寻找<welcome-file-list>标签,来获得默认欢迎文件的地址。
优先级是从上到下的:
在这里插入图片描述
d.默认欢迎资源文件分类
①首选html文件或者jsp文件。
②也可以是一个Servlet,但是这个Servelt应该是一个查询Servlet并且在运行时不需要得到浏览器发送的请求参数。

6.多个Servlet来处理同一次请求方案
a.前提:
①一个Servlet只负责实现一个功能
②浏览器在一次请求时,只能请求一个资源文件
③如果浏览器的请求需要由多个Servlet来协同完成,需要用户多次通过手动提交请求来完成任务,这样降低服务质量。

b.方案分类::只需要用户手动通过浏览器发送一次请求,就可以将与本次请求相关的Servlet来依次调用。
①重定向方案
②请求转发方案

c.重定向方案原理
在第一个Servlet工作完毕后,将第二个Servlet地址推送给用户浏览器,由用户浏览器根据这个地址来自动的向第二个Servelt发送请求。
在这里插入图片描述

d.重定向方案涉及命令
response.sendRedirect(第二个Servlet地址);
将一个地址写入到响应头中的location,浏览器接受到响应包之后,自动根据location地址发送第二次请求,这样做的好处是避免用户多次手动发送请求。

e.重定向方案特征
①发生位置:在客户端的浏览器上。
②浏览器发送的请求次数:多次。
③地址栏内容是否会发生变化:会发生变化,内容是浏览器第二次需要访问的资源地址。
④重定向时,浏览器采用的请求方式:由于此时通过地址栏命令浏览器发送请求,所以浏览器采用请求方式一定是GET。
⑤重定向时,访问的资源文件范围:可以访问的资源文件可以是同一个网站的资源,也可以是其他网站的资源。
在这里插入图片描述

f.重定向方案适用场景
①添加功能Servlet 调用 查询功能Servlet
②删除功能Servlet 调用 查询功能Servlet
③更新功能Servelt 调用 查询功能Servlet

g.请求转发原理
在第一个Servelt工作完毕后,代替当前浏览器向Tomcat申请调用第二个Servlet。Tomcat在接受到申请之后,调用第二个Servelt来完成本次请求中剩余任务。
在这里插入图片描述

h.请求转发涉及的命令
OneServlet
①创建一个资源申请报告对象
RequestDispatcher report = request.getRequestDispatcher(“第二个Servelt地址”);
②将申请报告推送给Tomcat,同时将OneServlet拥有的request和response一并交给Tomcat。
report.forward(request,response)
③Tomcat在接受到报告之后,就会调用第二个Servelt来完成剩余任务
在这里插入图片描述
注意:重定向必须写网站名,而请求转发不能写网站名。

i.请求转发时为什么将第一个Servelt中request和response交给Tomcat
Tomcat在接受到请求后,需要调用第二个Servlet,Tomcat此时需要为第二个Serelt提供运行时需要request和response。但是,本次请求是由第一个Servelt来发送的,没有对应的请求协议包。因此导致Tomcat在接受到请求后,不会创建request和response。
为了解决这个问题,需要将第一个Servlet使用request和response。

j.请求转发特征
①发生在服务端
②浏览器发送请求次数:浏览器只向服务端发送了一次请求。
③地址栏内容是否会发生变化:由于请求转发发生在服务端,因此浏览器地址内容保持在一次请求内容。
④调用资源文件范围:只能访问同一个访问内部的资源文件。
⑤通过请求转发调用的Servlet接受的请求方式:与浏览器第一次发送请求时,使用的请求方式保持一致。即参与同一次请求转发的所有Servlet接受的请求方式是一样的。
⑥参与同一次请求转发的所有Servlet之间如何进行数据共享
可以使用全局作用域对象,提供共享数据
可以使用会话作用域对象,提供共享数据
可以使用请求作用域对象,提供共享数据

k.请求转发不适合场景
①添加功能Servlet 调用 查询功能Servlet
②删除功能Servlet 调用 查询功能Servlet
③更新功能Servelt 调用 查询功能Servlet

l.请求转发适合场景:查询Servlet调用JSP时

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值