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以及拦截器

相关文章
|
3月前
|
监控 Java Spring
SpringBoot的入门(四)
SpringBoot的入门(四)
|
3月前
|
Java 容器 Spring
SpringBoot入门(六)
SpringBoot入门(六)
|
3月前
|
NoSQL Java Redis
SpringBoot的入门(一)
SpringBoot的入门(一)
|
3月前
|
Java Spring 容器
SpringBoot的入门(二)
SpringBoot的入门(二)
|
3月前
|
JSON Java API
SpringBoot入门(八)
SpringBoot入门(八)
|
3月前
|
JSON Java 数据格式
SpringBoot入门(七)
SpringBoot入门(七)
|
3月前
|
消息中间件 NoSQL Java
SpringBoot的入门(五)
SpringBoot的入门(五)
|
3月前
|
Java Spring 容器
SpringBoot的入门(三)
SpringBoot的入门(三)
|
3月前
|
Java 应用服务中间件 nginx
SpringBoot入门(九)
SpringBoot入门(九)
|
6月前
|
Java 数据库连接 Maven