1.Servlet三种创建方式
- 实现 javax.servlet.Servlet 接口,重写其全部方法。
- 继承 javax.servlet.GenericServlet 抽象类,重写 service() 方法。
- 继承 javax.servlet.http.HttpServlet 抽象类,重写 doGet() 或 doPost() 方法。
2.Servlet生命周期
- 实例化(构造方法):创建对象 ;默认是第一次请求时创建对象,并且只创建1次;单实例(一个实例)
- 初始化(init):获取一些初始化参数;只初始化1次。
- 服务:doGet | doPost ;请求一次执行一次,多次提供服务
- 销毁(destroy) :tomocat关闭服务器关闭时销毁。
3.Servlet工作原理
- 客户端发起请求
- tomcat服务器收到请求后要进行分类处理(静态资源、jsp、servlet)
- 如果请求的是servlet,如果servlet没有对应的实例,tomcat会对servlet进行实例化、初始化
- 请求一次对应的servlet,就会新启动一个线程 调用servlet实例的服务方法进行处理(可以多次执行)
- 最后服务器关闭时,才会销毁servlet实例
4.转发和重定向的区别
区别 | 转发 | 重定向 |
---|---|---|
浏览器地址栏 URL 是否发生改变 | 否 | 是 |
是否支持跨域跳转 | 否 | 是 |
请求与响应的次数 | 一次请求和一次响应 | 两次请求和两次响应 |
是否共享 request 对象和 response 对象 | 是 | 否 |
是否能通过 request 域对象传递数据 | 是 | 否 |
速度 | 相对要快 | 相对要慢 |
行为类型 | 服务器行为 | 客户端行为 |
5.cookie工作流程
-
客户端浏览器访问服务器时,服务器通过在 HTTP 响应中增加 Set-Cookie 字段,将数据信息发送给浏览器。
-
浏览器将 Cookie 保存在内存中或硬盘上。
-
再次请求该服务器时,浏览器通过在 HTTP 请求消息中增加 Cookie 请求头字段,将 Cookie 回传给 Web 服务器。服务器根据 Cookie 信息跟踪客户端的状态。
6.session工作流程
-
当客户端第一次请求会话对象时,服务器会创建一个 Session 对象,并为该 Session 对象分配一个唯一的 SessionID(用来标识这个 Session 对象);
-
服务器将 SessionID 以 Cookie(Cookie 名称为:“JSESSIONID”,值为 SessionID 的值)的形式发送给客户端浏览器;
-
客户端浏览器再次发送 HTTP 请求时,会将携带 SessionID 的 Cookie 随请求一起发送给服务器;
-
服务器从请求中读取 SessionID,然后根据 SessionID 找到对应的 Session 对象。
7.session生命周期
Session 对象创建
Session 对象在容器第一次调用 request.getSession() 方法时创建。
Session 对象销毁
Session 对象在如下 3 种情况下会被销毁:
-
Session 过期;
-
调用 session.invalidate() 方法,手动销毁 Session;
-
服务器关闭或者应用被卸载。
8.cookie和session对比
不同点 | Cookie | Session |
---|---|---|
存储位置不同 | Cookie 将数据存放在客户端浏览器内存中或硬盘上。 | Session 将数据存储在服务器端。 |
大小和数量限制不同 | 浏览器对 Cookie 的大小和数量有限制。 | Session 的大小和数量一般不受限制。 |
存放数据类型不同 | Cookie 中保存的是字符串。 | Session 中保存的是对象。 |
安全性不同 | Cookie 明文传递,安全性低,他人可以分析存放在本地的 Cookie 并进行 Cookie 欺骗。 | Session 存在服务器端,安全性较高。 |
对服务器造成的压力不同 | Cookie 保存在客户端,不占用服务器资源。 | Session 保存在服务端,每一个用户独占一个 Session。若并发访问的用户十分多,就会占用大量服务端资源。 |
跨域支持上不同 | Cookie 支持跨域名访问。 | Session 不支持跨域名访问。 |