Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 449|回复: 0

开发交流:Servlet运行过程

[复制链接]

该用户从未签到

发表于 2011-10-24 09:50:13 | 显示全部楼层 |阅读模式
Servlet运行过程
1.Web浏览器-->发出http请求-->Web容器-->首次访问的话创建目标Servlet对象-->Servlet
2.Web容器-->创建请求和响应对象(request和response)-->调用Servlet的service(ServletResquest,ServletRespons)并且将刚才创建的请求对象和响应对象对象传递给Servlet
3.Servlet程序从请求对象中读取请求信息,将响应信息写入到响应对象当中;

4、service方法结束,程序返回到web容器->web容器从相应对象中读取响应信息->将响应星系生成HTTP消息返回给浏览器
    Servlet、Servlet容器(Web容器)与Servlet API关系
Servlet API只是提供了一组类似于HttpServletRequest、HttpServletResponse的接口定义,而没有这些接口的实现类,具体实现是由各个Web容器来完成的;而Servlet本身不需要关注Servlet容器是如何实现这些接口的,也不需要知道Web容器实现这些接口的具体实现类的名字。
虽然Servlet源程序中引用的是Servlet API,但Servlet运行时真正调用的对象是由Servlet容器中的实现类创建的,所以将Servlet API的jar包增加到CLASSPATH环境变量中,只能保证Servlet程序可以被成功编译,但不能让Servlet程序离开Servlet容器运行

Servlet的线程安全问题

    Servlet引擎采用多线程模式运行,它为并发的每个访问请求都使用一个单独的线程来进行响应,但带来了线程安全问题(例如,多个请求同时并发访问同一个Servlet的时候)。
如果某个Servlet实现了SingleThreadModel接口,那么Servlet引擎将以单线程模式来调用它的service()方法。
signleThreadModel接口中没有定义任何方法,所以我们只需要在Servlet类定义中增加实现SingleThreadModel接口的声明即可。不过,现在已经作废了。

    原理(为什么弃用):对于实现了SingleThreadModel接口的Servlet,Servlet引擎仍然支持对该Servlet的多线程并发访问,其采用的方式是产生多个Servlet实例对象,并发的每个线程分别调用一个独立的Servlet实例对象。这样同时有多个Servlet实例对象在运行,不会出现多个请求同时调用一个Servlet对象;而多个Servlet实例对象共同组成了一个Servlet对象池,当Web容器接收到针对某个Servlet的请求时,就从对象池中挑选一个空闲的实例对象进行响应。由此可见,实现了SingleThreadModel接口的Servlet并不能真正解决线程安全的问题。因为Servlet引擎会创建多个Servlet实例对象,多个并发的请求分别由不同的Servlet实例对象进行处理或者单个Servlet对象逐个依次排队处理,而真正意义上的多线程安全问题是指一个Servlet对象被多个线程同时调用时的问题。
      
推荐方法:涉及到多个并发的service()方法调用Servlet有线程安全问题的,最好在service方法中编写多线程同步控制代码,而不要采用实现了SingleThreadModel接口的单线程运行模式。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

GMT+8, 2025-1-10 23:17 , Processed in 1.014802 second(s), 36 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表