声明:
Author:赵志乾
Date:2017-12-31
Declaration:All Right Reserved!!!
1、Servlet接口概述
在某种意义上,Servlet用于指代一个特定的接口,而我们更倾向于将实现了这一接口的类称为Servlet。(注:一般而言,会通过继承一个已经实现了该接口的类来复用共性功能)目前,GenericServlet和HttpServlet已经实现了Servlet接口,在实际的开发过程中,开发人员只需继承HttpServlet来实现自己的Servlet即可。
2、核心:service方法
Servlet接口中定义了一个用于处理客户端请求的service方法。每当容器收到一个客户端请求,便会将请求路由到对应的Servlet实例并调用实例上的service方法完成请求的处理。由于Web应用会面临多客户端的并发请求,开发人员需要自行保证所设计的Servlet线程安全,从而使得service方法能够在一特定时间点处理多线程的并发执行。
注:容器对于客户端的同类并发请求,会使用同一个Servlet进行处理,即在不同的线程中并发执行service方法。
3、基于HTTP协议的Servlet抽象类
HttpServlet在实现Servlet接口的基础上,增加了几个协议相关的方法。当我们使用HttpServlet的service方法处理客户端请求时,其能够自动地依据请求类型将请求转发到对应的协议处理方法上。这些协议处理方法主要包括以下几种:
doGet:处理HTTP Get请求
doPost:处理HTTP Post请求
doPut:处理HTTP Put请求
doDelete:处理HTTP Delete请求
doHead:处理HTTP Head请求
doOptions:处理HTTP Options请求
doTrace:处理HTTP Trace请求
注:一般而言,开发人员开发基于Http协议的Servlet时,只需实现其中的doGet方法和doPost方法即可。
4、Servlet实例化数量
通过注解或者配置文件能够控制容器提供Servlet实例的方式。如果应用部署在集中式环境下,只能为每个Servlet提供一个实例,而当Servlet实现了SingleThreadModel接口时,容器便可有选择性的为每个Servlet生成多个实例或一个实例,以便应对高负荷请求或者串行化请求到一个Servlet实例。如果应用部署在分布式环境下,则容器会为每个JVM中的每个Servlet提供一个实例,而当Servlet实现了SingleThreadModel接口时,容器便可有选择性的为每个JVM中的每个Servlet生成多个实例或一个实例。
注:SingleThreadModel接口能够保证一个特定Servlet实例的service方法在同一时刻仅能让一个线程执行。由于该接口仅针对于单一实例,故可以让容器池化这些对象。
参考资料:Servlet3.1规范