日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

Spring Boot 注册 Servlet 的3种方式

發布時間:2025/3/21 javascript 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring Boot 注册 Servlet 的3种方式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、Spring Boot 注冊

Spring Boot 提供了?ServletRegistrationBean,?FilterRegistrationBean,?ServletListenerRegistrationBean?三個類分別用來注冊 Servlet, Filter, Listener,下面是 Servlet 的示例代碼。

import?javax.servlet.http.HttpServlet; import?javax.servlet.http.HttpServletRequest; import?javax.servlet.http.HttpServletResponse; import?java.io.IOException;/***?@author?Java技術棧*/ public?class?RegisterServlet?extends?HttpServlet?{@Overrideprotected?void?service(HttpServletRequest?req,?HttpServletResponse?resp)?throws?IOException?{String?name?=?getServletConfig().getInitParameter("name");String?sex?=?getServletConfig().getInitParameter("sex");resp.getOutputStream().println("name?is?"?+?name);resp.getOutputStream().println("sex?is?"?+?sex);}}@Bean public?ServletRegistrationBean?registerServlet()?{ServletRegistrationBean?servletRegistrationBean?=?new?ServletRegistrationBean(new?RegisterServlet(),?"/registerServlet");servletRegistrationBean.addInitParameter("name",?"javastack");servletRegistrationBean.addInitParameter("sex",?"man");return?servletRegistrationBean; }

二、組件掃描注冊

Servlet 3.0 之前,Servlet、Filter、Listener 這些組件都需要在?web.xml?中進行配置,3.0 之后開始不再需要?web.xml?這個配置文件了,所有的組件都可以通過代碼配置或者注解來達到目的。

如下圖所示,截圖自 Servlet 3.1。

Servlet 3.0 開始提供了這 3 個注解來代替。

@WebServlet?=> 代替 servlet 配置

@WebFilter?=> 代替 filter 配置

@WebListener?=> 代替 listener 配置

配置 Servlet 示例

import?javax.servlet.annotation.WebInitParam; import?javax.servlet.annotation.WebServlet; import?javax.servlet.http.HttpServlet; import?javax.servlet.http.HttpServletRequest; import?javax.servlet.http.HttpServletResponse; import?java.io.IOException;/***?@author?Java技術棧*/ @WebServlet(name?=?"javaServlet",?urlPatterns?=?"/javastack.cn",?asyncSupported?=?true,initParams?=?{@WebInitParam(name?=?"name",?value?=?"javastack"),@WebInitParam(name?=?"sex",?value?=?"man")?}) public?class?JavaServlet?extends?HttpServlet?{@Overrideprotected?void?service(HttpServletRequest?req,?HttpServletResponse?resp)?throws?IOException?{String?name?=?getServletConfig().getInitParameter("name");String?sex?=?getServletConfig().getInitParameter("sex");resp.getOutputStream().println("name?is?"?+?name);resp.getOutputStream().println("sex?is?"?+?sex);}}

配置 Filter 示例

/***?@author?Java技術棧*/ @WebFilter(filterName?=?"javaFilter",?urlPatterns?=?"/*",?initParams?=?{@WebInitParam(name?=?"name",?value?=?"javastack"),@WebInitParam(name?=?"code",?value?=?"123456")?}) public?class?JavaFilter?implements?Filter?{@Overridepublic?void?init(FilterConfig?filterConfig)?throws?ServletException?{System.out.println("java?filter?init.");String?name?=?filterConfig.getInitParameter("name");String?code?=?filterConfig.getInitParameter("code");System.out.println("name?is?"?+?name);System.out.println("code?is?"?+?code);}@Overridepublic?void?doFilter(ServletRequest?request,?ServletResponse?response,?FilterChain?chain)throws?IOException,?ServletException?{System.out.println("java?filter?processing.");chain.doFilter(request,?response);}@Overridepublic?void?destroy()?{System.out.println("java?filter?destroy.");}}

Listener 配置方式類似,上面的示例代碼一看就懂,這里不再詳述。

需要注意的是,為了安全考慮,內嵌服務器不會直接執行 Servlet 3.0 里面的?javax.servlet.ServletContainerInitializer?接口,或者 Spring 中的?org.springframework.web.WebApplicationInitializer?接口,否則會導致終止 Spring Boot 應用。

所以,如果使用的是 Spring Boot 內嵌服務器,需要在配置類上面添加額外的?@ServletComponentScan?注解來開啟 Servlet 組件掃描功能,如果使用的是獨立的服務器,則不需要添加,會使用服務器內部的自動發現機制。

三、動態注冊

如果你想在 Spring Boot 中完成 Servlet、Filter、Listener 的初始化操作,你需要在 Spring 中實現下面這個接口,并注冊為一個 bean。

org.springframework.boot.web.servlet.ServletContextInitializer

ServletContext 提供了幾個動態注冊的方法,如下所示。

以下為動態添加 Servlet 示例代碼。

import?javax.servlet.annotation.WebInitParam; import?javax.servlet.annotation.WebServlet; import?javax.servlet.http.HttpServlet; import?javax.servlet.http.HttpServletRequest; import?javax.servlet.http.HttpServletResponse; import?java.io.IOException;/***?@author?Java技術棧*/ @WebServlet(name?=?"javaServlet",?urlPatterns?=?"/javastack.cn",?asyncSupported?=?true,initParams?=?{@WebInitParam(name?=?"name",?value?=?"javastack"),@WebInitParam(name?=?"sex",?value?=?"man")?}) public?class?JavaServlet?extends?HttpServlet?{@Overrideprotected?void?service(HttpServletRequest?req,?HttpServletResponse?resp)?throws?IOException?{String?name?=?getServletConfig().getInitParameter("name");String?sex?=?getServletConfig().getInitParameter("sex");resp.getOutputStream().println("name?is?"?+?name);resp.getOutputStream().println("sex?is?"?+?sex);}}import?cn.javastack.springbootbestpractice.servlet.InitServlet; import?org.springframework.boot.web.servlet.ServletContextInitializer; import?org.springframework.stereotype.Component;import?javax.servlet.ServletContext; import?javax.servlet.ServletRegistration;/***?@author?Java技術棧*/ @Component public?class?ServletConfig?implements?ServletContextInitializer?{@Overridepublic?void?onStartup(ServletContext?servletContext)?{ServletRegistration?initServlet?=?servletContext.addServlet("initServlet",?InitServlet.class);initServlet.addMapping("/initServlet");initServlet.setInitParameter("name",?"javastack");initServlet.setInitParameter("sex",?"man");}}

總結

本文介紹了在 Spring Boot 下的 3 種注冊 Servlet、Filter、Listener 的方式,大家靈活運用。

總結

以上是生活随笔為你收集整理的Spring Boot 注册 Servlet 的3种方式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。