文章目录
- Servlet 如何运行
- 演示 Servlet 运行原理
Servlet 如何运行
用户向浏览器地址栏输入:http://ip:port/helloweb/sayHello?name=zs
-
浏览器使用 ip:port(端口号)连接服务器
-
浏览器将请求数据按照 http 协议打成一个数据包(请求数据包)发送给服务器
请求数据包的内容包含了请求资源路径(/helloweb/sayHello?name=zs),另外,在请求数据包当中,还会包含浏览器自动生成的一些信息。
-
服务器创建两个对象:请求对象(Request)和响应对象(Response)
服务器解析请求数据包,将解析之后的数据存放到请求对象里面,方便 servlet 读取请求数据(因为 servlet 不用解析请求数据包,如果 要解析,需要理解 http 协议)。
请求对象是 HttpServletRequest 接口的一个实现。
响应对象是 HttpServletResponse 接口的一个实现,响应对象用于存放 servlet 处理的结果。 -
依据请求资源路径找到相应的 servlet 配置,通过反射创建 servlet 实例。然后调用其 service() 方法。
在调用 service()方法时,会将事先创建好的请求对象(request)和响应对象(response)作为参数进行传递。在 servlet 内部,可以通过 request 获得请求数据,或者通过 response 设置响 应数据。 -
服务器从 response 中获取数据,按照 http 协议打成一个数据包(响应数据包),发送给浏览器。
-
浏览器会解析响应数据包,取出相应的数据,生成相应的界面。
演示 Servlet 运行原理
当用户向浏览器地址栏输入 http://ip:port/helloweb/sayHello?name=xxx
原理图
说明:
-
建立连接
浏览器根据 IP 地址和端口号(port)和服务器建立连接 -
打包
浏览器将请求数据按 HTTP 协议打成数据包(http 请求数据包)
http 请求数据包包含“helloweb/sayHello”(请求资源路径) -
发送请求
浏览器向服务器发送请求数据包 -
创建 Request 对象
Servlet 引擎(Tomcat 负责通讯的模块)创建请求对象(Request),方便我们自定义的 Servlet 获得请求数 据包中的内容
该对象符合 HttpRequest 接口 -
创建 Response 对象
Servlet 引擎(Tomcat 负责通讯的模块)创建相应对象(Response)
该对象符合 HttpResponse 接口 -
创建 HelloServlet 对象
服务器通过反射的方式创建 Servlet 实例 -
调用 Servlet 实例的 service(request , response)方法
7.1)访问参数
在 service()方法中访问 Request 对象,获得用户提交的一些参数
7.2)处理结果
在 service()方法中将处理结果放入 Response 对象 -
取数据
Servlet 引擎从 Response 对象中取出数据 -
打包
Servlet 引擎将取出的数据打包,该数据包符合 http 协议要求 -
发送响应
浏览器将响应数据包中的数据取出,生成界面