首页 > 其他分享 >Servlet生命周期,以及对Servlet开发的改进

Servlet生命周期,以及对Servlet开发的改进

时间:2023-01-10 22:33:54浏览次数:47  
标签:web 生命周期 service 对象 Servlet 方法 改进 服务器 servlet

Servlet

项目结构

--web(项目名称)
	--WEB-INF
		--classes(编译后的java类)
		--lib(存放运行时所需的jar包)
		--web.xml(填写servlet相关信息)
	--html
	--css
	--image

第一个servlet

  1. 在tomcat的webapp目录下创建一个文件,文件名就是项目名

  2. 创建以上目录结构,web.xml文件最好从其他地方复制,不要自己写

  3. 继承Jakarta.servlet.Servlet中的Servlet类

  4. 重写五个方法

    import Jakarta.servlet.Servlet;
    
    public class HelloServlet implemts Servlet( ){
        
    }
    
  5. 在service方法里面实现功能

IDEA 中创建javaweb项目

  • 创建一个空项目
  • 添加一个javase模块
  • 添加web框架支持
  • 项目结构----模块中添加依赖
  • 创建一个类,继承servlet,然后在service方法中实现功能
  • 添加tomcat
  • 然后运行

Servlet对象的生命周期

  • 什么是servlet对象生命周期?
    servlet对象的生命周期表示:一个servlet对象从出生到最后的死亡,整个过程是怎样的。
    • servlet对象什么时候被创建
    • servlet对象什么时候被销毁
    • servlet对象创建了几个?

servlet对象是谁来维护的?

  • servlet对象的创建、对象中方法的调用、对象的销毁,程序员是无法干预的。
  • servlet对象的生命周期是由Tomcat服务器(web Server)全权负责的
  • Tomcat服务器又称为:web容器(web container)。
  • web容器来管理servlet对象的死活

思考:我们自己new的servlet对象受web容器的管理么?

  • 不受
  • web容器创建的servlet对象,这些servlet对象都会被放到一个集合当中(hash map),只有放到这个hash map集合中的servlet才能被web容器管理,自己new的servlet对象不会被web容器管理(自己new的servlet对象不在web容器内)
  • web容器底层应该有一个hash map这样的集合,这个集合当中存储了servlet对象和请求路径之间的关系

服务器在启动的时候servlet对象有没有被创建出来(默认情况下)?

  • 在servlet中提供一个无参数的构造方法,启动服务器时看构造方法是否执行

  • 得出结论,默认情况下,服务器在启动的时候servlet对象并没有被创建

  • 怎么让服务器启动的时候就启动servlet对象?

    • 在servlet标签中加一个标签,在标签中加一个整数,数字越小优先级越高。
  • servlet对象生命周期

    • 默认情况下,服务器启动的时候,servlet对象并没有被实例化

    • 用户发送第一次请求的时候,控制台输出了以下内容

      servlet无参数构造方法执行了
      servlet init 方法执行了
      servlet service 方法执行了
      
    • 由此得出结论

      • 用户在发送第一次请求的时候servlet对象被实例化(构造方法被执行了,并且执行的时无参数构造方法。
      • servlet对象被创建出来之后,Tomcat服务器马上调用了servlet对象的init方法。(init方法在执行的时候,servlet对象已经存在了,已经被创建出来了)
      • init方法执行之后,Tomcat服务器马上调用servlet对象的service方法。
    • 用户继续发送请求,控制台输出以下内容

      servlet service 方法执行了
      
    • 由此得出结论,用户继续发送请求时,servlet对象并没有创建,还是使用之前创建好的servlet对象,直接调用该servlet对象的service方法,这说明:

      • servlet对象是单例的(单实例。但是要注意:servlet对象是单实例的,但是servlet类并不符合单例模式,称为假单例)
      • 无参数构造方法,init方法只在第一次用户发送请求的时候执行。
      • 只要用户发送一次请求,service方法也必然会被toncat服务器调用一次。
    • 关闭服务器时,控制台输出了以下内容

      servlet destory 方法执行了
      
    • 通过以上内容,可以得出以下结论

      • servlet的destory方法只被tomcat调用一次
      • 什么时候被调用?
        • 在服务器关闭的时候
        • 因为服务器关闭的时候要销毁servlet对象的内存
        • 服务器在销毁servlet对象内存之前,tomcat服务器会自动调用servlet对象的destory方法
    • destory方法调用的时候,对象销毁了么?

      • destory方法执行的时候,servlet对象还在,没有被销毁。destory方法执行结束之后,servlet对象的内存才会被tomcat释放。
  • tomcat创建实例时不会传入参数,所以使用的是无参数构造方法

    • 如果编写一个有参数的构造方法,且没有手动编写无参数构造方法,那么服务器就会报错,所以不建议编写构造方法。
    • 所以init方法有了存在的必要,将需要在创建时执行的程序写在init方法里面。
  • init,service,destory三种方法

    • 使用最多的是service方法,service一定要实现,它是处理用户请求的核心
    • init方法很少用,通常是初始化,并且这个初始化操作只需要执行一次,如:初始化数据库连接池、初始化线程池。
    • destory方法也很少使用,通常是资源的关闭。对象马上被销毁了,有什么没保存的保存一下,没关闭的资源,关闭一下。

适配器设计模式

我们编写一个servlet类实现servlet接口时的缺点:我们只需要写一个service方法,其他方法大部分时间都不需要使用。

适配器设计模式Adapter

可以编写一个抽象通用标准的GenericServlet类,在其中重新其他不常用方法,然后抽象service方法,这样以后所有的servlet类都不再去实现Servlet接口了,只需要继承这个通用的GenericServlet类

GenericServlet就是一个适配器。

标签:web,生命周期,service,对象,Servlet,方法,改进,服务器,servlet
From: https://www.cnblogs.com/winterqq/p/17041559.html

相关文章

  • servletContext应用
     配置初始化参数<context-param><param-name>url</param-name><param-value>woshishabi:;</param-value></context-param>获取并输出publ......
  • Activity的生命周期简述
    一、Activity的生命周期简述在讲onStart()和onResume()的区别之前,必须清楚Activity的四种状态:1.Running状态:一个新的Activity的启动入栈后,它在屏幕最前端,处于栈的最顶端,......
  • 第二节:跨平台兼容/条件编译、页面路由(pages.json)、页面通讯(5种)、页面生命周期
    一.        二.        三.         !作       者:Yaopengfei(姚鹏飞)博客地址:http://www.cnblog......
  • 生命周期
    初步认识生命周期的创建和销毁过程生命周期是什么?生命周期中有哪些东西?在我们的组件中,从创建到运行到销毁的阶段叫做生命周期。从我们数据被定义,到渲染到页面上,然后进行......
  • 6.Servlet
    Servlet笔记目录:(https://www.cnblogs.com/wenjie2000/p/16378441.html)视频教程(P94~P98)Servlet是Java提供的一门动态web资源开发技术Servlet是JavaEE规范之一,其......
  • 脚本生命周期
    问题待解决不在脚本中写构造函数Unity脚本生命周期初始阶段Awake()OnEnable()Start()物理阶段FixedUpdate()0.02s游戏逻辑Update()60hzLateUpdate()......
  • ServletContext对象
    1.概念:代表整个web应用,可以和程序的容器(服务器)来通信2.功能:  1.获取MIME类型      *MIME类型:在互联网通信过程中定义的一种文件数据类型        *格式......
  • ServletContext
      publicclassHelloServletextendsHttpServlet{@OverrideprotectedvoiddoGet(HttpServletRequestreq,HttpServletResponseresp)throwsServle......
  • 学习笔记——在IDEA中创建Maven工程之HelloWord;Maven中常见的问题;Maven核心概念之POM
    2023-01-08一、在IDEA中创建Maven工程之HelloWord(1)新建一个Maven工程  最后点击“finish”,完成项目创建(2)在创建的项目下,选中“maven_demo”,右击新建“Module”,选......
  • Spring之bean的七步生命周期
    bean的七步生命周期(1)调用无参数构造方法创造bean实例(2)调用set方法对bean的属性及其他bean的引用属性进行设置(3)把bean实例传递给bean的后置处理器方法postProcessBeforeI......