麻豆黑色丝袜jk制服福利网站-麻豆精品传媒视频观看-麻豆精品传媒一二三区在线视频-麻豆精选传媒4区2021-在线视频99-在线视频a

千鋒教育-做有情懷、有良心、有品質的職業教育機構

手機站
千鋒教育

千鋒學習站 | 隨時隨地免費學

千鋒教育

掃一掃進入千鋒手機站

領取全套視頻
千鋒教育

關注千鋒學習站小程序
隨時隨地免費學習課程

當前位置:首頁  >  技術干貨  > Spring Boot整合Servlet三大組件

Spring Boot整合Servlet三大組件

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

  一. Servlet三大組件

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

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

Spring Boot整合Servlet三大組件

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

  接下來我們就來看看具體的代碼實現吧。

  二. 組件注冊方式整合Servlet

  1.創建自定義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.創建自定義Servlet類

  在chapter05項目中的com.cy.servletComponent包中,我們創建一個繼承了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. 啟動項目進行測試

  項目啟動成功后,在瀏覽器上訪問網址查看數據顯示。

1684312955307.image

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

  1.創建自定義Filter類

  我們可以在com.cy.servletComponent包下創建一個類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類

  打開之前創建的Servlet組件配置類ServletConfig,將該自定義Filter類使用組件注冊方式進行注冊。 

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

  3. 請求測試

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

1684312974325.image

  控制臺會輸出如下結果:

1684312985150.image

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

  1.創建自定義Listener類

  我們可以在com.cy.servletComponent包下創建一個類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類

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

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

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

  3. 執行效果

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

1684313000364.image

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

1684313011268.image

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

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

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

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

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

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

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

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

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

  使用相關注解配置好自定義三大組件后,需在項目主程序啟動類上添加@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工具控制臺左側的[Exit]按鈕關閉當前項目,再次查看控制臺打印效果。

1684313071128.image

  六. 回顧總結

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

聲明:本站稿件版權均屬千鋒教育所有,未經許可不得擅自轉載。
10年以上業內強師集結,手把手帶你蛻變精英
請您保持通訊暢通,專屬學習老師24小時內將與您1V1溝通
免費領取
今日已有369人領取成功
劉同學 138****2860 剛剛成功領取
王同學 131****2015 剛剛成功領取
張同學 133****4652 剛剛成功領取
李同學 135****8607 剛剛成功領取
楊同學 132****5667 剛剛成功領取
岳同學 134****6652 剛剛成功領取
梁同學 157****2950 剛剛成功領取
劉同學 189****1015 剛剛成功領取
張同學 155****4678 剛剛成功領取
鄒同學 139****2907 剛剛成功領取
董同學 138****2867 剛剛成功領取
周同學 136****3602 剛剛成功領取
相關推薦HOT
主站蜘蛛池模板: 国产chinesehd在线观看| 精品国产欧美一区二区| 黄色一极片| 国产成人精品综合在线观看| 中文字幕亚洲一区二区va在线| 国产亚洲婷婷香蕉久久精品| 久久精品一区二区三区不卡| 波多野结衣按摩| 欧美妇乱xxxxx视频| 日日夜夜天天久久| 午夜免费理论片a级| 高h视频网站| 阿娇囗交全套高清视频| 桃子视频在线观看高清免费视频| 亚洲国产精品va在线观看麻豆| 男女交性特一级| 爱搞搞视频| 秋霞日韩一区二区三区在线观看| 啊!摁摁~啊!用力~快点视频免费| 亚洲同性男gay网站在线观看 | 在线观看国产三级| 美女的大胸又黄又www又爽| 中文字幕久久久久| 精品精品国产高清a级毛片| 动漫女同性被吸乳羞羞漫画| 午夜久| 日本私人影院| 波多野结衣无内裤护士| 色列有妖气acg全彩本子| 三男三女换着曰| 亚洲日本va午夜中文字幕一区| 男朋友想吻我腿中间那个部位| 免费v片| 好男人社区神马www在线观看| 波多野给衣一区二区三区| 日韩视频中文字幕| а√天堂资源地址在线官网| 99re热在线观看| 动漫女同性被吸乳羞羞漫画| 免费看a级黄色片| 中文字幕在线播放|