学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的你有所帮助。
领取专属 10元无门槛券
私享最新 技术干货