上一篇文章中咱們講到了快速搭建Springboot項目以及整合Mybatis,可是在實際的開發中咱們還須要用到不少的東西。後面的文章中咱們會陸續的加入各個知識點,慢慢的豐滿咱們的demo。html
Filter的用法java
咱們先來了解下Filterweb
Filter也稱之爲過濾器,它是Servlet技術中最實用的技術,Web開發人員經過Filter技術,對web服務器管理的全部web資源:例如Jsp, Servlet, 靜態圖片文件或靜態 html 文件等進行攔截,從而實現一些特殊的功能。例如實現URL級別的權限訪問控制、過濾敏感詞彙、壓縮響應信息等一些高級功能。spring
它主要用於對用戶請求進行預處理,也能夠對HttpServletResponse進行後處理。使用Filter的完整流程:Filter對用戶請求進行預處理,接着將請求交給Servlet進行處理並生成響應,最後Filter再對服務器響應進行後處理。springboot
import org.springframework.core.annotation.Order; import javax.servlet.*; import javax.servlet.annotation.WebFilter; import java.io.IOException; /** * 使用@WebFilter註解標註過濾器 * 屬性filterName聲明過濾器的名稱,可選 * 屬性urlPatterns指定要過濾 的URL模式,也可以使用屬性value來聲明.(指定要過濾的URL模式是必選屬性) * @Order(1)控制加載順序 * @author 劉鋮 * @since 2018/4/9 */ @Order(1) //重點 @WebFilter(filterName = "myfilter", urlPatterns = "/*") public class IndexFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException {} @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { System.out.print("================須要過濾器作什麼?=================="); if("2".equals(servletRequest.getParameter("id"))){ servletResponse.getWriter().write("Cannot query the data!"); }else{ filterChain.doFilter(servletRequest,servletResponse); } } @Override public void destroy() {} }
過濾器寫好了該如何使用呢?還須要配置web.xml嗎?服務器
在springboot中使用過濾器不需咱們在去配置web.xml了,那如何讓程序掃描到它呢以下session
import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.web.servlet.ServletComponentScan; /** * 使用 @ServletComponentScan註解後,Servlet、Filter、Listener * 能夠直接經過 @WebServlet、@WebFilter、@WebListener 註解自動註冊,無需其餘代碼。 * @author 劉鋮 * @since 2018-04-09 **/ @SpringBootApplication //重點 @ServletComponentScan public class ABountyNetApplication1 { public static void main(String[] args) { SpringApplication.run(ABountyNetApplication1.class, args); } }
這樣咱們就完成了一個簡單攔截器。ide
重點就是兩個註解 @ServletComponentScan @WebFilter順帶也能夠去了解一下@order網站
Listener的用法url
監聽器用於監聽web應用中某些對象、信息的建立、銷燬、增長,修改,刪除等動做的發生,而後做出相應的響應處理。當範圍對象的狀態發生變化的時候,服務器自動調用監聽器對象中的方法。經常使用於統計在線人數和在線用戶,系統加載時進行信息初始化,統計網站的訪問量等等。
按監聽的對象劃分,能夠分爲
ServletContext對象監聽器
HttpSession對象監聽器
ServletRequest對象監聽器
按監聽的事件劃分
對象自身的建立和銷燬的監聽器
對象中屬性的建立和消除的監聽器
session中的某個對象的狀態變化的監聽器
由於分類比較多咱們只實現一種
import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import javax.servlet.annotation.WebListener; /** * 使用@WebListener註解,實現ServletContextListener接口 * @author 劉鋮 * @since 2018/4/9 */ @WebListener public class IndexListener implements ServletContextListener{ @Override public void contextInitialized(ServletContextEvent servletContextEvent) { System.out.println("ServletContex初始化"); System.out.println(servletContextEvent.getServletContext().getServerInfo()); } @Override public void contextDestroyed(ServletContextEvent servletContextEvent) { System.out.println("ServletContex銷燬"); } }
如何使用呢和過濾器同樣,也不須要在去配置web.xml
重點 @WebListener