初始HTTP
Web交互流程
客户端是根据用户输入的地址信息请求服务器,服务器在接收到用户的请求进行处理并将结果响应给客户端,客户端在将响应的结果显示给用户
Http协议
问题:由于浏览器和服务器的版本都有很多种,不同版本之间的它们有事怎样进行数据传输呢?
解决:http协议就是用来规范浏览器和服务器之间的数据交互格式
特点:
- 简单快捷:客户向服务器请求服务,只需要传送请求方法和路径即可。(请求方法:GET 、POST、HEAD方法不同的请求方法代表客户与服务器之间的联系类型不同)
- 灵活:可以允许任意类型的数据传输
- 无连接:即限制每次链接只处理一个请求,服务器处理完客户请求并且收到客户的应答后会自动断开连接(采用这用方式可以节省传输时间)
- 无状态:即协议对于事物的处理没有记忆能力。也就是在后续处理是不用在重传前面用到的信息
Http交互流程
客户端和服务器端建立连接 —> 客户端发送请求数据到服务器端 (HTTP协议)—> 服务器端接收客户请求并处理将结果响应给客户端 (HTTP协议)—> 关闭客户端和服务器端 的连接(HTTP1.1不会马上关闭)
Http协议请求格式
- 请求行:包含请求方式、请求地址、HTTP协议版本
- 请求头:消息报头(一般用于通知服务器有关于客户端需要使用到的一些附加信息)
- 空行:位于请求头和请求数据之间(是必须要有的),通知服务器一下不会有请求头
- 请求包体:非必须
注意:由于一张网页的内容是非常丰富的因此浏览器会遵循HTTP的请求格式将一些有效的数据发送给服务器
Http的请求方式
- 在HTTP1.0中定义了三种请求方法:HEAD POST GET
- 在HTTP1.1中又新增加了五种请求方法:DELETE CONNECT OPTIONS PUT TRACK
注意:这里需要注意get和post的请求方法的区别:get请求方法:请求数据会以问号的形式隔开拼接在请求头中也没有请求实体,因此不安全同时也不能携带大量的数据;post请求方法:数据在请求实体中进行发送,因此在URL中看不到具体的请求数据,所以相对较安全同时也适合大量数据的传送
Http协议的响应格式
- 状态行:HTTP版本、状态码、状态信息
- 响应头:消息报头(客户端需要使用到的一些附加信息)
- 空行:是必须的;位于响应头和响应包体之间;同时服务器以下不会有响应头(相应实体)
- 响应包体:正文,也就是服务器要返回给浏览器的信息
服务器初识
问题:众所周知,java代码一个重要的功能就是进行数据处理的功能。但是目前我们运行所编写的代码是具有一次性。也就是代码运行完后如果想再次执行就需要再次启动代码的执行。此时便需要一种容器可以根据用户的请求实时进行启动代码的执行,而不是手动的启动。
解决:服务器
服务器的概念
服务器其实就是一个用代码编写的容器,这个容器可以根据用户的请求实时调用需要执行的逻辑代码
*注:*在普通用户看来服务器其实就是一个安装程序,用户只需要将服务器安装在操作系统上,然后将事先编写好的逻辑代码根据规则放到服务器的指定位置,那么服务器就自动的会根据接收到请求调并执行对象的逻辑代码进行处理。
创建Web程序流程
1、 打开 Myeclipse 并创建工作空间
2、 点击 file 选择—>new—>web project—>输入项目名,点击 finish
3、 在 src 下创建包 com.bjsxt.servlet.
4、 在包下创建一个普通 java 类 MyServlet,并承 HttpServlet
5、 在 MyServlet 类中覆写 service 方法
6、 在 webRoot 下的 WEB-INF 下找到 web.xml文件并配
7、 打开 tomcat 的安装目录,在 webapps 目录下新建文件夹,文件夹名为 project,并将项目源码 webRoot 下的内容全部复制到该文件夹下。
8、 启动 tomcat 服务器,并在地址栏中输入:localhost:8080/project/my
服务器的具体运行细节
问题:都知道服务器是在接收到浏览器的请求后,会调用相应的逻辑代码来进行请求处理,而逻辑代码是由程序员编写并放到服务器中,那么此时服务器又是怎么知道要调用相应的逻辑代码呢?
解决:要想让服务器调用相应的逻辑代码那么就要求程序员按照服务区能够识别的规则来进行编写代码。当浏览器按照指定的规则发送请求,那么服务器就可以调用相应的逻辑代码来进行请求处理
实现:Servlet技术