首页 > 其他分享 >let 运行原理

let 运行原理

时间:2023-03-28 10:07:34浏览次数:30  
标签:容器 调用 let 请求 方法 线程 原理 servlet 运行


1.servlet的工作过程以及容器的作用

Servlet没有main()方法,他们受控与另外一个java应用,这个java应用称为容器(Container)。Tomcat就是这么一个容器,web服务器应用(如Apache)得到一个指向Servlet的请求时,服务器不是把这个请求交给Servlet本身,而是交给部署该servlet的容器。要由容器向servlet提供HTTP请求和响应,而且是由容器调用servlet的方法(doGet()和doPost())。容器运行多个servlet线程来处理对同一servlet的多个请求。(对每个请求分配一个线程,而不是每个客户)

见图(servlet01.jpg)

这里又得谈谈容器的作用了。

1)通信支持。利用容器提供的方法,web服务器能轻松的与servlet进行通信。

2)生命周期管理。容器控制着servlet的生与死。它会负责加载类,实例化,初始化,调用servlet的方法以及使servlet能够被垃圾回收。

3)多线程支持。容器会自动的接受每个servlet请求,创建一个新的java线程。针对每个请求,如果servlet已经运行完相应的HTTP方法,线程就会结束。但是我们同时也得考虑线程的安全性。

4)JSP支持。负责将JSP翻译成真正的java。

容器是如何处理用户请求的了?

1)用户点击一个链接,指向一个servlet而不是一个静态页面。

2)web服务器接到这个请求后转发给容器。容器接着创建两个对象:HttpServletRequest和HttpServletResponse。

3)容器根据请求中的URL找到相应的servlet,为这个请求创建一个线程,并把请求对象HtttpServletRequest和响应对象HttpServletResponse传递给这个servlet线程。

4)线程接下来调用service()方法,根据请求的不同,service()方法调用doGet()和doPost()方法。

5)doGet()方法生成动态页面,并把这个页面塞到响应对象里。

6)service()方法结束,随之线程结束,容器把响应对象装换为一个HTTP相应,发送给客户,然后删除请求和响应对象。

2.Servlet的生命周期

注意他的一生都是由容器控制的。servlet一生中只有一个实例出现,但是有多个线程出现。

加载类

实例化

初始化

service方法 

销 毁 

可回收 

 

注意:当我们配置文件中指定load-on-startup 属性时,若他的值是一个大于等于0的整数,容器会在启动的时候加载这个servlet类并调用他的init方法。

3.Servlet一生中的三大重要时刻

1)init()方法:在servlet实例被创建后调用,可以覆盖此方法做一些初始化的工作,比方说得到一个数据库连接。

2)service()方法:当客户请求到来时,容器会创建一个新的线程,调用servlet的service()方法。servlet的一生基本都在这里度过。我们一般不要覆盖此方法。

3)doGet或者doPost()方法:service方法根据请求的HTTP方法,来调用doGet()或者doPost()方法。我们在开发servlet时肯定要覆盖此方法。每次运行doGet()或者doPost()方法,它都在一个单独的线程
                          中。

4.容器(tomcat)在启动时会做什么?

容器在启动时,会根据相应的部署文件去寻找servlet文件。

5.为什么要有init方法了?难道不能将init代码放在构造函数中么?

因为让一个普通的java类成为servlet文件时容器付出的代价也挺大,比如说内存分配。在没有调用init方法时他还是一个普普通通的java对象,只有在用户使用时才再让他称为servlet这样对资源的利
用比较合理,注意:init方法是在第一个用户调用此servlet时被触发。

标签:容器,调用,let,请求,方法,线程,原理,servlet,运行
From: https://blog.51cto.com/u_16034393/6153809

相关文章

  • Android Studio 导入 Eclipse 的代码后,运行时中文显示乱码
    AndroidStudio导入Eclipse的代码后,先是编辑框中中文显示乱码。使用中的方法修改设置后显示不再乱码。但运行后,程序中的中文又出现乱码的情况。在的Andorid论坛中......
  • 三菱PLC项目案例学习之PLC控制伺服或步进电机带动丝运行案例
    三菱PLC项目案例学习之PLC控制伺服或步进电机带动丝运行案例。器件:三菱FX1SPLC,威纶通触摸屏,48步进驱动器,伺服电机,丝杆滑台等。控制方式:PLC发脉冲给步进驱动器控制步进......
  • 教你在HbuilderX上使用模拟器运行uni-app,良心教学!!!
    文章目录一、下载安装HbuilderX和逍遥模拟器(准备工作)二、添加adb.exe到环境变量三、在HbuilderX中连接模拟器 一、下载安装HbuilderX和逍遥模拟器(准备工作)1.下载安装......
  • 超详细【入门精讲】数据仓库原理&实战 一步一步搭建数据仓库 内附相应实验代码和镜像
    超详细【入门精讲】数据仓库原理&实战一步一步搭建数据仓库内附相应实验代码和镜像数据和脚本感谢B站UP主哈喽鹏程!!!目录0.B站课程链接和搭建数据仓库资源下载1.环......
  • Aop原理
    AOP相关的概念1)Aspect:切面,切入系统的一个切面。比如事务管理是一个切面,权限管理也是一个切面。2)Joinpoint:连接点,也就是可以进行横向切入的位置。3)Advice:通知,切面在某个......
  • servlet 与 jsp的加载过程
    彻底搞清楚servlet和jsp的加载过程我们在书本上学习到的一般都是说servlet的生命周期,很少有介绍jsp的生命周期,今天我就结合我的感受,为大家说一下关于jsp的生命周期。首先......
  • 锁屏后应用保持运行怎么设置
    本答案介绍了荣耀50、华为P40两种锁屏后使应用保持后台运行的方法,以下是荣耀50锁屏后使应用保持后台运行的操作步骤:点击电池打开手机设置页面,下拉找到并点击电池。 ......
  • pytest--xdist分布式运行
    前言当测试用例数量上去以后,执行一遍所有测试用例,那么执行速度就会比较慢,除了多线程来提高效率外,pytest也提供pytest-xdist插件来做分布式执行,从而减少测试时间,它属于进程......
  • 使用unittest运行第一个web自动化测试用例
    unittest:和pytest一样的测试框架,区别在于pytest是第三方框架,unittest是标准库框架一、框架的分层:1、新建一个项目文件夹,并在vscode中打开它          ......
  • 使用copilot生成vue响应式原理
    //生成vue的响应式原理functiondefineReactive(obj,key,val){//递归observe(val);//创建Dep实例constdep=newDep();Object.defineProperty(obj......