servlet 的本质是什么,它是如何工作的?

Servlet(Server Applet),全称 Java Servlet,未有中文译文。是用 Java 编写的服务器端程序。其主要功能在于交互式地浏览和修改数据,生成动态 Web 内容。狭义的 Servlet 是指 Java 语言实现的一个接口,广义的 Servlet 是指任何实现了这个 Servlet 接口的类,一般情况下,人们将 Servlet 理解为后者。

Servlet 运行于支持 Java 的应用服务器中。从原理上讲,Servlet 可以响应任何类型的请求,但绝大多数情况下 Servlet 只用来扩展基于 HTTP 协议的 Web 服务器。

最早支持 Servlet 标准的是 JavaSoft 的 Java Web Server,此后,一些其它的基于 Java 的 Web 服务器开始支持标准的 Servlet。

工作模式:

1、客户端请求该 Servlet;

2、加载 Servlet 类到内存;

3、实例化并调用 init () 方法初始化该 Servlet;

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

5、destroy();

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

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

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

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

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

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

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

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

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

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

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