zoukankan      html  css  js  c++  java
  • 从零开始的Spring Boot(2、在Spring Boot中整合Servlet、Filter、Listener的方式)

    Spring Boot中整合ServletFilterListener的方式

    写在前面

    从零开始的Spring Boot(1、搭建一个Spring Boot项目Hello World):https://www.cnblogs.com/gaolight/p/13097818.html

    从零开始的Spring Boot(3、Spring Boot静态资源和文件上传)https://www.cnblogs.com/gaolight/p/13130406.html

    一、Spring Boot中整合Servlet的方式

    (一)整合Servlet方式一

    1.如图创建Servlet包,FirstServlet类;

    2. 修改FirstServlet内的代码,如下;

    package com.demo.springbootweb.Servlet;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    @WebServlet(name="FirstServlet",urlPatterns = "/first")
    public class FirstServlet extends HttpServlet {
        public void doGet(HttpServletRequest req, HttpServletResponse resp)  {
            System.out.println("FirstServlet...");
        }
    }

    3.为启动类xxxxApplication.java增加注解@ServletComponentScan

    package com.demo.springbootweb;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.boot.web.servlet.ServletComponentScan;
    @SpringBootApplication
    @ServletComponentScan//spring boot启动时扫描注解@WebServlet,并将该类实例化
    public class SpringbootwebApplication {
        public static void main(String[] args) {
            SpringApplication.run(SpringbootwebApplication.class, args);
        }
    }

    4.运行启动类main方法,在浏览器中输入地址:http://localhost:8080/first

    可以看到控制台输出

     

    (二)整合Servlet方式二

    1.创建SecondServlet并修改代码如下:

     

    package com.demo.springbootweb.Servlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpServlet;
    public class SecondServlet extends HttpServlet{
        public void doGet(HttpServletRequest req, HttpServletResponse resp) {
            System.out.println("SecondServlet...");
        }
    }

    3. 创建config包和ServletConfig类,并修改代码;

    该代码也可以写在启动类下,完成Servlet组件的注册

    package com.demo.springbootweb.config;
    import com.demo.springbootweb.Servlet.SecondServlet;
    import org.springframework.boot.web.servlet.ServletRegistrationBean;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import javax.servlet.Servlet;
    @Configuration
    public class ServletConfig {
        @Bean
        public ServletRegistrationBean getServletRegistrationBean(){
            ServletRegistrationBean bean=new ServletRegistrationBean((Servlet) new SecondServlet());
            bean.addUrlMappings("/second");
            return bean;
        }
    }

    4. 运行启动类main方法,在浏览器输入:http://localhost:8080/second

    可以看到控制台输出

    二、Spring Boot中整合Filter的方式

    (一)整合Filter方式一

    1. filter包下创建FirstFilter类,并修改代码;

    package com.demo.springbootweb.filter;
    import javax.servlet.*;
    import javax.servlet.annotation.WebFilter;
    import java.io.IOException;
    @WebFilter(filterName="FirstFilter",urlPatterns = "/first")
    //@WebFilter(filterName="FirstFilter",urlPatterns = {"*.do","*.jsp"})
    public class FirstFilter implements Filter {
        @Override
        public void init(FilterConfig filterConfig) throws ServletException {
        }
        @Override
        public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
            System.out.println("进入FirstFilter");
            filterChain.doFilter(servletRequest,servletResponse );
            System.out.println("离开FirstFilter");
        }
        @Override
        public void destroy() {
        }
    }

    2. 之前在启动类中添加的@ServletComponentScan同样可以扫描注解@WebFilter

    package com.demo.springbootweb;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.boot.web.servlet.ServletComponentScan;
    @SpringBootApplication
    @ServletComponentScan//spring boot启动时扫描注解@WebServlet,@WebFilter,并将该类实例化
    public class SpringbootwebApplication {
        public static void main(String[] args) {
            SpringApplication.run(SpringbootwebApplication.class, args);
        }
    }

     

    3. 运行启动类main方法,在浏览器中输入http://localhost:8080/first控制台输出

    (二)整合Filter方式二

    1.如图创建SecondFilter类,并修改代码;

    package com.demo.springbootweb.filter;
    import javax.servlet.*;
    import java.io.IOException;
    public class SecondFilter implements Filter {
        @Override
        public void init(FilterConfig filterConfig) throws ServletException {
        }
        @Override
        public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
            System.out.println("进入SecondFilter");
            filterChain.doFilter(servletRequest,servletResponse );
            System.out.println("离开SecondFilter");
        }
        @Override
        public void destroy() {
        }
    }

    2. 为启动类添加注解;

    package com.demo.springbootweb;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.boot.web.servlet.ServletComponentScan;
    @SpringBootApplication
    @ServletComponentScan//spring boot启动时扫描注解@WebServlet,@WebFilter,并将该类实例化
    public class SpringbootwebApplication {
        public static void main(String[] args) {
            SpringApplication.run(SpringbootwebApplication.class, args);
        }
    }

    3. 创建FilterConfig类,修改代码;

    package com.demo.springbootweb.config;
    import com.demo.springbootweb.filter.SecondFilter;
    import org.springframework.boot.web.servlet.FilterRegistrationBean;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    @Configuration
    public class FilterConfig {
        @Bean
        public FilterRegistrationBean getFilterRegistrationBean(){
            FilterRegistrationBean bean=new FilterRegistrationBean(new SecondFilter());
            //bean.addUrlPatterns(new  String[]{"*.do","*.jsp"});
            bean.addUrlPatterns("/second");
            return bean;
        }
    }

    4. 运行启动类main方法,在浏览器中输入:http://localhost:8080/second

     

     

     

     

    三、Spring Boot中整合Listener的方式

    (一)整合Listener方式一

    1.创建FirstListener类,并修改代码

    package com.demo.springbootweb.listener;
    import javax.servlet.ServletContextEvent;
    import javax.servlet.ServletContextListener;
    import javax.servlet.annotation.WebListener;
    @WebListener
    public class FirstListener implements ServletContextListener {
        @Override
        public void contextDestroyed(ServletContextEvent event) {
        }
        @Override
        public void contextInitialized(ServletContextEvent event) {
            System.out.println("FirstListener....init...");
        }
    }

    2. 为启动类添加注解

    package com.demo.springbootweb;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.boot.web.servlet.ServletComponentScan;
    @SpringBootApplication
    @ServletComponentScan//spring boot启动时扫描注解@WebServlet,@WebFilter,@WebListener并将该类实例化
    public class SpringbootwebApplication {
        public static void main(String[] args) {
            SpringApplication.run(SpringbootwebApplication.class, args);
        }
    }

    3. 运行启动类main()方法,控制台输出

    (二)整合Listener方式二

    1.创建SecondListener类,修改代码:

    package com.demo.springbootweb.listener;
    import javax.servlet.ServletContextEvent;
    import javax.servlet.ServletContextListener;
    public class SecondListener implements ServletContextListener {
        @Override
        public void contextDestroyed(ServletContextEvent event) {
        }
        @Override
        public void contextInitialized(ServletContextEvent event) {
            System.out.println("SecondListener....init...");
        }
    }

    2.创建ListenerConfig类,修改代码:

    package com.demo.springbootweb.config;
    import com.demo.springbootweb.listener.SecondListener;
    import org.springframework.boot.web.servlet.ServletListenerRegistrationBean;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    @Configuration
    public class ListenerConfig {
        @Bean
        public ServletListenerRegistrationBean getServletListenerRegistrationBean(){
            ServletListenerRegistrationBean bean=new ServletListenerRegistrationBean(new SecondListener());
            return bean;
        }
    }

    4. 运行启动类main()方法,控制台输出:

     

     

     

     

     

     

     

  • 相关阅读:
    关于为什么window.frames[0].src不能获取src
    div之间有间隙以及img和div之间有间隙的原因及解决方法
    面试题14:给你一根长度为n的绳子,请把绳子剪成m段(m和n都是整数,n>1并且m>1)每段绳子的长度记为k[0],k[1],...,k[m]. * 请问k[0]*k[1]*...*k[m]可能的最大乘积是多少? * 例如,当绳子的长度为8时,我们把它剪成长度分别为2,3,3的三段,此时得到的最大乘积是18.
    地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格, 但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37), 因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 = 19。请问该机器人能够达到多少个格子?
    数据结构学习笔记:有序链表合并的函数
    输入一个字符串,求出该字符串包含的字符集合
    十六进制字符串转十进制
    十进制转二进制、八进制、十六进制的经典程序
    华为:明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤1000),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作。
    笔试题扑克牌排序
  • 原文地址:https://www.cnblogs.com/gaolight/p/13121984.html
Copyright © 2011-2022 走看看