Servlet、jsp的生命周期,线程安全,感悟

本文探讨了Servlet和JSP的生命周期,包括加载、实例化、初始化、处理请求和销毁的过程。Servlet的init()、service()、destroy()方法以及JSP的jspInit()、_jspService()、jspDestroy()的覆盖规则被详细阐述。同时,文章指出了ServletContext、HttpSession和HttpServletRequest的作用域线程安全问题,并提供了相应的同步解决方案。
摘要由CSDN通过智能技术生成
在学Servlet、JSP时候,对于servlet什么时候创建实例?什么时候调用init()方法,init()方法有什么作用?service()方法何时调用?如何处理请求?init()、jspInit()、service()、_jspService()、destroy()、jspDestroy()能不能覆盖?ServletContext作用域、HttpSession作用域、HttpServletRequest作用域线程安全吗?非线程安全又如何同步?
        Servlet生命周期:1、容器找到*servlet.class文件,加载类文件Class.forName(),2、调用构造函数实例化,读取web.xml文件,对相关初始化参数<init-param></init-param><context-param></context-param>及各种生命周期事件监听器<listener></listener>进行加载创建键值对引用,3、容器创建ServletConfig对象、ServletContext对象,并分别取得之前创建的键值对引用,4、在调用servlet实例的init()方法,取得对ServletConfig的引用,最终完成初始化,形成一个真正的Servlet。 
        在调用完构造函数后,init()方法之前,servlet实例只是半个真正的Servlet只有用ServletConfig进行init()初始化以后菜式一个真正的Servlet,每个Servlet对应于一个ServletConfig,相当于配置参数之类的。用于配置Servlet。 
        初始化之后,对每一个请求,容器分别新建一个线程用service()进行处理,每个请求对应于一个线程(这很关键,涉及到线程安全) 。处理完之后,容器调用distory()方法销毁。 
        这三个方法都可以覆盖,init()用于初始化连接,destroy()用于释放资源,service()可以覆盖,也可以覆盖doGet(),doPost()等方法,用于处理请求。 
        对于JSP而言,生命周期如下:读取web.xml配置描述文件,等请求到来jsp转化为servlet文件,进行编译成class文件,加载类,构造函数实例化,调用jspInit()初始化。整个过程和servlet差不多,只不过在第一次的时候多了转化为servlet文件、编译成class文件两个步骤。 
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值