zoukankan      html  css  js  c++  java
  • Spring Boot 2 使用Servlet、Listener和Filter配置

    开发环境:IntelliJ IDEA 2019.2.2
    Spring Boot版本:2.1.8

    新建一个名称为demo的Spring Boot项目。

    一、使用Servlet配置

    1、修改启动类 DemoApplication.java代码,加入注解ServletComponentScan,它用于扫描Servlet组件,包括使用@WebServlet、
    @WebFilter和@WebListener进行修饰的类。

    package com.example.demo;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.boot.web.servlet.ServletComponentScan;
    
    @SpringBootApplication
    @ServletComponentScan
    public class DemoApplication {
        public static void main(String[] args) {
            SpringApplication.run(DemoApplication.class, args);
        }
    }

    2、新建一个类 MyServlet.java,继承HttpServlet并且加入注解 @WebServlet

    package com.example.demo;
    
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    @WebServlet(value="/servlet")
    public class MyServlet extends HttpServlet {
        public MyServlet(){
            System.out.println("servlet类");
        }
        protected void service(HttpServletRequest arg0, HttpServletResponse arg1){
            System.out.println("servlet方法");
        }
    }

    在浏览器中访问http://localhost:8080/servlet,可看到IDEA控制台输出
    servlet类
    servlet方法

    二、使用Listener配置

    1、启动类 DemoApplication.cs 代码在使用Servlet配置上已经加入注解ServletComponentScan,在此保持不变。

    2、新建一个类 MyServlet.java

    package com.example.demo;
    
    import javax.servlet.ServletRequestEvent;
    import javax.servlet.ServletRequestListener;
    import javax.servlet.annotation.WebListener;
    
    @WebListener
    public class MyListener implements ServletRequestListener {
        @Override
        public void requestInitialized(ServletRequestEvent servletRequestEvent){
            System.out.println("请求创建");
        }
        @Override
        public void requestDestroyed(ServletRequestEvent servletRequestEvent){
            System.out.println("请求销毁");
        }
    }

    在浏览器中访问一个接口,如上步http://localhost:8080/servlet,可看到IDEA控制台输出:
    请求创建
    请求销毁

    附,常用的监听器接口:

    1.ServletContextListener -- 监听servletContext对象的创建以及销毁    
        1.1  contextInitialized(ServletContextEvent arg0)   -- 创建时执行    
        1.2  contextDestroyed(ServletContextEvent arg0)  -- 销毁时执行
    2.HttpSessionListener  -- 监听session对象的创建以及销毁    
        2.2  sessionCreated(HttpSessionEvent se)   -- 创建时执行    
        2.2  sessionDestroyed(HttpSessionEvent se) -- 销毁时执行
    3.ServletRequestListener -- 监听request对象的创建以及销毁    
        3.1  requestInitialized(ServletRequestEvent sre) -- 创建时执行    
        3.2  requestDestroyed(ServletRequestEvent sre) -- 销毁时执行
    4.ServletContextAttributeListener  -- 监听servletContext对象中属性的改变    
        4.1  attributeAdded(ServletContextAttributeEvent event) -- 添加属性时执行    
        4.2  attributeReplaced(ServletContextAttributeEvent event) -- 修改属性时执行    
        4.3  attributeRemoved(ServletContextAttributeEvent event) -- 删除属性时执行
    5.HttpSessionAttributeListener  --监听session对象中属性的改变    
        5.1  attributeAdded(HttpSessionBindingEvent event) -- 添加属性时执行    
        5.2  attributeReplaced(HttpSessionBindingEvent event) -- 修改属性时执行    
        5.3  attributeRemoved(HttpSessionBindingEvent event) -- 删除属性时执行
    6.ServletRequestAttributeListener  --监听request对象中属性的改变    
        6.1  attributeAdded(ServletRequestAttributeEvent srae) -- 添加属性时执行    
        6.2  attributeReplaced(ServletRequestAttributeEvent srae) -- 修改属性时执行    
        6.3  attributeRemoved(ServletRequestAttributeEvent srae) -- 删除属性时执行

    三、使用Filter配置

    1、启动类 DemoApplication.cs 代码在使用Servlet配置上已经加入注解ServletComponentScan,在此保持不变。

    2、新建一个类 MyFilter.java

    package com.example.demo;
    
    import javax.servlet.*;
    import javax.servlet.annotation.WebFilter;
    import java.io.IOException;
    
    //第一个参数为过滤器名字,第二个参数为要拦截的请求地址
    @WebFilter(filterName="myFilter", urlPatterns="/*")
    public class MyFilter implements Filter {
        @Override
        public void init(FilterConfig filterConfig) throws ServletException {
            System.out.println("filter初始化");
        }
    
        @Override
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, 
    
    ServletException {
            System.out.println("filter方法");
            chain.doFilter(request, response);
        }
    
        @Override
        public void destroy() {
            System.out.println("filter销毁");
        }
    }

    在浏览器中访问http://localhost:8080/servlet,可看到IDEA控制台输出:
    filter方法

    最后,附上项目结构图:

  • 相关阅读:
    5R(康奈尔)笔记法
    【软件】MyEclipse 显示行数及Eclipse修改字体
    Linux运维工程师必备的十个技能点
    centos下部署LAMP环境(Linux+Apache+mysql+php)(转载文章:https://www.cnblogs.com/apro-abra/p/4862285.html)
    MySQL之show命令 (转载https://www.cnblogs.com/andy6/p/6171945.html)
    MySQL安装完成后重置密码
    MySQL面试题
    mysql运维必备知识点(转载至其他作者)
    centos 7 下安装部署mysql 5.7
    Linux服务部署之NTP时间服务器
  • 原文地址:https://www.cnblogs.com/gdjlc/p/11581722.html
Copyright © 2011-2022 走看看