zoukankan      html  css  js  c++  java
  • Spring Boot 知识笔记(servlet、监听器、拦截器)

    一、通过注解自定义servlet

    package net.Eleven.demo.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;
    
    
    @WebServlet(name = "userServlet",urlPatterns = "/servlet/test/customs")
    public class UserServlet extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            resp.getWriter().print("custom sevlet");
            resp.getWriter().flush();
            resp.getWriter().close();
        }
    
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            super.doPost(req, resp);
        }
    }

     返回结果

     二、通过注解自定义ServletRequestListener

    package net.Eleven.demo.Listener;
    
    import javax.servlet.ServletRequestEvent;
    import javax.servlet.ServletRequestListener;
    import javax.servlet.annotation.WebListener;
    
    @WebListener
    public class RequestListener implements ServletRequestListener {
        @Override
        public void requestDestroyed(ServletRequestEvent sre) {
            System.out.println("==========RequestDestroyed========");
        }
    
        @Override
        public void requestInitialized(ServletRequestEvent sre) {
            System.out.println("==========RequestInitialized=======");
    
        }
    }

    返回结果

      三、通过注解自定义ServletContextListener

    package net.Eleven.demo.Listener;
    
    
    import javax.servlet.ServletContextEvent;
    import javax.servlet.ServletContextListener;
    import javax.servlet.annotation.WebListener;
    
    @WebListener
    public class CustomContextListener   implements ServletContextListener {
        @Override
        public void contextInitialized(ServletContextEvent sce) {
            System.out.println("=======contextInitialized========");
        }
    
        @Override
        public void contextDestroyed(ServletContextEvent sce) {
            System.out.println("=======contextDestroyed========");
    
        }
    }

    四、拦截器

    1、先定义拦截配置器

    package net.Eleven.demo.Intecpter;
    
    
    import org.springframework.context.annotation.Configuration;
    import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
    import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
    
    @Configuration
    public class CustomWebMvcConfigurer  implements WebMvcConfigurer {
        @Override
        public void addInterceptors(InterceptorRegistry registry) {
            registry.addInterceptor(new LoginIntercepter()).addPathPatterns("/success/*");  //注册一个拦截器
            WebMvcConfigurer.super.addInterceptors(registry);
        }
    }

    2、根据业务需要定义拦截器

    package net.Eleven.demo.Intecpter;
    
    import org.springframework.web.servlet.HandlerInterceptor;
    import org.springframework.web.servlet.ModelAndView;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    public class LoginIntercepter  implements HandlerInterceptor {
        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
            System.out.println("LoginIntercepter========>preHandle");
            return HandlerInterceptor.super.preHandle(request,response,handler);
        }
    
        @Override
        public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
            System.out.println("LoginIntercepter========>postHandle");
             HandlerInterceptor.super.postHandle(request,response,handler,modelAndView);
    
        }
    
        @Override
        public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
            System.out.println("LoginIntercepter========>afterCompletion");
             HandlerInterceptor.super.afterCompletion(request,response,handler,ex);
        }
    }

    返回结果:

    拦截器不生效常见问题:
    1)是否有加@Configuration
    2)拦截路径是否有问题 ** 和 *
    3)拦截器最后路径一定要 “/**”, 如果是目录的话则是 /*/


    Filter是基于函数回调 doFilter(),而Interceptor则是基于AOP思想
    Filter在只在Servlet前后起作用,而Interceptor够深入到方法前后、异常抛出前后等

    Filter依赖于Servlet容器即web应用中,而Interceptor不依赖于Servlet容器所以可以运行在多种环境。


    在接口调用的生命周期里,Interceptor可以被多次调用,而Filter只能在容器初始化时调用一次。

    Filter和Interceptor的执行顺序

    过滤前->拦截前->action执行->拦截后->过滤

  • 相关阅读:
    软件测试课堂练习1
    安卓增删改查
    安卓数据库表
    安卓注册登录
    安卓购物清单
    安卓计算器
    第四周安卓作业
    第七周作业
    jsp第六周
    第四次jsp作业
  • 原文地址:https://www.cnblogs.com/Eleven-Liu/p/11030132.html
Copyright © 2011-2022 走看看