Servlet学习笔记3——Servlet详解

本文深入探讨了Servlet的本质,即作为服务器端的Java组件,需要实现Servlet接口。Servlet对象的生命周期包括创建(通过反射机制,仅创建一次)、初始化(init方法只执行一次)、服务(service方法每次请求调用一次)和销毁(服务器关闭或重新部署前调用destroy方法)。Servlet是单实例多线程的,其生命周期由Web容器管理。文章还讨论了ServletConfig和ServletContext对象,它们分别提供Servlet配置信息和全局上下文。最后,讲解了如何在服务器启动阶段实例化Servlet以及设置Web站点的欢迎页面。
摘要由CSDN通过智能技术生成

Servlet对象

Servlet的本质是什么?

Servlet是服务器端的小java程序,这个小java程序不能随意编写,必须实现SUN制定的javax.servlet.Servlet接口,实现其中的方法。Servlet是一个满足java规范的java类。Servlet既然满足Servlet规范,Tomcat服务器我们可以叫做“WEB容器(Container)”,那么Servlet 就可以叫做容器中的“组件(Component)”

Servlet对象的生命周期是什么样的,什么时候创建,创建几次,什么时候销毁?

假设客户端向web服务器发送的请求是/login请求,当用户向web服务器第一次发送/login请求的时候,Tomcat在容器中搜索/login对象的Servlet对象,但是没有找到该对象,此时会从web.xml文件中获取/login对象的完整Servlet类名,通过反射机制,调用Servlet的无参数构造方法创建Servlet对象,马上调用init方法完成Servlet对象的初始化操作,然后调用service方法提供核心服务。
当用户第2+次再发送/login请求的时候,Tomcat还是在容器中搜索/login对象的Servlet对象,此时可以找到该对象,直接调用该对象的service方法提供核心服务。
当用户长时间没有访问该Servlet,或者服务器关闭,或者项目重新部署的时候,Tomcat容器会去回收Servlet对象所占用的内存,在回收该内存之前调用该Servlet对象的destroy方法,完成回收之前的准备。

结论:
Servlet对象只创建一次(构造函数只执行一次)
Servlet对象的init方法在对象创建之后马上执行(只执行一次完成初始化操作)
Servlet对象service方法,只要用户访问一次则执行一次。
Servlet对象的destroy方法,也是只执行一次,执行之前对象没有销毁,即将销毁。

Servlet对象的生命周期由Tomcat容器管理,对象的创建,对象内存的释放,还有对象中的方法调用都是由Tomcat容器完成,程序员不能干涉,只能编写该类实现Servlet接口,将其配置在web.xml文件中。

Servlet对象是单实例的,并且是在多线程的环境下运行,可能存在线程并发带来的安全问题。

什么情况下在init方法中编写程序?什么情况下在service方法中编写程序?什么情况下在destroy方法中编写程序?

  • init方法是SUN规范中为程序员提供的一个对象初始化时机,这是一个特定的时刻,有的时候我们需要在这个特定的时刻执行一段特定的程序,此时将该程序写入init方法,例如:项目经理要求在Servlet对象创建时刻记录日志,请将该程序编写到init方法中。对象第一次创建的时候执行记录日志,并且只执行一次,记录一次日志信息。(init方法一般很少用)
  • Service方法是Servlet的核心业务方法,核心业务都在该方法中完成,只要编写一个Servlet,service方法是一定要编写代码的,完成业务的处理。(常用)
  • destroy方法init方法相同,只不过是一个不同的时机。(destroy方法一般很少使用)

研究Servlet对象的生命周期

​ 1、在myeclipse中设置文件的默认打开方式:
​ Window–>Preferences–>file associations–>找到对应扩展名选项–>设置默认打开方式default

​ 2、什么是Servlet生命周期?
​ Servlet对象的生命周期表示:Servlet对象从最初的创建,到最终的销毁,经历了哪些不同的过程。

​ 3、Servlet对象的创建,Servlet对象的方法被调用,Servlet对象的销毁,都是由WEB容器来负责管理的,
​ javaweb程序员是不需要管理这些的。
​ javaweb程序员主要负责:
​ Servlet类的编写,
​ service方法的实现,
​ Servlet类在web.xml文件中的配置。

​ 4、myeclipse快捷键:
​ alt + / 自动补全
​ ctrl + 1 纠错
​ ctrl + o 查看类的属性和方法
​ ctrl + shift + t 查找类
​ ctrl + shift + o 组织导入
​ ctrl + / 注释和取消注释
​ tab 缩进
​ shift + tab 取消缩进
​ ctrl + shift + f 格式化【不建议使用】
​ ctrl + alt + 向下箭头 复制一行
​ ctrl + z 撤销
​ ctrl + y 重做
​ ctrl + s 时刻记住这个“保存”
​ ctrl + c
​ ctrl + x
​ ctrl + v
​ ctrl + d 删除光标所在行

​ 5、web.xml文件在服务器启动阶段被解析,若web.xml文件编写有错误,启动Tomcat服务器的时候,当前webapp启动失败。

​ 6、Servlet对象“默认情况”下,在服务器启动阶段是不会实例化的。不会创建对象

​ 7、Servlet对象的生命周期
​ 1) 用户打开浏览器在浏览器地址栏上输入URL:http://localhost:8080/oa/save,回车
​ 2) WEB服务器截取请求路径,得知用户要访问的资源是:/oa/save
​ 3) WEB服务器从整个容器中检索/oa/save请求路径对应的Servlet对象
​ 4) 若找到了该Servlet对象
​ 4-1) web容器负责调用该Servlet对象的service方法提供服务,处理请求
​ 5) 若没有找到该Servlet对象
​ 5-1) 通过请求路径/save找到对应的Servlet完整类名(web.xml文件支持的,web.xml文件在服务器启动阶段解析,路径和类名已经绑定在一起了)
​ 5-2) 通过反射机制调用Servlet类的无参数构造方法完成Servlet对象的实例化操作。(Servlet对象已经创建完毕)
​ 5-3) web容器调用该Servlet对象的init方法完成初始化操作。
​ 5-4) web容器调用该Servlet对象的service方法提供服务,处理请求
​ 6) 若“服务器关闭”或“webapp重新部署”或“长时间没有用户再访问该Servlet”,WEB容器
​ 会销毁该Servlet对象占用的内存空间,web容器在销毁该Servlet对象之前,web容器负责
​ 调用该Servlet对象的destroy方法,完成销毁之前的准备工作。

​ 8、Servlet对象是单实例的,不符合单例模式,是一种伪单例,真单例的构造方法必须是私有化的。
​ Servlet对象是在多线程环境下运行的一个对象。【单实例多线程环境下运行的一个java对象】
​ 之所以Servlet对象是单实例的,是因为该对象的创建是由WEB容器负责的,javaweb程序员不能干涉

​ 9、单例分类:

​ 真单例

​ 伪单例

10、总结:
1) 无参数构造方法只调用一次,对象只创建一个,对象是单例的
2) init方法只被调用一次,在对象创建之后马上执行它,完成初始化操作
3) service方法,只要用户发送请求一次,则执行一次
4) destroy方法也是只执行一次
注意:
init方法在执行的时候&

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值