摘要:過濾器監聽器攔截器上一篇,我們講解了配置及整合方法,不清楚的可以點擊了解的兩種實現方式通過手動注入實現一個返回的方法,并將該對象注冊到中。
Spring Boot - Servlet、過濾器、監聽器、攔截器
上一篇,我們講解了spring boot(json,jsp,freemarker)配置及整合方法,不清楚的可以點擊了解
Servlet的兩種實現方式通過@Bean手動注入
實現一個返回ServletRegistrationBean的方法,并將該對象注冊到spring中。這段代碼需要放到spring boot自動掃描的目錄中,建議放到@Configuration標識的類中,進行統一管理
@Bean public ServletRegistrationBean servletRegistrationBean() { return new ServletRegistrationBean(new HelloServlet(),"/xiaohong"); }
通過@WebServlet自動注入
增加注解@ServletComponentScan,開啟servlet掃描
增加注解@WebServlet,標識該類是servlet,并聲明urlPath
@ServletComponentScan @SpringBootApplication public class Start {……}
@WebServlet("/xiaohong") public class HelloServlet extends HttpServlet {……}
示例:HelloServlet.java
package com.wanye.servlet; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; /** * Created by wanye on 2017/5/24. */ @WebServlet("/xiaohong") public class HelloServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println(">>do get<<"); doPost(req, resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println(">>do post<<"); PrintWriter out = resp.getWriter(); out.print("hello @xiaohong"); out.close(); } }過濾器Filter和監聽器Listener
過濾器Filter和監聽器Listener的實現方式與Servlet實現方式一樣,這里列出來區別,大家自己可以嘗試一下。
通過@Bean手動注入
Filter需要實現返回FilterRegistrationBean的方法
Listener需要實現返回ServletListenerRegistrationBean的方法
通過注解自動注入
Filter需要增加注解@WebFilter,標識該類是Filter
Listener需要增加注解@WebListener,標識該類是Listener
攔截器上面講解了Servlet、過濾器、監聽器,細心的同學可以發現,他們都是屬于javax.servlet所提供的Api。
攔截器原理簡單來講是通過動態代理實現,被訪問的目標方法通過代理類(方法)來執行,這樣我們就可以在真正要執行的方法執行前、后做一些處理;通過攔截器這種方式,使得代碼可以進行更高度的抽象。更多攔截器、動態代理的內容,請大家查閱資料了解。
HTTP攔截器在Spring中實現Http攔截器
創建攔截器類并實現 HandlerInterceptor接口,perHandler返回true表示通過攔截
package com.wanye.interceptor; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Created by wanye on 2017/5/24. */ public class HelloInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println(">>interceptor preHandle<<"); return true; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { System.out.println(">>interceptor postHandle請求處理之后進行調用,但是在視圖被渲染之前(Controller方法調用之后)<<"); } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { System.out.println(">>interceptor afterCompletion<<"); } }
創建一個Java類繼承WebMvcConfigurerAdapter,并重寫 addInterceptors 方法,@Configuration
package com.wanye.interceptor; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; /** * Created by wanye on 2017/5/24. */ @Configuration public class HelloConfig extends WebMvcConfigurerAdapter { @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new HelloInterceptor()).addPathPatterns("/**"); } }
實例化攔截器,然后將對像手動添加到攔截器鏈中(在addInterceptors方法中添加)
總結本文講解了注冊Servlet/Filter/Listener的兩種?方式(Servlet/Filter/Listener的概念大家自行查閱資料了解),及攔截器基本原理,并通過注解實現http攔截器,另外本文還有一個疑問:為什么Spring中實現的Http攔截器,無法對我們自定義的servlet請求進行攔截?歡迎大家留言討論。
注解含義@Bean // @Bean明確地指示了產??一個bean的方法,并且交給Spring容器管理
@ServletComponentScan // 當使用@ServletComponentScan掃描Servlet組件時,Servlet、過濾器和監聽器可以是通過@WebServlet、@WebFilter和@WebListener自動注冊
@WebServlet(“/hello")@WebFilter@WebListener // 分別標識
最后若本文對你有幫助,望點贊。為了提高大家學習效果,錄制了同步的視頻課程,還望大家支持視頻課程
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/71139.html
摘要:索引初識過濾器監聽器攔截器靜態資源處理啟動加載日志處理數據庫配置部署最后如果覺得我的文章對您有用,請點贊收藏。您的支持將鼓勵我繼續創作 Spring Boot - 部署Deploy 服務發布Tomcat 修改啟動類,繼承 SpringBootServletInitializer 并重寫 configure 方法 @Override protected SpringApplication...
摘要:靜態資源處理啟動加載日志處理回顧初識過濾器監聽器攔截器我們通過啟動日志,可以發現,默認提供了靜態資源處理。 Spring Boot - 靜態資源處理、啟動加載、日志處理 回顧 Spring Boot-初識 Hello World Spring Boot - Servlet、過濾器、監聽器、攔截器 我們通過啟動日志,可以發現,spring boot 默認提供了靜態資源處理。接下來,我...
摘要:大家自己了解一下的使用方法,我這里就不進行詳細的講述了。啟動方式兩種方式都可以主函數啟動或者驗證訪問頁面,驗證是否輸出了當前時間。為了提高大家學習效果,錄制了同步的視頻課程,還望大家支持視頻課程 Spring Boot - 初識 Hello World 索引 Spring Boot - 初識 Hello World Spring Boot - Servlet、過濾器、監聽器、攔截器 ...
摘要:背景這段時間較忙,有些想念小紅,為了表達我對小紅的思念之情,決定將啟動的研究一下,看看是否能夠自定義,讓我天天能夠看到她。 背景 這段時間較忙,有些想念小紅,為了表達我對小紅的思念之情,決定將spring boot啟動的banner研究一下,看看是否能夠自定義,讓我天天能夠看到她。 展示 經過調研,發現自定義banner是一個輕松愉快的過程,忍不住讓我多啟動幾次,先看看效果:(省略了一...
閱讀 1392·2019-08-30 12:54
閱讀 1878·2019-08-30 11:16
閱讀 1621·2019-08-30 10:50
閱讀 2455·2019-08-29 16:17
閱讀 1275·2019-08-26 12:17
閱讀 1387·2019-08-26 10:15
閱讀 2396·2019-08-23 18:38
閱讀 792·2019-08-23 17:50