摘要:過(guò)濾器監(jiān)聽(tīng)器攔截器上一篇,我們講解了配置及整合方法,不清楚的可以點(diǎn)擊了解的兩種實(shí)現(xiàn)方式通過(guò)手動(dòng)注入實(shí)現(xiàn)一個(gè)返回的方法,并將該對(duì)象注冊(cè)到中。
Spring Boot - Servlet、過(guò)濾器、監(jiān)聽(tīng)器、攔截器
上一篇,我們講解了spring boot(json,jsp,freemarker)配置及整合方法,不清楚的可以點(diǎn)擊了解
Servlet的兩種實(shí)現(xiàn)方式通過(guò)@Bean手動(dòng)注入
實(shí)現(xiàn)一個(gè)返回ServletRegistrationBean的方法,并將該對(duì)象注冊(cè)到spring中。這段代碼需要放到spring boot自動(dòng)掃描的目錄中,建議放到@Configuration標(biāo)識(shí)的類中,進(jìn)行統(tǒng)一管理
@Bean public ServletRegistrationBean servletRegistrationBean() { return new ServletRegistrationBean(new HelloServlet(),"/xiaohong"); }
通過(guò)@WebServlet自動(dòng)注入
增加注解@ServletComponentScan,開(kāi)啟servlet掃描
增加注解@WebServlet,標(biāo)識(shí)該類是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(); } }過(guò)濾器Filter和監(jiān)聽(tīng)器Listener
過(guò)濾器Filter和監(jiān)聽(tīng)器Listener的實(shí)現(xiàn)方式與Servlet實(shí)現(xiàn)方式一樣,這里列出來(lái)區(qū)別,大家自己可以嘗試一下。
通過(guò)@Bean手動(dòng)注入
Filter需要實(shí)現(xiàn)返回FilterRegistrationBean的方法
Listener需要實(shí)現(xiàn)返回ServletListenerRegistrationBean的方法
通過(guò)注解自動(dòng)注入
Filter需要增加注解@WebFilter,標(biāo)識(shí)該類是Filter
Listener需要增加注解@WebListener,標(biāo)識(shí)該類是Listener
攔截器上面講解了Servlet、過(guò)濾器、監(jiān)聽(tīng)器,細(xì)心的同學(xué)可以發(fā)現(xiàn),他們都是屬于javax.servlet所提供的Api。
攔截器原理簡(jiǎn)單來(lái)講是通過(guò)動(dòng)態(tài)代理實(shí)現(xiàn),被訪問(wèn)的目標(biāo)方法通過(guò)代理類(方法)來(lái)執(zhí)行,這樣我們就可以在真正要執(zhí)行的方法執(zhí)行前、后做一些處理;通過(guò)攔截器這種方式,使得代碼可以進(jìn)行更高度的抽象。更多攔截器、動(dòng)態(tài)代理的內(nèi)容,請(qǐng)大家查閱資料了解。
HTTP攔截器在Spring中實(shí)現(xiàn)Http攔截器
創(chuàng)建攔截器類并實(shí)現(xiàn) HandlerInterceptor接口,perHandler返回true表示通過(guò)攔截
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請(qǐng)求處理之后進(jìn)行調(diào)用,但是在視圖被渲染之前(Controller方法調(diào)用之后)<<"); } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { System.out.println(">>interceptor afterCompletion<<"); } }
創(chuàng)建一個(gè)Java類繼承WebMvcConfigurerAdapter,并重寫(xiě) 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("/**"); } }
實(shí)例化攔截器,然后將對(duì)像手動(dòng)添加到攔截器鏈中(在addInterceptors方法中添加)
總結(jié)本文講解了注冊(cè)Servlet/Filter/Listener的兩種?方式(Servlet/Filter/Listener的概念大家自行查閱資料了解),及攔截器基本原理,并通過(guò)注解實(shí)現(xiàn)http攔截器,另外本文還有一個(gè)疑問(wèn):為什么Spring中實(shí)現(xiàn)的Http攔截器,無(wú)法對(duì)我們自定義的servlet請(qǐng)求進(jìn)行攔截?歡迎大家留言討論。
注解含義@Bean // @Bean明確地指示了產(chǎn)??一個(gè)bean的方法,并且交給Spring容器管理
@ServletComponentScan // 當(dāng)使用@ServletComponentScan掃描Servlet組件時(shí),Servlet、過(guò)濾器和監(jiān)聽(tīng)器可以是通過(guò)@WebServlet、@WebFilter和@WebListener自動(dòng)注冊(cè)
@WebServlet(“/hello")@WebFilter@WebListener // 分別標(biāo)識(shí)
最后若本文對(duì)你有幫助,望點(diǎn)贊。為了提高大家學(xué)習(xí)效果,錄制了同步的視頻課程,還望大家支持視頻課程
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/71139.html
摘要:索引初識(shí)過(guò)濾器監(jiān)聽(tīng)器攔截器靜態(tài)資源處理啟動(dòng)加載日志處理數(shù)據(jù)庫(kù)配置部署最后如果覺(jué)得我的文章對(duì)您有用,請(qǐng)點(diǎn)贊收藏。您的支持將鼓勵(lì)我繼續(xù)創(chuàng)作 Spring Boot - 部署Deploy 服務(wù)發(fā)布Tomcat 修改啟動(dòng)類,繼承 SpringBootServletInitializer 并重寫(xiě) configure 方法 @Override protected SpringApplication...
摘要:靜態(tài)資源處理啟動(dòng)加載日志處理回顧初識(shí)過(guò)濾器監(jiān)聽(tīng)器攔截器我們通過(guò)啟動(dòng)日志,可以發(fā)現(xiàn),默認(rèn)提供了靜態(tài)資源處理。 Spring Boot - 靜態(tài)資源處理、啟動(dòng)加載、日志處理 回顧 Spring Boot-初識(shí) Hello World Spring Boot - Servlet、過(guò)濾器、監(jiān)聽(tīng)器、攔截器 我們通過(guò)啟動(dòng)日志,可以發(fā)現(xiàn),spring boot 默認(rèn)提供了靜態(tài)資源處理。接下來(lái),我...
摘要:大家自己了解一下的使用方法,我這里就不進(jìn)行詳細(xì)的講述了。啟動(dòng)方式兩種方式都可以主函數(shù)啟動(dòng)或者驗(yàn)證訪問(wèn)頁(yè)面,驗(yàn)證是否輸出了當(dāng)前時(shí)間。為了提高大家學(xué)習(xí)效果,錄制了同步的視頻課程,還望大家支持視頻課程 Spring Boot - 初識(shí) Hello World 索引 Spring Boot - 初識(shí) Hello World Spring Boot - Servlet、過(guò)濾器、監(jiān)聽(tīng)器、攔截器 ...
摘要:背景這段時(shí)間較忙,有些想念小紅,為了表達(dá)我對(duì)小紅的思念之情,決定將啟動(dòng)的研究一下,看看是否能夠自定義,讓我天天能夠看到她。 背景 這段時(shí)間較忙,有些想念小紅,為了表達(dá)我對(duì)小紅的思念之情,決定將spring boot啟動(dòng)的banner研究一下,看看是否能夠自定義,讓我天天能夠看到她。 展示 經(jīng)過(guò)調(diào)研,發(fā)現(xiàn)自定義banner是一個(gè)輕松愉快的過(guò)程,忍不住讓我多啟動(dòng)幾次,先看看效果:(省略了一...
閱讀 1391·2019-08-30 12:54
閱讀 1877·2019-08-30 11:16
閱讀 1620·2019-08-30 10:50
閱讀 2454·2019-08-29 16:17
閱讀 1273·2019-08-26 12:17
閱讀 1385·2019-08-26 10:15
閱讀 2393·2019-08-23 18:38
閱讀 791·2019-08-23 17:50