暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

SpringBoot入门(十)

IT分享 2020-01-12
319

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

未完待续,如果觉的哪里不好的话,请各位大佬指出缺点,互相学习。

如果想要代码的话可以加下qq群:797853299。

然后请关注下朋友的订阅号,欢迎大家去找茬:

文章转载自IT分享,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论