servlet概念:
- servlet是java提供的一门动态web资源开发技术
- Servlet是javaEE规范之一,就是其中的一个接口,将来我们需要定义Servlet类实现Servlet接口,并由web服务器(tomcat)运行Servlet
servlet入门
-
创建Web项目,导入Servlet依赖坐标
<dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servelt—api</artifactId> ... </dependency>
-
创建:第一个类,实现Servlet接口并重写接口中的方法
public class ServletDemo1 implements Servlet{ public void service(){} }
-
配置:在类上使用@webServlet注解,配置该Servlet的访问路径
@WebServlet("/demo1") public class ServletDemo implements Servlet{}
-
访问:启动Tomcat,浏览器输入URL访问该Servlet
http://localhost:8080/web_demo/demo1
servlet执行流程
-
Servlet由谁创建?Servlet方法由谁调用?
Servlet由web服务器创建,方法由web服务器调用
-
服务器怎么知道服务器怎么知道Servlet有service方法
因为我们定义的servlet必须实现Servlet接口
Servlet生命周期
-
对象的生命周期是指一个对象被创建到被销毁的整个过程
-
Servlet运行在web服务器(Servlet容器)中,其中生命周期由容器来管理分为4个阶段
-
加载和实例化:在默认情况下,Servlet第一次被访问时,容器就创建Servlet对象
-
初始化:在Servlet实例化后,容器调用Servlet的init()方法来初始化这个对象,完成一些如加载配置文件,创建连接等初始化的工作。该方法只调用异常
-
请求处理:每次请求Servlet时,Servlet容器都会调用Servlet的service方法对请求进行处理
-
服务终止:当我们需要释放内存或者关闭容器,容器就会调用servlet实例里的destroy()方法来释放资源,随后该实例就会被java的垃圾回收机制给回收
-
作用域:page request session application
- 简单理解:能够存放数据的容器–>实现数据共享
- page:只在当前页面有效
- request:在一个完整的请求中有效
- Session:只要浏览器不关闭就有效
- application:只有服务器不关闭就有效
Requsest&Response
- 请求与相应的一个过程
当我们写好一个service之后部署到Tomcat里面当我们服务端一启动就可以通过浏览器请求到我们部署的对应这个Servlet,浏览器发送请求是发送的http的请求数据,我们就可以通过Service里的Request对象来获取这些请求数据,然后通过Response对象对响应回浏览器的数据进行设置
- Request:获取请求数据
- **Response:**设置相应数据
Requset请求转发
-
请求转发(forward):在服务器内部进行资源跳转的方式
-
**实现方式:**req.getRequestDispatcher(“资源b路径”).forward(req,resp);
-
请求转发资源间的数据共享:使用Request对象
Response设置相应数据
-
设置响应行
void setStatus(int sc):设置响应状态码
-
设置响应头
void setHeader(String name,String value)
- 设置响应体
PrintWriter getWriter();获取字符输出流 通过流将数据写到浏览器
ServletOutputStream getOutputStream();获取字节输出流
Response重定向
- **重定向:**一种资源跳转的方式
会话跟踪技术
-
**会话:**用户打开浏览器,访问web服务器的资源,护会话建立,直到有一方断开连接,会话才结束。在一次会话中可以包含多次请求和响应
-
会话跟踪:一种维护浏览器状态的方法,服务器需要识别多次请求是否来自于同一浏览器,以便在同一次会话的多次请求之间共享数据。HTTP协议是无状态的,每次浏览器向服务器请求时,服务器都会将该请求视为新的请求,因此需要会话跟踪技术实现会话内数据共享
客户端会话跟踪技术:Cookie
当服务端发送一个cookie数据的时,Tomcat在真正做出相应的时候就会给这个cookie加上个响应头set—cookie值就是cookie的值当浏览器解析这个响应的时候发现有个Set_cookie这个响应头就把这个响应头的cookie数据存到浏览器的内存里了,浏览器下一次发送请求的时候就会携带这个cookie(cookie:username=zs)服务器就会获取到对应的cookie数据就可以通过如request对象把所有的cookie数据封装成cookie对象来获取出来。
-
Cookie:客户端会话技术,将数据保存到客户端,以后每次请求都携带Cookie数据进行访问
-
Cookie的实现是基于HTTP协议的
-
响应头:set-cookie
-
请求头:cookie
-
Cookie 存活时间
-
默认情况下,Cookie存储在浏览器内存中,当浏览器关闭,内存释放,则Cookie被销毁
-
setMaxAge(int seconds):设置Cookie存活时间
-
整数:将Cookie写入到浏览器所在电脑的硬盘,持久化存储,到时间自动删除
-
负数:默认值,Cookie在当前浏览器内存中,当浏览器关闭,则Cookie被销毁
-
零:删除对应Cookie
服务端会话跟踪技术:Session
Session基本使用
-
服务端会话跟踪技术:将数据保存到服务端
-
JavaEE 提供 HttpSession 接口,来实现一次会话的多次请求间数据共享功能
-
Session 的实现是基于 Cookie 实现的
Session 钝化、活化
-
服务器重启后,Session中的数据是否存在?
-
钝化:在服务器正常关闭后,Tomcat会自动将Session数据写入硬盘的文件中
-
活化:再次启动服务器后,从文件中加载数据到Session中
Session 销毁
- 默认情况下,无操作,30分钟自动销毁
Cookie 和 Session 的区别
-
存储位置:Cookie将数据存储在客户端,Session将数据存储在服务器
-
安全性:Cookie不安全,Session安全
-
数据大小:Cookie最大3kb,Session无大小限制
-
存储时间:Cookie可以长期存储,Session默认30分钟
-
服务器性能:Cookie不占服务器资源,Session占用服务器资源心得:会话技术可以将数据存储起来,需要的时候又可以拿出来使用