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. 自动发表QQ空间说说

    require("gb2312toutf8") local http = require "socket.http" local surl = "ht ...

  2. 3d点云

    rgb-d:rgb加depth组成4channel的 3d点云

  3. nyoj-586-疯牛|poj-2456-Aggressive cows

    http://acm.nyist.net/JudgeOnline/problem.php?pid=586 http://poj.org/problem?id=2456 解题思路:最大化最小值二分答案即 ...

  4. 还有这种书,程序开发心理学(豆瓣) - 豆瓣读书,转载自:https://book.douban.com/subject/1141154/

    登录/注册 下载豆瓣客户端 豆瓣 读书 电影 音乐 同城 小组 阅读 FM 时间 豆品 更多 豆瓣读书   购书单 电子图书 豆瓣书店 2018年度榜单 2018书影音报告 购物车 程序开发心理学 作 ...

  5. NSLayoutConstraint.constraintsWithVisualFormat详解,以及AlignAllCenterY

    NSLayoutConstraint.constraintsWithVisualFormat详解,以及AlignAllCenterY 转载2015-07-08 18:02:02 鉴于苹果官方文档的解释 ...

  6. Idea 搭建Maven--web项目(MVC)

    小编最近正在学习使用MVC框架,在搭建Maven的项目过程中,遇到了很多问题,上网搜了很多材料才找到答案,为了小编以后查起来方便,也为了向广大小伙伴分享,写了这部片博文,敬我昨天一天的学习结果! 步骤 ...

  7. (62)zabbix客户端自动注册

    1. 概述 上一篇内容<zabbix自动发现配置>,大概内容是zabbix server去扫描一个网段,把在线的主机添加到Host列表中. 我们本篇内容与上篇相反,这次是Active ag ...

  8. Mac OSX: 有线共享WiFi

    首先连上有线 系统偏好设置->网络->点击左侧WiFi,再点击右下角[高级] 勾选[创建电脑对电脑网络],然后单击[好] 在顶部菜单栏击WiFi图标,如果WiFi未打开,则单击打开,如果已 ...

  9. 《Spring源码深度解析》第二章 容器的基本实现

    入门级别的spring配置文件 <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi=&q ...

  10. webpack hmr

    参考: https://webpack.js.org/concepts/hot-module-replacement/ https://webpack.js.org/guides/hot-module ...