摘要

请不要实现 SingleThreadModel 接口。这种实践将导致 Web 容器创建多个 servlet 实例;即为每个用户创建一个实例。对于任何大小的应用程序,这种实践都将导致严重的性能问题。


建议

SingleThreadModel 是一种标记接口,servlet 可以通过实现它来将自己的重入(re-entrancy)问题传送给 servlet 引擎。javax.servlet.SingleThreadModel 本身就是 J2EE 规范的一部分。WebSphere servlet 引擎通过为每个用户创建单独的 servlet 实例来处理 servlet 的重入问题。因为这种方法导致极大的系统开销,所以,应该避免实现 SingleThreadModel。

通常,开发人员在多线程环境下使用 javax.servlet.SingleThreadModel 来保护可更新的 servlet 实例变量。 

最佳方法 -- 不使用 SingleThreadModel

public class BpAllBadThingsServletsV1c extends HttpServlet
{private int numberOfRows = 0;private javax.sql.DataSource ds = null;public void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException, IOException{Connection conn = null;ResultSet rs = null;PreparedStatement pStmt = null;int startingRows = numberOfRows;try{                            String employeeInformation = null;conn = ds.getConnection ("db2admin","db2admin");pStmt = conn.prepareStatement("select * from db2admin.employee");rs = pStmt.executeQuery();}catch (Exception es){// Error handling code here.}}
}

应被取代的方法 

通常,开发人员在多线程环境下使用 javax.servlet.SingleThreadModel 来保护可更新的 servlet 实例。下列代码片断举例说明了什么是要避免的。

避免这种情况!!!-- javax.servlet.SingleThreadModel

public class BpAllBadThingsServletsV1c extends HttpServletimplements SingleThreadModel
{private int numberOfRows = 0;private javax.sql.DataSource ds = null;public void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException, IOException{Connection conn = null;ResultSet rs = null;PreparedStatement pStmt = null;int startingRows = numberOfRows;try{String employeeInformation = null;conn = ds.getConnection ("db2admin","db2admin");pStmt = conn.prepareStatement("select * from db2admin.employee");rs = pStmt.executeQuery();}catch (Exception es){// Error handling code here.}}
}

最佳实践: 勿在 Servlet 中实现 SingleThreadModel相关推荐

  1. React最佳实践系列 —— 循序渐进理解 Dva中的model概念

    Dva最佳实践 -- 循序渐进理解 Dva中的model概念 一. 序 二. 在create-react-app中使用redux 1. 开始 2. 安装redux 三.异步action 四. Dva中 ...

  2. 《AngularJS深度剖析与最佳实践》一第1章 从实战开始

    本节书摘来自华章出版社<AngularJS深度剖析与最佳实践>一书中的第1章,作者 雪狼 破狼 彭洪伟,更多章节内容可以访问云栖社区"华章计算机"公众号查看 第1章 从 ...

  3. 《配置管理最佳实践》——2.10 建立构建过程

    本节书摘来自异步社区<配置管理最佳实践>一书中的第2章,第2.10节,作者: [美]Bob Aiello , Leslie Sachs著,更多章节内容可以访问云栖社区"异步社区& ...

  4. 《微信公众平台开发最佳实践》——第3章 基 础 接 口 3.1 接收用户消息

    本节书摘来自华章出版社<微信公众平台开发最佳实践>一 书中的第3章,第3.1节,作者:方倍工作室,更多章节内容可以访问云栖社区"华章计算机"公众号查看. 第3章 基 础 ...

  5. 《大数据系统构建:可扩展实时数据系统构建原理与最佳实践》一1.5 大数据系统应有的属性...

    本节书摘来自华章出版社<大数据系统构建:可扩展实时数据系统构建原理与最佳实践>一书中的第1章,第1.1节,南森·马茨(Nathan Marz) [美] 詹姆斯·沃伦(JamesWarren ...

  6. 《AngularJS深度剖析与最佳实践》一2.2 模块

    本节书摘来自华章出版社<AngularJS深度剖析与最佳实践>一书中的第2章,第2.2节,作者 雪狼 破狼 彭洪伟,更多章节内容可以访问云栖社区"华章计算机"公众号查看 ...

  7. 《DevOps实战:VMware管理员运维方法、工具及最佳实践》——2.3 配置管理

    本节书摘来自华章计算机<DevOps实战:VMware管理员运维方法.工具及最佳实践>一书中的第2章,第2.3节,作者:小特雷弗 A. 罗伯茨(Trevor A. Roberts Jr.) ...

  8. 针对《等保2.0》要求的云上最佳实践——网络安全篇

    简介:伴随着国内企业上云步伐的加快,越来越多的企业需要对云上关键业务进行等级保护自查或完成相关认证.本文以<GB/T 22239-2019 信息安全技术 网络安全等级保护基本要求>中所要求 ...

  9. 决胜大数据时代:HadoopYarnSpark企业级最佳实践(3天)

    Hadoop是云计算的事实标准软件框架,是云计算理念.机制和商业化的具体实现,是整个云计算技术学习中公认的核心和最具有价值内容. Yarn是目前公认的最佳的分布式集群资源管理框架: Mahout是目前 ...

最新文章

  1. 【Java面试题】37 说出ArrayList,Vector, LinkedList的存储性能和特性
  2. 疫情影响全景图:疫情对各行业短中期影响!
  3. 英特尔支持员工自带设备办公
  4. TinyXML2 的使用
  5. Atitit.播放系统的选片服务器,包厢记时系统 的说明,教程,维护,故障排查手册p825...
  6. php url怎么加前缀,php – 在Laravel 5中为现有URL添加前缀
  7. 为什么csdn搜索自己文章时,加了英文分号的搜索不了?“ ' ”
  8. struts2 处理请求流程分析(结合源码)
  9. php mysql ajax 注册验证 实例_Ajax小实例   用户注册异步验证
  10. 有关javaScript面向对象和原型笔记
  11. 做arma模型步骤_互助问答第349期:关于ARMA预测模型的问题
  12. 第3章 关系数据模型
  13. 云栖社区 mysql_mysql
  14. Jmeter-使用http proxy代理录制脚本
  15. word中插入pdf图片(矢量图、高清图)
  16. Hive-003安装配置
  17. Caffe学习笔记(一):CIFRA-10在Caffe上进行训练学习
  18. 人工智能救灾减灾应用_Bluemixathon挑战的前5个救灾应用程序
  19. Macbook M1 安装node(亲测)
  20. python爬虫浏览器伪装和设置代理ip

热门文章

  1. Java Hibernate模板 学习总结
  2. http协议状态码和web错误解决总结
  3. php可变数量的参数
  4. 读书印记 - 《注意力经济:如何把大众的注意力变成生意》
  5. MySQL 数据库 InnoDB 和 MyISAM 数据引擎的差别
  6. docker修改默认存储位置
  7. javaweb之Java基础加强
  8. Block 的循环引用
  9. Server Error in '/' Application. 报错
  10. 在中国Windows Azure服务中创建应用程序的一些不同之处