国产睡熟迷奷白丝护士系列精品,中文色字幕网站,免费h网站在线观看的,亚洲开心激情在线

      <sup id="hb9fh"></sup>
          1. 千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機構(gòu)

            手機站
            千鋒教育

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

            千鋒教育

            掃一掃進入千鋒手機站

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

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

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

            Spring Boot整合Servlet三大組件

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

              一. Servlet三大組件

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

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

            Spring Boot整合Servlet三大組件

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

              接下來我們就來看看具體的代碼實現(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項目中的com.cy.servletComponent包中,我們創(chuàng)建一個繼承了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. 啟動項目進行測試

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

            1684312955307.image

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

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

              我們可以在com.cy.servletComponent包下創(chuàng)建一個類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類使用組件注冊方式進行注冊。 

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

              3. 請求測試

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

            1684312974325.image

              控制臺會輸出如下結(jié)果:

            1684312985150.image

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

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

              我們可以在com.cy.servletComponent包下創(chuàng)建一個類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類使用組件注冊方式進行注冊。 

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

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

              3. 執(zhí)行效果

              完成自定義Listener組件注冊后啟動項目,項目啟動成功后查看控制臺打印效果。

            1684313000364.image

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

            1684313011268.image

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

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

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

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

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

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

              為了避免與之前編寫的使用組件注冊的方式相互干擾,先將之前自定義的Servlet組件配置類ServletConfig全部注釋掉,同時注釋掉自定義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)注解配置好自定義三大組件后,需在項目主程序啟動類上添加@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.效果測試

              啟動項目,項目啟動成功后查看控制臺打印效果。

            1684313030633.image

              然后我們在瀏覽器上進行測試。

            1684313047724.image

              接著在瀏覽器上查看控制臺打印效果。

            1684313058518.image

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

            1684313071128.image

              六. 回顧總結(jié)

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

            聲明:本站稿件版權(quán)均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
            10年以上業(yè)內(nèi)強師集結(jié),手把手帶你蛻變精英
            請您保持通訊暢通,專屬學(xué)習(xí)老師24小時內(nèi)將與您1V1溝通
            免費領(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”通常在描述一個操作時使用,比如”perform a graph cut”,它指的是在圖中找到一個切割,將圖劃分為兩個...詳情>>

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

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

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

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