0%

Spring Boot整合Web层技术

深入学习Spring Boot的组件

Spring Boot整合Web层技术

先附上目录结构:

整合Servlet

通过注解

  • 创建Servlet类

    FirstServlet.java
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    /**
    * 通过注解整合Servlet
    * 需要在启动类添加@ServletComponentScan注解实例化Servlet类
    */
    @WebServlet(name = "FirstServlet", urlPatterns = "/FirstServlet")
    public class FirstServlet extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response) {
    System.out.println("FirstServlet");
    }
    }
  • 修改启动类

    WebApplication.java
    1
    2
    3
    4
    5
    6
    7
    8
    9
    @SpringBootApplication
    @ServletComponentScan //通过注解扫描@WebServlet,@WebFilter,@WebListener并实例化
    public class WebApplication {

    public static void main(String[] args) {
    SpringApplication.run(WebApplication.class, args);
    }

    }

手动配置

  • 创建Servlet类

    SecoondServlet.java
    1
    2
    3
    4
    5
    6
    7
    8
    9
    /**
    * 手动配置法
    * 添加配置类或去启动类注册方法
    */
    public class SecondServlet extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response) {
    System.out.println("SecondServlet");
    }
    }
  • 创建配置类

    ServletConfig.java
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    /**
    * 完成Servlet组件注册
    * 因为@SpringBootApplication包含@Configuration注解
    * 所以这个类里面的方法也可以写在启动类里面
    */
    @Configuration
    public class ServletConfig {
    @Bean
    public ServletRegistrationBean getServletRegistrationBean(){
    ServletRegistrationBean bean = new ServletRegistrationBean(new SecondServlet());
    bean.addUrlMappings("/SecondServlet");
    return bean;
    }
    }

整合Filter

通过注解

  • 创建Filter类

    实现javax.servlet.Filter接口

    idea会提示,把三个抽象方法重载

    FirstFilter.java
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    /**
    * 通过注解整合Filter
    * 需要在启动类添加@ServletComponentScan注解实例化
    * Filter类是Servlet类的子集
    */
    //@WebFilter(filterName = "FirstFilter", urlPatterns = {"*.do", "*.jsp"}) 拦截指定后缀名
    @WebFilter(filterName = "FirstFilter", urlPatterns = "/FirstServlet") //拦截FirstServlet
    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("进入First Filter");
    filterChain.doFilter(servletRequest, servletResponse);//
    System.out.println("离开First Filter");
    }

    @Override
    public void destroy() {

    }
    }
  • 修改启动类

    已配置@ServletComponentScan注解

手动配置

  • 创建Filter类

    SecondFilter.java
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    /**
    * 手动配置法
    * 添加配置类或去启动类注册方法
    */
    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("进入Second Filter");
    filterChain.doFilter(servletRequest, servletResponse);
    System.out.println("离开Second Filter");
    }

    @Override
    public void destroy() {

    }
    }
  • 创建配置类

    FilterConfig.java
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    /**
    * 完成Filter组件注册
    * 因为@SpringBootApplication包含@Configuration注解
    * 所以这个类里面的方法也可以写在启动类里面
    */
    @Configuration
    public class FilterConfig {
    @Bean
    public FilterRegistrationBean getFilterRegistrationBean(){
    FilterRegistrationBean bean = new FilterRegistrationBean(new SecondFilter());
    bean.addUrlPatterns("/SecondServlet");
    //bean.addUrlPatterns("*.do", "*.jsp");
    return bean;
    }
    }

整合Listener

ServletContextListener为例

通过注解

  • 创建Listener类

    实现ServletContextListener接口,右键+Generate...Alt+Insert,然后选择Override Methods...Ctrl+O,选择

    • contextInitialized

    • contextDestroyed

    这两个方法,然后:

    FirstListener.java
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    /**
    * 通过注解整合Listener
    * 修改启动类添加注解@ServletComponentScan
    */
    @WebListener
    public class FirstListener implements ServletContextListener {
    @Override
    public void contextInitialized(ServletContextEvent sce) {
    System.out.println("First Listener");
    }

    @Override
    public void contextDestroyed(ServletContextEvent sce) {

    }
    }
  • 修改启动类

    已配置@ServletComponentScan注解

手动配置

  • 创建Listener类

    SecondFilter.java
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    /**
    * 手动配置法
    * 添加配置类或去启动类注册方法
    */
    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("进入Second Filter");
    filterChain.doFilter(servletRequest, servletResponse);
    System.out.println("离开Second Filter");
    }

    @Override
    public void destroy() {

    }
    }
  • 创建配置类

    ListenerConfig.java
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    /**
    * 完成Listener组件注册
    * 因为@SpringBootApplication包含@Configuration注解
    * 所以这个类里面的方法也可以写在启动类里面
    */
    @Configuration
    public class ListenerConfig {
    @Bean
    public ServletListenerRegistrationBean getServletListenerRegistrationBean(){
    ServletListenerRegistrationBean bean = new ServletListenerRegistrationBean(new SecondListener());
    return bean;
    }
    }

总结

三个组件都可以利用注解配置或者手动配置,组件类都要继承父类或者实现接口,注解方法只需要在组件类上方添加相应的注解并配置变量,然后在启动类添加@ServletComponentScan注解即可;手动配置组件类上不需要注解,但是需要一个配置类并注解@Configuration(@SpringBootApplication是包含@Configuration的,因此配置类少的话可以直接把方法写到启动类里面),里面的方法要实现注册组件并注解@Bean。

-----------看到底线啦 感谢您的阅读-------------