最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaWeb Servlet生命周期細(xì)枝末節(jié)處深究

 更新時(shí)間:2022年10月09日 17:01:27   作者:知奕奕  
Servlet指在服務(wù)器端執(zhí)行的一段Java代碼,可以接收用戶的請(qǐng)求和返回給用戶響應(yīng)結(jié)果,下面這篇文章主要給大家介紹了關(guān)于JavaWeb.servlet生命周期的相關(guān)資料,需要的朋友可以參考下

生命周期速覽

優(yōu)先級(jí)

servlet 的聲明周期由 tomcat 服務(wù)器自行管轄,程序員無(wú)法插手;

只要沒有通過 url 訪問 servlet,那他就永遠(yuǎn)不會(huì)先行實(shí)例化;

除非我們通過在 web.xml 的 servlet 標(biāo)簽下加上以下標(biāo)簽,即可立即實(shí)例化:

</load-on-startup/>

該標(biāo)簽內(nèi)也可以填寫整數(shù),整數(shù)越小表示優(yōu)先級(jí)越高:

<load-on-startup>1</load-on-startup>

servlet生命周期完整過程

默認(rèn)情況,服務(wù)器啟動(dòng)后 servlet 對(duì)象不會(huì)立刻初始化

當(dāng)用戶發(fā)送第一次請(qǐng)求時(shí):

  • 執(zhí)行 servlet 無(wú)參構(gòu)造
  • tomcat 調(diào)用 servlet 的 init 方法
  • tomcat 繼續(xù)調(diào)用 service 方法

當(dāng)用戶第二次乃至之后多次請(qǐng)求時(shí):

因?yàn)?servlet 是單例的,所以不會(huì)再實(shí)例化新的 servlet 對(duì)象;

即 init 方法僅執(zhí)行一次,而 service 會(huì)在每次調(diào)用時(shí)執(zhí)行一次;

servlet 所有核心方法解析

無(wú)參構(gòu)造方法

首次實(shí)例化 servlet 的時(shí)候第一個(gè)調(diào)用的構(gòu)造方法!

每個(gè) servlet 都必須有一個(gè)無(wú)參構(gòu)造方法,且不能存在有參構(gòu)造方法!??!

servlet 規(guī)定,不建議隨意增刪構(gòu)造方法!

init

init 僅會(huì)在首次實(shí)例化 servlet 的時(shí)候執(zhí)行一次;

service

處理用戶請(qǐng)求的方法;

每次調(diào)用 servlet 都會(huì)執(zhí)行一次;

destroy

servlet 銷毀前(注意是銷毀前?。。。﹫?zhí)行的方法;

僅執(zhí)行一次

適配器模式去除冗余接口

因?yàn)樵谝粋€(gè) servlet 中,最常用的接口實(shí)際上就只有 init 和 service 倆,故需要隱去其他不常用的接口來保證代碼的整潔度;

解決方式:構(gòu)造一個(gè)通用的抽象類 NormalServlet,并設(shè)置僅 service 為抽象方法,此時(shí)所有繼承該抽象類的子類就近需要實(shí)現(xiàn)唯一的 service 抽象方法了!

代碼清單:NormalServlet.java

package com.zhiyiyi.javaweb.servlet;
import jakarta.servlet.*;
import java.io.IOException;
// 請(qǐng)注意此類為抽象類
public abstract class NormalServlet implements Servlet {
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
    }
    @Override
    public ServletConfig getServletConfig() {
        return null;
    }
    // 僅設(shè)置service方法為一個(gè)抽象方法
    @Override
    public abstract void service(ServletRequest servletRequest, ServletResponse servletResponse)
            throws ServletException, IOException;
    @Override
    public String getServletInfo() {
        return null;
    }
    @Override
    public void destroy() {
    }
}

代碼清單:CServlet.java

package com.zhiyiyi.javaweb.servlet;
import jakarta.servlet.ServletException;
import jakarta.servlet.ServletRequest;
import jakarta.servlet.ServletResponse;
import java.io.IOException;
public class CServlet extends NormalServlet{
    // 可見,目前就近需要實(shí)現(xiàn)唯一的service了,代碼簡(jiǎn)潔了許多?。。?
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
    }
}

這還沒完,我們需要再次對(duì) NormalServlet 進(jìn)行些許優(yōu)化,好讓子類能夠獲取父類的 ServletConfig 對(duì)象

首先聲明一個(gè)私有的 ServletConfig 對(duì)象,之后于 init 方法內(nèi)進(jìn)行實(shí)例化;

之后子類就可以通過調(diào)用父類中的 getServletConfig 方法來獲取 ServletConfig 對(duì)象了!?。?/p>

private ServletConfig config;
@Override
public void init(ServletConfig servletConfig) throws ServletException {
    this.config = servletConfig;
}
@Override
public ServletConfig getServletConfig() {
    return config;
}

GenericServlet.java

這個(gè)玩意是 servlet 提供的官方版本,用來替換我們剛剛編寫的 NormalServlet 的;

它的功能更加齊全,且能應(yīng)對(duì)子類需要重寫 init 方法的需求;

以后我們編寫 servlet 只需要繼承 GenericServlet 就好了;

到此這篇關(guān)于JavaWeb Servlet生命周期細(xì)枝末節(jié)處深究的文章就介紹到這了,更多相關(guān)JavaWeb Servlet 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • springboot實(shí)現(xiàn)簡(jiǎn)單的消息對(duì)話的示例代碼

    springboot實(shí)現(xiàn)簡(jiǎn)單的消息對(duì)話的示例代碼

    本文主要介紹了springboot實(shí)現(xiàn)簡(jiǎn)單的消息對(duì)話的示例代碼,可以使用WebSocket技術(shù),WebSocket是一種在客戶端和服務(wù)器之間提供實(shí)時(shí)雙向通信的協(xié)議,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-09-09
  • SpringBoot任意版本集成Swagger各種版本的操作指南

    SpringBoot任意版本集成Swagger各種版本的操作指南

    在學(xué)習(xí)Swagger生成API文檔的時(shí)候經(jīng)常會(huì)遇到問題,而目前市面上大部分技術(shù)分享者的SpringBoot版本并沒和我們的同步,導(dǎo)致一些一模一樣的代碼,在我們的項(xiàng)目上卻無(wú)法使用,這是一個(gè)經(jīng)常性的問題,本文章就旨在和大家搞定SpringBoot任意版本集成Swagger各種版本
    2024-07-07
  • SpringBoot Controller中的常用注解

    SpringBoot Controller中的常用注解

    這篇文章主要介紹了SpringBoot Controller中的常用注解,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-09-09
  • java中fork-join的原理解析

    java中fork-join的原理解析

    Fork/Join框架是Java7提供用于并行執(zhí)行任務(wù)的框架,是一個(gè)把大任務(wù)分割成若干個(gè)小任務(wù),今天通過本文給大家分享java中fork join原理,感興趣的朋友一起看看吧
    2021-04-04
  • Spring解決循環(huán)依賴問題的四種方法匯總

    Spring解決循環(huán)依賴問題的四種方法匯總

    這篇文章主要介紹了Spring解決循環(huán)依賴問題的四種方法匯總,本文給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2024-07-07
  • Eclipse搭建spring開發(fā)環(huán)境圖文教程(推薦)

    Eclipse搭建spring開發(fā)環(huán)境圖文教程(推薦)

    下面小編就為大家?guī)硪黄狤clipse搭建spring開發(fā)環(huán)境圖文教程(推薦)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-07-07
  • idea使用jclasslib插件查看字節(jié)碼

    idea使用jclasslib插件查看字節(jié)碼

    這篇文章主要為大家介紹了idea使用jclasslib插件查看字節(jié)碼,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • java開發(fā)web前端cookie session及token會(huì)話機(jī)制詳解

    java開發(fā)web前端cookie session及token會(huì)話機(jī)制詳解

    如果把人體比作一個(gè)web系統(tǒng)的話,cookie、session和token就好像人體的經(jīng)絡(luò)和血管一樣,而web系統(tǒng)中的數(shù)據(jù),就好像人體的血液一樣。血液依靠著血管在人體內(nèi)流動(dòng),就如數(shù)據(jù)根據(jù)cookie和session機(jī)制在web系統(tǒng)中流動(dòng)一樣
    2021-10-10
  • Java的代理模式你真的了解嗎

    Java的代理模式你真的了解嗎

    這篇文章主要為大家詳細(xì)介紹了Java的代理模式,結(jié)構(gòu)型模式主要總結(jié)了一些類或?qū)ο蠼M合在一起的經(jīng)典結(jié)構(gòu),這些經(jīng)典的結(jié)構(gòu)可以解決特定應(yīng)用場(chǎng)景的問題,包括:代理模式、橋接模式、裝飾器模式、適配器模式、門面模式、組合模式、享元模式
    2022-03-03
  • MyBatis的核心配置文件以及映射文件

    MyBatis的核心配置文件以及映射文件

    這篇文章主要介紹了MyBatis的核心配置文件以及映射文件,Mybatis它是一款半自動(dòng)的ORM持久層框架,具有較高的SQL靈活性,支持高級(jí)映射(一對(duì)一,一對(duì)多),動(dòng)態(tài)SQL,延遲加載和緩存等特性,但它的數(shù)據(jù)庫(kù)無(wú)關(guān)性較低,需要的朋友可以參考下
    2023-05-05

最新評(píng)論

金坛市| 久治县| 工布江达县| 丘北县| 丽江市| 冕宁县| 安泽县| 清远市| 大庆市| 卢氏县| 安新县| 桃源县| 双柏县| 鹿泉市| 永安市| 清水县| 雷波县| 镇远县| 黎平县| 溆浦县| 靖西县| 镇巴县| 特克斯县| 溧水县| 光泽县| 义乌市| 灵丘县| 平安县| 吴桥县| 崇州市| 保山市| 营山县| 阳春市| 贵溪市| 论坛| 雷波县| 永福县| 铜陵市| 满洲里市| 宁南县| 河间市|