javaweb 基础

1.Servlet是什么

        servlet本质上是一个接口,它压根就不管也管不着哪些网络协议,如:http。servlet接口的作用是什么?规范!

        servlet接口定义的是一套处理网络请求的规范,所有实现servlet的类,都需要实现它的那五个方法,其中最主要的是两个声明周期方法init()和destory(),还有一个处理请求的service()。也就是说,所有实现servlet接口的类,或者说,所有想要处理网络请求的类,都需要回答这三个问题:(规范中要做的事情)

  • 你初始化时要做什么?
  • 你销毁时要做什么?
  • 你接收到请求时要做什么?

        servlet是一个规范,那实现了servlet的类,就能处理请求了吗?不能。你从来不会在servlet中写什么监听8080端口的代码,servlet不会直接和客户端打交道!

        那请求是怎么来到servlet的呢?答案是servlet容器,比如我们最常用的Tomcat。servlet都是部署在一个容器中的,不然你的servlet根本不起作用。

        Tomcat才是与客户端直接打交道的家伙,它监听了端口,请求过来后,根据URL等信息,确定要将请求交给哪个servlet去处理,然后调用那个servlet的service方法,service方法返回一个response对象,Tomcat再把这个respond返回给客户端。

那什么是servlet容器呢?servlet容器,顾名思义里面存放的是servlet对象

1、客户端请求该 Servlet;

2、Tomcat加载 Servlet 类到内存;

3、Tomcat实例化并调用init()方法初始化该 Servlet;(tomcat只认init()方法,所有需要继承父类的该方法或者创建该方法)

4、Tomcat调用service()(根据请求方法不同调用doGet() 或者 doPost(),此外还有doHead()、doPut()、doTrace()、doDelete()、doOptions());(tomcat只认xxx()方法,所有需要继承父类的该方法或者创建该方法)

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() 方法。

Servlet 容器就是 Servlet 程序的运行环境,它主要包含以下几个功能:

  • 实现 Servlet 规范定义的各种接口和类,为 Servlet 的运行提供底层支持;
  • 管理用户编写的 Servlet 类,以及实例化以后的对象;
  • 提供 HTTP 服务,相当于一个简化的服务器。

猜你喜欢

转载自blog.csdn.net/zr_xs/article/details/128927723