Spring Boot 编写Servlet、Filter、Listener、Interceptor的方法

在编写过滤器、监听器、拦截器之前我们需要在spring-boot启动的类上加上注解@ServletComponentScan:

?
1
2
3
4
5
6
7
@SpringBootApplication
@ServletComponentScan
public class MySpringbootApplication {
   public static void main(String[] args) {
    SpringApplication.run(MySpringbootApplication. class , args);
   }
}

Servlet

spring-boot编写过滤器和spring中差不多,直接看代码:

?
1
2
3
4
5
6
7
8
9
10
11
12
@WebServlet (urlPatterns = "/serv" )
public class MyServlet extends HttpServlet {
   @Override
   protected void doGet(HttpServletRequest request, HttpServletResponse response) {
     System.out.println( "------------doget-------------" );
     doPost(request, response);
   }
   @Override
   protected void doPost(HttpServletRequest request, HttpServletResponse response) {
     System.out.println( "------------dopost-------------" );
   }
}

其实也就是注解的不同而已:

?
1
@WebServlet (urlPatterns = "/serv" )

过滤器(Filter)

在spring-boot里编写过滤器我们只需要实现javax.servlet.Filter

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@WebFilter (filterName = "myFilter" , urlPatterns = "/*" )
public class MyFilter implements Filter {
   @Override
   public void init(FilterConfig filterConfig) throws ServletException {
     System.out.println( "初始化过滤器" );
   }
   @Override
   public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
     System.out.println( "执行过滤器" );
     filterChain.doFilter(servletRequest, servletResponse);
   }
   @Override
   public void destroy() {
     System.out.println( "销毁过滤器!" );
   }
}

然后添加一个注解:

?
1
@WebFilter (filterName = "myFilter" , urlPatterns = "/*" )

监听器 (Listener)

在上面,看了下过滤器的使用。其实监听器和拦截器就差不多了,直接上代码:

?
1
2
3
4
5
6
7
8
9
10
11
@WebListener
public class MyHttpSessionListener implements HttpSessionListener {
   @Override
   public void sessionCreated(HttpSessionEvent httpSessionEvent) {
     System.out.println( "session 被创建" );
   }
   @Override
   public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
     System.out.println( "session 被摧毁" );
   }
}

我们发现只是注解发生了变化:

@WebListener

拦截器(Interceptor)

拦截器大致和上面差不多,不过有一点点不同。我们知道在web开发中,可以使用过滤器和拦截器来过滤外部的web请求。但是拦截器提供了更加细致的控制功能。主要有:请求之前、请求之后渲染之前、渲染之后、请求全部结束之后这四个步骤的拦截。

这里面使用拦截器主要有三个步骤

自定义拦截器,实现org.springframework.web.servlet.HandlerInterceptor

自定义WebAppConfigurer,继承WebMvcConfigurerAdapter

在自定义的WebAppConfigurer覆盖父类方法addInterceptors(InterceptorRegistry registry),并在方法中添加自己定义的拦截器

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
public class MyInterceptor implements HandlerInterceptor{
   @Override
   public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {
     System.out.println(MyInterceptor. class .getName()+ " : 在请求之前调用" );
     return true ;
   }
   @Override
   public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {
     System.out.println(MyInterceptor. class .getName()+ " :请求处理之后视图渲染之前使用" );
   }
   @Override
   public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {
     System.out.println(MyInterceptor. class .getName()+ " :请视图渲染之后使用" );
   }
}
 
@Configuration
public class MyWebAppConfigurer extends WebMvcConfigurerAdapter {
   @Override
   public void addInterceptors(InterceptorRegistry registry) {
     // 多个拦截器组成一个拦截器链
     // addPathPatterns 用于添加拦截规则
     // excludePathPatterns 用户排除拦截
     registry.addInterceptor( new MyInterceptor()).addPathPatterns( "/**" );
     registry.addInterceptor( new MyInterceptor2()).addPathPatterns( "/**" );
     super .addInterceptors(registry);
   }
}

以上就是关于在spring-boot中如何定义过滤器、监听器和拦截器。关于他们的原理以及一些细节问题(如拦截器的拦截顺序),就不详述。有兴趣的可以去网上搜索。

Python网络爬虫与推荐算法新闻推荐平台:网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标题、文本、图片、视频链接(保留排版) 推荐算法:权重衰减+标签推荐+区域推荐+热点推荐.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值