[Servlet扫盲]---(2)Servlet接口

声明:

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规范




猜你喜欢

转载自blog.csdn.net/zhaoyaxuan001/article/details/78940838