摘要:过滤器监听器拦截器上一篇,我们讲解了配置及整合方法,不清楚的可以点击了解的两种实现方式通过手动注入实现一个返回的方法,并将该对象注册到中。
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 // 分别标识
最后若本文对你有帮助,望点赞。为了提高大家学习效果,录制了同步的视频课程,还望大家支持视频课程
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/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是一个轻松愉快的过程,忍不住让我多启动几次,先看看效果:(省略了一...
阅读 1369·2019-08-30 12:54
阅读 1847·2019-08-30 11:16
阅读 1589·2019-08-30 10:50
阅读 2423·2019-08-29 16:17
阅读 1247·2019-08-26 12:17
阅读 1360·2019-08-26 10:15
阅读 2373·2019-08-23 18:38
阅读 772·2019-08-23 17:50