SpringBoot入门(十)

简介: SpringBoot入门(十)

SpringBoot使用ServletAPI和拦截器

1、如何去使用ServletAPI:

  1. package com.boot.servlet.api.bootservlet.servlet;
  2. import javax.servlet.ServletException;
  3. import javax.servlet.annotation.WebServlet;
  4. import javax.servlet.http.HttpServlet;
  5. import javax.servlet.http.HttpServletRequest;
  6. import javax.servlet.http.HttpServletResponse;
  7. import java.io.IOException;
  8. @WebServlet(name = "MyServlet",urlPatterns = "/my")
  9. public class MyServlet extends HttpServlet {
  10.    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  11.        System.out.println("执行了servlet的请求");
  12.    }
  13.    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  14.      doPost(request,response);
  15.    }
  16. }

1.1、在创建一个Filter的类,代码如下:

  1. package com.boot.servlet.api.bootservlet.filter;
  2. import javax.servlet.*;
  3. import javax.servlet.annotation.WebFilter;
  4. import java.io.IOException;
  5. @WebFilter(filterName = "MyFilter",urlPatterns = "/*")
  6. public class MyFilter implements Filter {
  7.    public void destroy() {
  8.    }
  9.    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
  10.        System.out.println("执行了Filter");
  11.        chain.doFilter(req, resp);
  12.    }
  13.    public void init(FilterConfig config) throws ServletException {
  14.    }
  15. }

1.2、创建了一个Listener的类,代码如下:

  1. package com.boot.servlet.api.bootservlet.filter;
  2. package com.boot.servlet.api.bootservlet.listener;
  3. import javax.servlet.ServletContextEvent;
  4. import javax.servlet.ServletContextListener;
  5. import javax.servlet.annotation.WebListener;
  6. @WebListener

  7. public class MyListener implements ServletContextListener{
  8.    public MyListener() {
  9.    }
  10.    public void contextInitialized(ServletContextEvent sce) {
  11.        System.out.println("servlet容器启动");
  12.    }
  13.    @Override
  14.    public void contextDestroyed(ServletContextEvent servletContextEvent) {
  15.        System.out.println("servlet容器销毁");
  16.    }
  17. }

上面的配置是使用的注解的方式来配置的。

在SpringBoot如何去使用ServletAPI呢?

第一种方式:使用注解的方式:@ServletComponentScan去启动。使用这个注解的条件必须是servlet和listener还有filter的类上必须有带有注解的才可以。

代码如下:

  1. package com.boot.servlet.api.bootservlet.filter;
  2. package com.boot.servlet.api.bootservlet;
  3. import org.springframework.boot.SpringApplication;
  4. import org.springframework.boot.autoconfigure.SpringBootApplication;
  5. import org.springframework.boot.web.servlet.ServletComponentScan;
  6. @SpringBootApplication
  7. @ServletComponentScan
  8. public class BootServletApplication {
  9.    public static void main(String[] args) {
  10.        SpringApplication.run(BootServletApplication.class, args);
  11.    }
  12. }

然后启动下boot项目:输出的就是监听器监听到的。

去请求下MyServlet,这时的servlet的Api就引入成功了。

第二种方式:通过配置类的方式来配置,代码如下:

  1. package com.boot.servlet.api.bootservlet.config;
  2. import com.boot.servlet.api.bootservlet.filter.MyFilter;
  3. import com.boot.servlet.api.bootservlet.listener.MyListener;
  4. import com.boot.servlet.api.bootservlet.servlet.MyServlet;
  5. import org.springframework.boot.SpringBootConfiguration;
  6. import org.springframework.boot.web.servlet.FilterRegistrationBean;
  7. import org.springframework.boot.web.servlet.ServletListenerRegistrationBean;
  8. import org.springframework.boot.web.servlet.ServletRegistrationBean;
  9. import org.springframework.context.annotation.Bean;
  10. import java.util.Arrays;
  11. @SpringBootConfiguration
  12. public class ServletConfiguration {
  13.    @Bean
  14.    public ServletRegistrationBean<MyServlet>  registrationBean(){
  15.        ServletRegistrationBean<MyServlet> bean=new ServletRegistrationBean<>(new MyServlet(),"/my");
  16.        return bean;
  17.    }
  18.    @Bean
  19.    public FilterRegistrationBean<MyFilter> filterFilterRegistrationBean(){
  20.        FilterRegistrationBean<MyFilter> bean=new FilterRegistrationBean<>();
  21.        bean.setFilter(new MyFilter());
  22.        bean.setUrlPatterns(Arrays.asList("/*"));
  23.        return bean;
  24.    }
  25.    @Bean
  26.    public ServletListenerRegistrationBean<MyListener> servletListenerRegistrationBean(){
  27.        ServletListenerRegistrationBean<MyListener> listener=new ServletListenerRegistrationBean<>();
  28.        listener.setListener(new MyListener());
  29.        return listener;
  30.    }
  31. }

启动项目运行下:这时也被监听到。

再次访问下:

这时过滤器和servlet的请求也都打印了出来。

上面就是引入servletAPI的方式。


2、如何在springBoot中使用拦截器:

代码如下:

2.1、写一个拦截器去实现HandlerInterceptor:

  1. package com.boot.servlet.api.bootservlet.interceptor;
  2. import org.springframework.web.servlet.HandlerInterceptor;
  3. import org.springframework.web.servlet.ModelAndView;
  4. import javax.servlet.http.HttpServletRequest;
  5. import javax.servlet.http.HttpServletResponse;
  6. public class MyInterceptor implements HandlerInterceptor {
  7.    @Override
  8.    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
  9.        return true;
  10.    }
  11.    @Override
  12.    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
  13.        System.out.println("postHandle");
  14.    }
  15.    @Override
  16.    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
  17.        System.out.println("afterCompletion");
  18.    }
  19. }

2.2、写一个配置类来注册拦截器,代码如下:

  1. package com.boot.servlet.api.bootservlet.config;
  2. import com.boot.servlet.api.bootservlet.interceptor.MyInterceptor;
  3. import org.springframework.boot.SpringBootConfiguration;
  4. import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
  5. import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
  6. @SpringBootConfiguration
  7. public class MyWebMvcConfiguration extends WebMvcConfigurationSupport {
  8.    @Override
  9.    protected void addInterceptors(InterceptorRegistry registry) {
  10.        registry.addInterceptor(new MyInterceptor());
  11.    }
  12. }

2.3、拦截器主要拦截的是controller,所以新建个controller,代码如下:

  1. package com.boot.servlet.api.bootservlet.controller;

  2. import org.springframework.stereotype.Controller;
  3. import org.springframework.web.bind.annotation.GetMapping;

  4. @Controller
  5. public class TestController {
  6.    @GetMapping("/index")
  7.    public void index(){

  8.    }
  9. }

2.4、启动下项目并访问:这时就会拦截请求了。

总结:上面就是如何使用Servlet的API以及拦截器

相关文章
|
9月前
|
人工智能 API 开发工具
MCP圣经:从入门到精通,从精通到放弃,理论 + 实践吃透 大火的 MCP 协议
MCP圣经:从入门到精通,从精通到放弃,理论 + 实践吃透 大火的 MCP 协议
MCP圣经:从入门到精通,从精通到放弃,理论 + 实践吃透 大火的 MCP 协议
|
Java 应用服务中间件 Spring
SpringBoot入门(十一)
SpringBoot入门(十一)
SpringBoot入门(十一)
|
SQL Java 数据库连接
SpringBoot入门(十三)
SpringBoot入门(十三)
|
NoSQL Java Redis
SpringBoot的入门(一)
SpringBoot的入门(一)
|
Java 应用服务中间件 nginx
SpringBoot入门(九)
SpringBoot入门(九)
|
5月前
|
缓存 Java 数据安全/隐私保护
Java动态代理详解
动态代理是Java中一种强大且灵活的设计模式,它允许在运行时创建代理对象,从而实现对目标对象方法的拦截与增强。通过动态代理,开发者可以在不修改原始代码的情况下,增强对象功能,适用于日志记录、事务管理、权限控制等多个场景。
|
9月前
|
人工智能 程序员 Go
一文掌握 MCP 上下文协议:从理论到实践
本文介绍了 模型上下文协议(Model Context Protocol,MCP),一种用于规范大型语言模型(LLM)与外部数据源及工具之间交互的开放标准。内容涵盖了 MCP 协议的整体架构(客户端与服务器的一对一连接模式)、消息传输机制(采用 JSON-RPC 2.0 格式)、以及客户端与服务器支持的核心原语。
4732 70
|
存储 Java API
Elasticsearch 7.8.0从入门到精通
这篇文章详细介绍了Elasticsearch 7.8.0的安装、核心概念(如正排索引和倒排索引)、RESTful风格、各种索引和文档操作、条件查询、聚合查询以及在Spring Boot中整合Elasticsearch的步骤和示例。
635 1
Elasticsearch 7.8.0从入门到精通
|
存储 安全 网络协议
Elasticsearch 配置文件解析
【10月更文挑战第3天】Elasticsearch 配置文件解析
457 3
|
Java 容器 Spring
SpringBoot入门(六)
SpringBoot入门(六)