91aaa在线国内观看,亚洲AV午夜福利精品一区二区,久久偷拍人视频,久久播这里有免费视播

<strong id="fvuar"></strong>

  • <sub id="fvuar"><dl id="fvuar"><em id="fvuar"></em></dl></sub>

    1. 千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機(jī)構(gòu)

      手機(jī)站
      千鋒教育

      千鋒學(xué)習(xí)站 | 隨時(shí)隨地免費(fèi)學(xué)

      千鋒教育

      掃一掃進(jìn)入千鋒手機(jī)站

      領(lǐng)取全套視頻
      千鋒教育

      關(guān)注千鋒學(xué)習(xí)站小程序
      隨時(shí)隨地免費(fèi)學(xué)習(xí)課程

      當(dāng)前位置:首頁  >  技術(shù)干貨  > Spring Boot整合Servlet三大組件

      Spring Boot整合Servlet三大組件

      來源:千鋒教育
      發(fā)布人:zyh
      時(shí)間: 2023-06-12 17:06:00 1686560760

        一. Servlet三大組件

        不知道各位小伙伴,是否還記得Servlet、Filter、Listener三大組件的知識(shí)點(diǎn)?如果你忘記了,趕緊翻開你的小本本復(fù)習(xí)回顧一下吧。今天小編會(huì)給大家介紹如何在Spring Boot中整合Servlet三大組件,快來看看吧。

        我們在進(jìn)行Servlet開發(fā)時(shí),通常首先自定義Servlet、Filter、Listener三大組件,然后在文件web.xm中進(jìn)行配置。而Spring Boot使用的是內(nèi)嵌式Servlet容器,并沒有提供外部配置文件web.xml,那么Spring Boot又該如何整合Servlet的相關(guān)組件呢?其實(shí)Spring Boot給我們提供了組件注冊和路徑掃描兩種方式,來整合Servlet三大組件。

      Spring Boot整合Servlet三大組件

        在Spring Boot中,當(dāng)我們使用組件注冊方式整合內(nèi)嵌Servlet容器的Servlet、Filter、Listener三大組件時(shí),只需將這些自定義組件通過ServletRegistrationBean、FilterRegistrationBean、ServletListenerRegistrationBean類注冊到容器中即可。

        接下來我們就來看看具體的代碼實(shí)現(xiàn)吧。

        二. 組件注冊方式整合Servlet

        1.創(chuàng)建自定義Servlet類

      package com.cy.servletComponent;
      import org.springframework.stereotype.Component;
      import javax.servlet.ServletException;
      import javax.servlet.http.HttpServlet;
      import javax.servlet.http.HttpServletRequest;
      import javax.servlet.http.HttpServletResponse;
      import java.io.IOException;
      /** 自定義Servlet類 */
      @Component
      public class MyServlet extends HttpServlet {
      @Override
      protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
      this.doPost(req, resp);
      }

      protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
      resp.getWriter().write("Hello MyServlet");
      }
      }

            2.創(chuàng)建自定義Servlet類

        在chapter05項(xiàng)目中的com.cy.servletComponent包中,我們創(chuàng)建一個(gè)繼承了HttpServlet的類MySevlet。  

      package com.cy.config;
      import com.cy.servletComponent.MyServlet;
      import org.springframework.boot.web.servlet.ServletRegistrationBean;
      import org.springframework.context.annotation.Bean;
      import org.springframework.context.annotation.Configuration;

      /** 嵌入式Servlet容器三大組件配置 /
      public class ServletConfig {
      /* 注冊Servlet組件 */
      public ServletRegistrationBean getServlet(MyServlet myServlet) {
      ServletRegistrationBean registrationBean = new ServletRegistrationBean(myServlet, "/myServlet");
      return registrationBean;
      }
      }

        3. 啟動(dòng)項(xiàng)目進(jìn)行測試

        項(xiàng)目啟動(dòng)成功后,在瀏覽器上訪問網(wǎng)址查看數(shù)據(jù)顯示。

      1684312955307.image

        三. 使用組件注冊方式整合Filter

        1.創(chuàng)建自定義Filter類

        我們可以在com.cy.servletComponent包下創(chuàng)建一個(gè)類MyFilter。

      package com.cy.servletComponent;
      import org.springframework.stereotype.Component;
      import javax.servlet.*;
      import java.io.IOException;
      /** 自定義Filter類 */
      public class MyFilter implements Filter {
      public void init(FilterConfig filterConfig) throws ServletException {
      }

      public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
      System.out.println("Hello Filter");
      filterChain.doFilter(servletRequest, servletResponse);
      }

      public void destroy() {
      }
      }

        2. 向Servlet組件配置類注冊自定義Filter類

        打開之前創(chuàng)建的Servlet組件配置類ServletConfig,將該自定義Filter類使用組件注冊方式進(jìn)行注冊。 

      /** 注冊Filter組件 */
      @Bean
      public FilterRegistrationBean getFilter(MyFilter myFilter) {
      FilterRegistrationBean registrationBean = new FilterRegistrationBean(myFilter);
      registrationBean.setUrlPatterns(Arrays.asList("/myFilter", "/toLoginPage"));
      return registrationBean;
      }

        3. 請求測試

        項(xiàng)目啟動(dòng)成功后,在瀏覽器上訪問以下網(wǎng)址查看控制臺(tái)打印效果(這里由于我們沒有編寫對應(yīng)路徑的請求處理方法,所以瀏覽器會(huì)現(xiàn)404錯(cuò)誤頁面,這里重點(diǎn)關(guān)注控制臺(tái)即可)。

      1684312974325.image

        控制臺(tái)會(huì)輸出如下結(jié)果:

      1684312985150.image

        四. 使用組件注冊方式整合Listener

        1.創(chuàng)建自定義Listener類

        我們可以在com.cy.servletComponent包下創(chuàng)建一個(gè)類MyListener。  

      package com.cy.servletComponent;
      import org.springframework.stereotype.Component;
      import javax.servlet.ServletContextEvent;
      import javax.servlet.ServletContextListener;
      /** 自定義Listener類 */
      public class MyListener implements ServletContextListener {
      public void contextInitialized(ServletContextEvent sce) {
      System.out.println("contextInitialized()...");
      }

      public void contextDestroyed(ServletContextEvent sce) {
      System.out.println("contextDestroyed()...");
      }
      }

        2. 向Servlet組件配置類注冊自定義Listener類

        我們可以打開之前創(chuàng)建的Servlet組件配置類ServletConfig,將該自定義Listener類使用組件注冊方式進(jìn)行注冊。 

      /** 注冊Listener組件 */
      public ServletListenerRegistrationBean getListener(MyListener myListener) {
      ServletListenerRegistrationBean registrationBean = new ServletListenerRegistrationBean(myListener);
      return registrationBean;
      }

        需要說明的是,Servlet容器提供了很多Listener接口,例如ServletRequestListener、HttpSessionListener、ServletContextListener 等,我們在自定義Listener類時(shí)要根據(jù)自身需求選擇實(shí)現(xiàn)對應(yīng)接口即可。

        3. 執(zhí)行效果

        完成自定義Listener組件注冊后啟動(dòng)項(xiàng)目,項(xiàng)目啟動(dòng)成功后查看控制臺(tái)打印效果。

      1684313000364.image

        單擊IDEA工具控制臺(tái)左側(cè)的[Exit]按鈕,就可以關(guān)閉當(dāng)前項(xiàng)目。注意,如果我們直接單擊紅色按鈕會(huì)強(qiáng)制關(guān)閉程序,瀏覽器就無法打印關(guān)閉監(jiān)聽信息,再次查看控制臺(tái)打印效果。

      1684313011268.image

        將自定義的Servlet組件配置類ServletConfig全部注釋并重啟項(xiàng)目后,自定義的Servlet、Filter、Listener組件仍然生效。出現(xiàn)這種情況的主要原因是:嵌入式Servlet容器對Servlet、Filter、Listener組件進(jìn)行了自動(dòng)化識(shí)別和配置,而自定義的Servlet、Filter、Listener都繼承/實(shí)現(xiàn)了對應(yīng)的類/接口,同時(shí)自定義的Servlet、Filter、Listener組件都使用了@Component注解,這些組件會(huì)被自動(dòng)掃描為Spring組件。

        使用ServletRegistrationBean、FilterRegistrationBean、ServletListenerRegistrationBean組件組裝配置的根本目的是對一些請求路徑和參數(shù)進(jìn)行初始化設(shè)置和組裝。假設(shè)沒有組件注冊類,那么自定義Servlet雖然生效,但無法確定是哪個(gè)訪問路徑生效。自定義的Filter會(huì)對所有的請求都進(jìn)行過濾,不會(huì)出現(xiàn)選擇性過濾的情況。而自定義的Listener則沒有太大影響,因?yàn)槎ㄖ圃摻M件基本不需要設(shè)置什么參數(shù)。

        五. 路徑掃描整合Servlet三大組件

        在Spring Boot中,使用路徑掃描的方式整合內(nèi)嵌式Servlet 容器的Seviet Fiter 、Lste三大組件時(shí),首先需要在自定義組件上分別添加WebSevle. @WebFiter和Weblistene注解進(jìn)行聲明,并配置相關(guān)注解屬性,然后在項(xiàng)目主程序啟動(dòng)類上使用@SerletComponentScan注解開啟組件掃描即可。

        1.使用路徑掃描方式整合Servlet、Filter、Listener。

        為了簡化操作,在上小節(jié)自定義組件的基礎(chǔ)上,我們使用路徑掃描的方式來實(shí)現(xiàn)Servlet容器的Servlet、Filter、Listener三大組件的整合。

        為了避免與之前編寫的使用組件注冊的方式相互干擾,先將之前自定義的Servlet組件配置類ServletConfig全部注釋掉,同時(shí)注釋掉自定義Servlet、Filter、Listener三大組件類上的@Component注解。

        注釋掉自定義MyServlet組件類上的@Component注解,在MyServlet組件中使用@WebServlet注解聲明并配置相關(guān)屬性。 

      /** 自定義Servlet類 /
      //@Component
      @WebServlet("/annotationServlet")
      public class MyServlet extends HttpServlet {
      // ...
      }
      然后注釋掉自定義MyFilter組件類上的@Component注解,在MyFilter組件中使用@WebFilter注解聲明并配置相關(guān)屬性。
      /* 自定義Filter類 /
      //@Component
      @WebFilter(value = {"/annotationLogin", "/annotationMyFilter"})
      public class MyFilter implements Filter {
      // ...
      }
      注釋掉自定義MyListener組件類上的@Component注解,在MyListener組件中使用@WebListener注解聲明并配置相關(guān)屬性。
      /* 自定義Listener類 */
      //@Component
      @WebListener
      public class MyListener implements ServletContextListener {
      // ...
      }

        使用相關(guān)注解配置好自定義三大組件后,需在項(xiàng)目主程序啟動(dòng)類上添加@ServletComponentScan注解,開啟基于注解方式的Servlet組件掃描支持。  

      package com.cy;
      import org.springframework.boot.SpringApplication;
      import org.springframework.boot.autoconfigure.SpringBootApplication;
      import org.springframework.boot.web.servlet.ServletComponentScan;
      @ServletComponentScan // 開啟基于注解方式的Servlet組件掃描支持
      @SpringBootApplication
      public class Chapter05Application {
      public static void main(String[] args) {
      SpringApplication.run(Chapter05Application.class, args);
      }
      }

        2.效果測試

        啟動(dòng)項(xiàng)目,項(xiàng)目啟動(dòng)成功后查看控制臺(tái)打印效果。

      1684313030633.image

        然后我們在瀏覽器上進(jìn)行測試。

      1684313047724.image

        接著在瀏覽器上查看控制臺(tái)打印效果。

      1684313058518.image

        單擊IDEA工具控制臺(tái)左側(cè)的[Exit]按鈕關(guān)閉當(dāng)前項(xiàng)目,再次查看控制臺(tái)打印效果。

      1684313071128.image

        六. 回顧總結(jié)

        關(guān)于Spring Boot整合Servlet三大組件,小編就給大家分享完了。首先,小編給大家介紹了SpringBoot框架整合Servlet、Filter和Listener三大核心組件;然后介紹了通過SpringBoot路徑掃描整合Servlet三大組件的實(shí)現(xiàn)方式;最后我們通過功能測試驗(yàn)證是否整合成功。

      聲明:本站稿件版權(quán)均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
      10年以上業(yè)內(nèi)強(qiáng)師集結(jié),手把手帶你蛻變精英
      請您保持通訊暢通,專屬學(xué)習(xí)老師24小時(shí)內(nèi)將與您1V1溝通
      免費(fèi)領(lǐng)取
      今日已有369人領(lǐng)取成功
      劉同學(xué) 138****2860 剛剛成功領(lǐng)取
      王同學(xué) 131****2015 剛剛成功領(lǐng)取
      張同學(xué) 133****4652 剛剛成功領(lǐng)取
      李同學(xué) 135****8607 剛剛成功領(lǐng)取
      楊同學(xué) 132****5667 剛剛成功領(lǐng)取
      岳同學(xué) 134****6652 剛剛成功領(lǐng)取
      梁同學(xué) 157****2950 剛剛成功領(lǐng)取
      劉同學(xué) 189****1015 剛剛成功領(lǐng)取
      張同學(xué) 155****4678 剛剛成功領(lǐng)取
      鄒同學(xué) 139****2907 剛剛成功領(lǐng)取
      董同學(xué) 138****2867 剛剛成功領(lǐng)取
      周同學(xué) 136****3602 剛剛成功領(lǐng)取
      相關(guān)推薦HOT
      PUE是什么?

      一、PUE是什么PUE,即功耗比(Power Usage Effectiveness),是數(shù)據(jù)中心的能源效率指標(biāo)。它是數(shù)據(jù)中心總功耗與設(shè)備功耗的比值,用于評估數(shù)據(jù)中...詳情>>

      2023-10-15 07:13:07
      graph cut和graph cuts有什么區(qū)別?

      1.語境不同graph cut”通常在描述一個(gè)操作時(shí)使用,比如”perform a graph cut”,它指的是在圖中找到一個(gè)切割,將圖劃分為兩個(gè)...詳情>>

      2023-10-15 07:02:16
      什么是雙機(jī)熱備?

      一、雙機(jī)熱備的原理雙機(jī)熱備是指在系統(tǒng)中配置兩臺(tái)服務(wù)器(主服務(wù)器和備份服務(wù)器),兩者通過高速網(wǎng)絡(luò)連接進(jìn)行實(shí)時(shí)數(shù)據(jù)同步和狀態(tài)同步。主服務(wù)器...詳情>>

      2023-10-15 06:37:02
      偏最小二乘支持向量機(jī)和支持向量機(jī)回歸的區(qū)別是什么?

      1.模型構(gòu)建的理論基礎(chǔ)不同支持向量機(jī)回歸(SVR)基于統(tǒng)計(jì)學(xué)習(xí)理論,其主要思想是找到一個(gè)超平面,使得大部分?jǐn)?shù)據(jù)點(diǎn)都在這個(gè)超平面的一定范圍內(nèi),...詳情>>

      2023-10-15 06:30:45
      VAE、GAN和transformer有什么區(qū)別?

      1.模型結(jié)構(gòu)不同VAE(變分自編碼器)是一種生成模型,其基于概率圖模型和自編碼器,能夠?qū)W習(xí)數(shù)據(jù)的潛在分布。GAN(生成對抗網(wǎng)絡(luò))同樣是一種生成...詳情>>

      2023-10-15 06:10:12