目录
HTTP协议
1.请求报文和响应报文的结构
一个HTTP请求报文由三个部分组成:请求行、请求头部、请求数据(请求体)
一个HTTP响应报文也由三部分组成:响应行、响应头、响应体
2.http请求方法有哪些?
get - 用于查询操作
post - 增
put - 改
delete - 删
1、GET方法;查
2、POST方法;增
3、HEAD方法;
4、PUT方法;改
5、DELETE方法;删
6、CONNECT方法;
7、OPTIONS方法;
8、TRACE方法。
3.GET和POST请求的区别
携带数据的位置和大小不同
get请求直接把数据用?拼接在url后面,大小上限时2KB-4KB
post请求把数据放在请求体里面,大小上限是15MB
第一层 GET和POST的行为区别
- GET参数通过URL传递,POST放在Request body中。
- GET请求在URL中传送的参数是有长度限制的,而POST没有。
- GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。
- GET在浏览器回退时是无害的,而POST会再次提交请求。
- 对参数的数据类型,GET只接受ASCII字符,而POST没有限制。
- GET请求会被浏览器主动cache缓存,而POST不会,除非手动设置。
- GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。
JSP&Servlet
1.JSP和Servlet的区别
JSP和Servlet的主要作用的相同的,都是充当JavaWeb工程的中间层,接受HTTP客户端的请求,调用Model层后返回响应。
JSP全称是Java Servlet Page,JSP中可以写html, css, js代码,并且可以在<%%>中嵌入Java代码,当JSP第一次被请求时,会由Tomcat把JSP翻译为Java源代码文件,再编译为Class字节码文件,最终向HTTP客户端输出HTML格式的响应结果。因此JSP是运行在服务器端的。
由Tomcat把JSP翻译的Java源代码文件就是一个Servlet,因此JSP本质是就是Servlet
JSP可以充当MVC三层中的Controller控制器层和View视图表示层,但是这不是一种好的编程体验,也违反了程序设计的单一职责原则,因此我们将控制器和视图表示层分层,控制器层交给Servlet,视图层交给JSP。由控制器层Servlet接受HTTP客户端的请求,调用Model层拿到数据后再把数据转发给视图层JSP,JSP中通过jstl标签和el表达式把数据取出后生成动态的HTML,最终输出给HTTP客户端。
2.JSP的九大内置对象
request请求对象 封装了来自客户端、浏览器的各种信息。
response响应对象 封装了服务器的响应信息。
session会话对象 用来保存会话信息。也就是说,可以实现在同一用户的不同请求之间共享数据
page对象 指向了当前jsp程序本身。
application对象 代表了当前应用程序的上下文。可以在不同的用户之间共享信息。
pageContext对象 提供了对jsp页面所有对象以及命名空间的访问。
out对象 用于向客户端、浏览器输出数据。
exception对象 封装了jsp程序执行过程中发生的异常和错误信息。
config对象 封装了应用程序的配置信息。
3.JSP的四大作用域
四大作用域分别对应了4个内置对象
每个对象都有setAttibute()方法和getAttibute()方法
page作用域
在当前jsp中共享
request作用域
在当前请求中共享
session作用域
数据在session对象未失效前都能取到,(默认是30分钟失效)
在当前客户端会话中共享
application作用域
所有客户端共享
作用域大小:
page < request < session < application
用el表达式取数据的时候需要指定在哪个作用域中取
<div>${pageScope.name}</div> <div>${requestScope.name}</div> <div>${sessionScope.name}</div> <div>${applicationScope.name}</div>
如果不指定作用域也可以,那么el表达式默认会从最低作用域开始依次找,直到找到为止
4.Servlet生命周期
1.初始化阶段
当Servlet第一次被请求的时候,会初始化Servlet实例,重写init方法可以参与这个阶段
2.判断请求方式阶段
当请求进来后,会调用Service方法判断当前请求方式,从而决定调用哪个处理请求的方法,如果是get请求就会调用doGet方法,如果是post请求就会调用doPost方法,其他几种请求也有相应的doXxx()方法
3.销毁阶段
当Tomcat退出运行的时候,会先销毁Servlet实例,重写destory()可以参与这个阶段
转发和重定向
1.发生的位置不同
转发请求:发生在服务端
定向请求:发生在客户端
2.请求次数不同
转发请求:请求在后端转发多次,仍然属于同一次定向请求
重定向请求:是两次定向请求
3.地址栏不同
转发请求:不会改变浏览器的地址栏
重定向请求:会改变浏览器的地址栏
4.是否共享request作用域
转发请求:可以共享request作用域中携带的数据
重定向请求:不可以共享request作用域中携带的数据
5.跳转限制
转发请求:只能发生在当前站点
重定向请求:可以发生在当前站点内,也可以到外部的站点
拦截器技术
Cookie和Session的区别
Cookie和Session都是会话跟踪技术
HTTP协议是无状态的协议
Cookie存储在浏览器中
每一次HTTP请求报文中都会自动把Cookie携带在请求头里面
Sesison存储在服务器中
从请求头中取出JSEESIONID的Cookie
查找有没有这个id对应的session对象,如果没有 会创建一个新的session对象