当前位置: 首页 > 图灵资讯 > 技术篇> 浅析 Servlet 执行原理

浅析 Servlet 执行原理

来源:图灵教育
时间:2023-07-05 17:35:47

Servlet在Javaweb学习研究中起着重要的作用。学好它是后续Javaweb学习的良好基础。无论是SSH、SSM还是微服务Javaweb技术,都要先学好Servlet,事半功倍。本文将主要分析Servlet的运行原理。

一、UML

下图为Servletet UML关系图。

浅析 Servlet 执行原理_抽象类

从图中可以看出:

1. 抽象Httpservlet继承抽象Genericservlet有两种关键方法,doGet()和dopost()

2. 实现接口Servlet的Genericservlet,ServletConfig,Serializable

3. MyServlet(用户自定义Servlet)继承HttpServlet,重写抽象HttpServletdoget()和dopost()方法

注:任何用户自定义Servlet,只需重写抽象HttpServlet的dopost()和doget(),如上图所示

二、Servlet在容器中的执行过程

Servlet只能在容器中执行,Servlet容器种类繁多,如Tomcat、Weblogic等。下图简单 请求响应 模型。

浅析 Servlet 执行原理_生命周期_02

分析:

1. 浏览器向服务器发出GET请求(请求服务器Servleta)

2. 服务器上的容器逻辑接收到url,根据url判断为servlet请求。此时,容器逻辑将产生两个对象:请求对象(HttpServletRequest)和响应对象(HttpServletResponce)

3. 根据URL找到目标Servlet(本示例目标Servlet为ServletA),并创建一个线程A

4. 将刚刚创建的请求对象和响应对象传递给线程A

5. 容器逻辑调用Servletservice()方法

6. service()根据要求类型(本示例为GET请求)调用doget()(本示例调用doget())或dopost()

7. doGet()执行后,将结果返回给容器逻辑

8. 线程A在线程池中被销毁或放置

注意:

1.原则上,容器中的每个Servlet只有一个例子

2.每个请求对应一个线程

3.多个线程可以作用于同一个Servlet(这是Servlet线程不安全的根本原因)

4.一旦每个线程完成任务,它将被销毁或放置在线程池中等待回收

Servlet在Javaweb中扮演的角色

在Javaweb中,Servlet扮演两个角色:页面角色和控制器角色。

Servlet拥有jsp等动态页面技术后,更注重控制器角色,jsp+servlert+model 形成基本的三层结构

(1)页面Page角色

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {        request.setCharacterEncoding("UTF-8");        response.setContentType("text/html;charset=utf-8");        PrintWriter out=response.getWriter();        out.println("Hello!Servlet.");    }

(二)控制器角色

jsp扮演页面角色,servlet扮演控制器角色,两者结合构建基本的MVC三层架构模式

浅析 Servlet 执行原理_服务器_03 style="visibility: visible; width: 570px;"></p><p style=Servlet在容器中的生命周期

下图是Servlet生命周期的简要概图

浅析 Servlet 执行原理_服务器_04

分析:

第一步:容器首先加载Servlet类

步骤2:实例化Servlet(Servlet不参构造函数执行)

第三步:执行init()方法(Service()方法执行前只执行一次)

第四步:执行service()方法,处理客户请求,doPost()或doget()

第五步:执行destroy(),销毁线程