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. 洛谷 P1120 小木棍[数据加强版]

    这道题可能是我做过的数据最不水的一道题-- 题目传送门 这题可以说是神剪枝,本身搜索并不算难,但剪枝是真不好想(好吧,我承认我看了题解)-- 剪枝: 用桶来存储木棍 在输入的时候记录下最长的木棍和最短 ...

  2. ios 团购信息客户端demo(三)

    接上二篇的内容,今天我们就来介绍一下如何将解析出来的数据放入AQGridView中显示出来,因为我们的工程中已经将AQGridView导入了,所以我们在KKFirstViewController中直接 ...

  3. NOIP 模拟题

    目录 T1 : grid T2 : ling T3 : threebody 数据可私信我. T1 : grid 题目:在一个\(n*n\)的方格中,你只能斜着走.为了让问题更简单,你还有一次上下左右走 ...

  4. docker的网络(进阶)

    overlay网络 overlay网络驱动程序会在多个docker守护程序(即多个主机上的docker守护程序)之间创建分布式网络.该网络(overlays)位于特定于主机的网络之上,允许连接到它的容 ...

  5. windows显示文件扩展名

    搜索打开windows的文件资源管理选项,如下去掉“隐藏已知文件类型的扩展名”即可 打开之后显示如下:

  6. LeetCode(110) Balanced Binary Tree

    题目 Given a binary tree, determine if it is height-balanced. For this problem, a height-balanced bina ...

  7. 【C#】【数据结构】002-线性表:单链表

    C#数据结构:单链表 1.自定义单链表结构: 单链节点类 using System.Collections; using System.Collections.Generic; using Unity ...

  8. linux 使用mail 发送邮件

    配置: /etc/mail.rc 追加配置参数 set from=lynctest@iclinux.com smtp="mail.iclinux.com"smtp-auth-use ...

  9. 自己项目使用了ARC,项目中使用第三方库继续引用ARC

    Objective-C引入ARC(Automatic Reference Counting)后,我们经常会面对这样一种困境:自己的项目使用了ARC,却发现要使用的第三方类库是non-ARC的:又或者自 ...

  10. python3将unicode转化成中文输出

    a = [] with open('douban.json','r') as f: for i in f.readlines(): a.append((i.encode('utf8').decode( ...