如何加深对Servlet及其工作模式的理解

学Java Web开发的同学都会接触到Servlet,可能在刚刚开始认识Servlet的时候并不能够准确理解它的本质。笔者认为,对于Servlet的准确理解和定位就是Servlet是一个Java接口。那么对于我们开发者而言什么是接口?其实接口就是一种规范。这种规范能够帮助我们在Web上与服务器产生数据交互,从而生成动态的Web。理论上,Servlet能够对任何类型的请求做出响应,所以,所有需要进行网络请求的类都可以通过Servlet来实现。所以,在开发Java服务器程序的时候,Servlet是一个不可或缺的部分。

在了解了什么是Servlet之后,还需要进一步了解Servlet的本质是什么?

Web服务器习惯处理静态页面,所以需要一个程序来帮忙处理动态请求(如当前时间)。Web服务器程序会将动态请求转发给帮助程序,帮助程序处理后,返回处理后的静态结果给web服务器程序。这样就避免了web服务器程序处理动态页面。Servlet的本质是一个帮助程序。在了解了Servlet的本质之后,我们可以进一步来了解Servlet的主要方法和生命周期:

可以说 servlet的本质是接口,tomcat服务器上的一个对外接口。

Servlet中的主要方法:

init():servlet的初始化方法,仅仅执行一次;

service():处理请求和生成响应;

destroy():在服务器停止并且程序中的Servlet对象不再使用的

时候调用,只执行一次;

生命周期:

实例化 Servlet¬——当Servlet容器启动或者容器检测到客户端请求时;

初始化 Servle——实例化后,容器调用Servlet的init()初始化对象;

处理请求 Servlet——得到客户端请求并做出处理时;

销毁 Servlet——当程序中的Servlet对象不再使用的时候,或者Web服务器停止运行的时候

Servlet就是个类,可以把先它看成一个普通的类。

这个类最开始由容器比如tomcat加载并实例化。尚学堂陈老师强调在加载并实例化之后、初始化之前它就是个普通的类对象,之后容器会调用它的init方法并把servletconfig对象作为参数传给它,然后这个时候这货就变成一个名副其实的servlet了,然后才有资格接受浏览器的请求。然后如果是在mvc模式下,就作为控制器运行,进行逻辑运算。

那么Servlet的工作模式大概可以概括为以下几点:

1、客户端请求该Servlet;加载Servlet类到内存;实例化并调用init()方法初始化该 Servlet;

2、service()(根据请求方法不同调用doGet() 或者 doPost(),此外还有doHead()、doPut()、doTrace()、doDelete()、doOptions());

3、加载和实例化 Servlet。这项操作一般是动态执行的。然而,Server 通常会提供一个管理的选项,用于在 Server 启动时强制装载和初始化特定的 Servlet;

4、Server 创建一个Servlet的实例;

5、第一个客户端的请求到达Server;

6、Server 调用 Servlet 的 init() 方法(可配置为 Server 创建 Servlet 实例时调用,在 web.xml 中 标签下配置 标签,配置的值为整型,值越小 Servlet 的启动优先级越高);

7、一个客户端的请求到达 Server;

8、Server 创建一个请求对象,处理客户端请求;Server 创建一个响应对象,响应客户端请求;

9、Server 激活 Servlet 的 service() 方法,传递请求和响应对象作为参数;

10、service() 方法获得关于请求对象的信息,处理请求,访问其他资源,获得需要的信息;

11、service() 方法使用响应对象的方法,将响应传回Server,最终到达客户端。service()方法可能激活其它方法以处理请求,如doGet() 或 doPost() 或程序员自己开发的新的方法;

12、对于更多的客户端请求,Server 创建新的请求和响应对象,仍然激活此 Servlet 的 service() 方法,将这两个对象作为参数传递给它。如此重复以上的循环,但无需再次调用 init() 方法。一般 Servlet 只初始化一次(只有一个对象),当 Server 不再需要 Servlet 时(一般当 Server 关闭时),Server 调用 Servlet 的 destroy() 方法。

以上内容从Servlet的本质、主要方法、生命周期和工作模式四个方面对Servlet进行较为细致的认识,在下面的视频教程中,也有对Servlet的详细讲解,相信能够对正在学Java的你有所帮助。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180313A0PV7X00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券