携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第33天,点击查看活动详情
声明:本教程不收取任何费用,欢迎转载,尊重作者劳动成果,不得用于商业用途,侵权必究!!!
文章目录
1)通信的过程:%E9%80%9A%E4%BF%A1%E7%9A%84%E8%BF%87%E7%A8%8B%3A)
2)特点%E7%89%B9%E7%82%B9)
1)请求数据包%E8%AF%B7%E6%B1%82%E6%95%B0%E6%8D%AE%E5%8C%85)
2)响应数据包%E5%93%8D%E5%BA%94%E6%95%B0%E6%8D%AE%E5%8C%85)
前言
接着上一篇文章 原创 java服务器端开发-servlet:1、认识Servlet,如:web开发背景、什么是servlet、如何开发一个servlet等
我们继续对servlet的知识点进行介绍,既然我们已经写了一个 servlet程序,下面我们来分析它的执行过程
二、Servlet执行过程介绍
编辑
1、servlet是如何运行的?
比如在浏览器地址栏输入:
****step1, 建立链接
浏览器依据ip,port建立与servlet容器
(servlet容器也是一个简单的web服务器)之间的连接。
****step2, 打包
浏览器将请求参数、请求资源路径等等打包
(要按照http协议的要求)。
****step3, 发请求
浏览器将请求数据包发送给servlet容器。
****step4, **拆包,创建 request **、 response 对象
容器收到请求之后,对请求数据包进行解析(拆包),
然后将解析之后的结果封装到request对象上,
同时,容器还会创建一个response对象。
****step5, 创建 Servlet对象
容器依据请求资源路径("/web01/hello")找到
应用所在的文件夹,然后依据web.xml找到对应的
servlet配置(servlet的类名),然后容器创建该servlet对象。
****step6, 调用 service方法
容器调用servlet对象的service方法(会将事先
创建好的request,response作为参数传递进来)。
****step7, 获得请求参数,并进行处理
servlet可以通过request对象获得请求参数,
进行相应的处理,然后将处理结果缓存到response对象上。
****step8, 处理结果,打包发送给浏览器
容器从response对象上获取之前处理的结果,
然后打包发送给浏览器。
step9,浏览器 拆包,生成页面
浏览器拆包(解析容器返回过来的响应数据包)
,依据获取的数据生成相应的页面。
http://ip:port/web02/hello?name=jetty
"?"表示后面是请求参数,
"name"是请求参数名,
"jetty"是请求参数值。
2、常见错误及解决方式
(1)404
a,错误原因:
依据请求资源路径找不到对应的资源。
b,解决方式:
依据http://ip:port/appname/servlet-url
检查你的请求地址。
检查是否一致。
(2)500
a,错误原因:
系统错误
b,解决方式:
检查servlet类有没有继承HttpServlet。
检查的“包名.类名”是否正确。
检查程序是否正确(比如在没有检查请求参数
的情况下就做类型转换)。
(3)405
a,错误原因
容器找不到service方法。
b,解决方式
检查service方法的签名(方法名、返回类型、
参数类型、异常类型)。
3、http协议(了解)
编辑
(1)什么是http(超文本传输控制协议)协议
由w3c制订的一种网络应用层协议,用来规范
浏览器与web服务器之间通信的过程及数据格式。
1)通信的过程:
step1,浏览器建立与web服务器之间的连接。
step2,浏览器将请求数据打包并发送给web服务器。
step3,服务器将响应数据打包并发送给浏览器。
step4,服务器关闭连接。
如果浏览器要再发请求,必须重新建立一个新的连接。
2)特点
“一次请求,一次连接”,优点是web服务器可以
利用有效的连接个数为尽可能多的客户端(浏览器)服务。
(2)数据包的结构
1)请求数据包
a,请求行:请求方式(get/post) 请求资源路径
协议的类型和版本
b,消息头: 是一些key,value对,由w3c定义,
可以由通信的双方彼此发送,比如,浏览器
可以发送一个"user-agent"消息头给服务器,
告诉服务器,浏览器的类型和版本。
c,实体内容:
只有发送post请求时,实体内容才会有
数据(即请求参数)。如果发送的是get请求,
请求参数会添加到请求资源路径的后面。
2)响应数据包
a,状态行: 协议类型和版本 状态码 状态描述
状态码:是一个三位数字,由w3c定义的,表示服务器处理请求的一种状态。
200:正常
500:系统异常
404:依据请求资源路径找不到对应的资源
b,消息头:
服务器也可以发送一些消息头给浏览器,
比如"content-type",告诉浏览器,服务器返回
的数据类型和编码。
c,实体内容:
程序处理的结果