Servlet接口是Servlet API的最核心抽象类。所有的servlets都直接实现了这个接口,或者以更通用的方式继承了这个接口的实现类。Servlet API自带了两个实现了Servlet接口的类:GenericServlet和HttpServlet。绝大多数情况下,开发人员都会继承HttpServlet来开发servlets。

SRV.2.1    处理请求的方法

Servlet接口定义了一个service方法来处理客户端请求。servlet容器把每一个请求都路由到对应的Servlet中,然后调用这个方法。

值得注意的是,开发人员需要自行设计servlets以满足对并发请求的处理要求。通常情况下,Web容器通过在不同的线程中并发执行同一个servlet的service方法来实现对并发请求的处理。

SRV.2.1.1    HTTP协议相关的请求处理方法

HttpServlet这个抽象子类在Servlet接口的基础上扩充了几个方法,Servlet处理HTTP请求时service方法会自动调用对应的扩充方法。方法列表如下:

doGet         处理HTTP GET请求。

doPost       处理HTTP POST请求。

doPut         处理HTTP PUT请求。

doDelete    处理HTTP DELETE请求。

doHead      处理HTTP HEAD请求。

doOptions  处理HTTP OPTIONS请求。

doTrace      处理HTTP TRACE请求。

一般情况下,开发人员编写基于HTTP的servlets时只写好doGet和doPost方法就足够了。其他的几个方法只有特别熟悉HTTP协议的人员才有可能用得到。

SRV.2.1.2    附加的方法

doPut和doDelete方法是为支持HTTP/1.1协议准备的。HttpServlet的doHead方法其实就是doGet方法的特殊形式而已——它只返回doGet方法产生的头信息。doOptions方法负责响应HTTP对应的方法。doTrace方法负责生成包含了所有头信息的响应并返回给TRACE请求。

SRV.2.1.3    GET请求的其他可选项

HttpServlet接口定义了getLastModified方法以支持额外的GET操作,用于返回在某个时间点之后有过修改的资源。适当情况下,实现这个方法可能会有助于提升网络资源的响应效率。

SRV.2.2    实例的数量

servlet声明(The servlet declaration)是Web应用中部署描述符的一部分,这些内容会在SRV.13中解释。部署描述符(Deployment Descriptor)控制着servlet容器生成servlet实例的方式。

非分布式环境中,servlet容器能且只能为每一个servlet创造一个实例。不过,针对实现了SingleThreadModel接口的servlet来说,servlet容器是可以实现多个实例来处理大量请求的加载并路由到不同的实例中进行服务。

当servlet作为一个分布式应用系统的一部分组成来部署时,容器可能会为每一个JVM生成一个servlet实例。然而,如果分布式应用系统中的servlet实现了SingleThreadModel接口,容器可能会为每一个JVM生成多个servlet实例。

SRV.2.2.1    关于单线程模式(The Single Thread Model)的提示

SingleThreadModel接口的使用就注定了会保证servlet的一个实例每次只能执行一个线程。记住这一点很重要:这种保证是针对每一个servlet实例的,因此容器可以通过建立servlet实例池来同时执行多个请求。某些对象一次可以共享给多个servlet实例共同访问,例如HttpSession,即使实现了SingleThreadModel,它也可能同时共享给多个servlet。

强烈建议开发人员采取其他措施来解决这些实例数量和并发访问的问题,不要去实现SingleThreadModel接口。例如,避免实例变量的使用,或者对访问这些资源的代码块加上同步锁等。SingleThreadModel接口在2.4版规范中已经被废弃了,所以不要再使用了。

文档信息

Servlet 2.4 规范之第二篇:Servlet接口的更多相关文章

  1. Servlet 2.4 规范之第一篇:概览

          写在前面的话: 本系列是对<Java Servlet Specification Version 2.4>的完全翻译,力争但不保证完美表达出英文原文的思想内涵.如有疏漏之处,还 ...

  2. Servlet和JSP规范及版本对应关系

    JSR 53: JavaTM Servlet 2.3 and JavaServer PagesTM 1.2 JSR 154: JavaTM Servlet 2.4 JSR 154: JavaTM Se ...

  3. Servlet第二篇【Servlet调用图、Servlet细节、ServletConfig、ServletContext】

    Servlet的调用图 前面我们已经学过了Servlet的生命周期了,我们根据Servlet的生命周期画出Servlet的调用图加深理解 Servlet的细节 一个已经注册的Servlet可以被多次映 ...

  4. Servlet第二篇(介绍、ServletConfig;ServletContext)

    什么是Serlvet? Servlet其实就是一个遵循Servlet开发的java类.Serlvet是由服务器调用的,运行在服务器端. 为什么要用到Serlvet? 我们编写java程序想要在网上实现 ...

  5. servlet类第二篇

    1servlet的生命周期是什么? 服务器启动时(web.xml中配置load-on-startup=1,默认为0)或者第一次请求该servlet时,就会初始化一个Servlet对象,也就是会执行初始 ...

  6. Servlet 2.4 规范之第三篇:Servlet生命周期

        SRV.2.3    Servlet生命周期 servlet有着定义良好且明确的生命周期,它定义了servlet以怎样的方式加载和实例化.初始化.怎样处理客户端请求.以及怎样停止服务.生命周期 ...

  7. Servlet 2.3 规范

    Servlet2.3规范 第一章: servlet2.3规范用到了一下的一些规范:J2EE.JSP1.1.JNDI 在14章中讲述了规范中的所有的classes类或接口(改文中不讲述).对开发者而言以 ...

  8. EL&Filter&Listener:EL表达式和JSTL,Servlet规范中的过滤器,Servlet规范中的监听器,观察着设计模式,监听器的使用,综合案例学生管理系统

    EL&Filter&Listener-授课 1 EL表达式和JSTL 1.1 EL表达式 1.1.1 EL表达式介绍 *** EL(Expression Language):表达式语言 ...

  9. JBoss和Tomcat版本、及Servlet、JSP规范版本对应一览 【转】

    原文地址:http://blog.csdn.net/hills/article/details/40896357 JBoss和Tomcat版本.及Servlet.JSP规范版本对应一览 JBossAS ...

随机推荐

  1. soapui测试https双向验证p12项目

    1.准备好p12 和jsk秘钥文件 2.配置soapui ssl 其中: 1:jks就是放在trustStore那里,密码填写为 106075 2:p12放到keystore,密码填写:180000 ...

  2. jQuery和CSS的拍摄效果

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  3. PAT (Basic Level) Practise (中文)-1030. 完美数列(25)

    PAT (Basic Level) Practise (中文)-1030. 完美数列(25)   http://www.patest.cn/contests/pat-b-practise/1030 给 ...

  4. POI写入word doc 03 模板的实例

    在使用POI写word doc文件的时候我们必须要先有一个doc文件才行,因为我们在写doc文件的时候是通过HWPFDocument来写的,而HWPFDocument是要依附于一个doc文件的.所以通 ...

  5. javase(12)_集合框架_Queue

    一.Queue Queye接口体系图 体系分析: Deque实现类:ArrayDeque, LinkedList(数组和链表实现双向队列) BlockingDeque实现类:LinkedBlockin ...

  6. CS193p Lecture 8 - Protocols, Blocks and Animation

    一.协议(Protocols) 1. 声明协议 @protocol Foo <Xyzzy, NSObject> // ... @optinal // @required //... @en ...

  7. MFC学习小结

    2019/1/13 视频来源 一.   MFC框架中一些重要的函数 1. InitInstance函数 应用程序类的一个虚函数,MFC应用程序的入口.初始化的作用. 2. PreCreateWindo ...

  8. TUN/TAP/VETH

    TUN/TAP虚拟网络设备为用户空间程序提供了网络数据包的发送和接收能力.他既可以当做点对点设备(TUN),也可以当做以太网设备(TAP). TUN/TAP虚拟网络设备的原理: 在Linux内核中添加 ...

  9. perl学习之FLOCK函数的调用(讲的非常好)

    一段演示flock系统调用的perl程序http://www.extmail.org/forum/viewthread.php?tid=1066

  10. Verilog学习笔记基本语法篇(五)········ 条件语句

    条件语句可以分为if_else语句和case语句两张部分. A)if_else语句 三种表达形式 1) if(表达式)          2)if(表达式)               3)if(表达 ...