springBoot(8):web开发-Servlets, Filters, listeners

一、说明

Web 开发使用 Controller 基本上可以完成大部分需求,但是我们还可能会用到 Servlet、 Filter、Listener 等等

二、在spring boot中的三种实现方式

2.1、代码

CustomServlet.java:

package com.example.demo.utils.servlet;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * 自定义 servlet
 *
 */
public class CustomServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
  @Override
  protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("servlet get method");
    doPost(request, response);
  }
  @Override
  protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("servlet post method");
    response.getWriter().write("hello world");
  }
}


CustomFilter.java:

package com.example.demo.utils.filter;

import javax.servlet.*;
import java.io.IOException;

/**
 * 自定义 filter
 * Created by DELL on 2017/6/17.
 */
public class CustomFilter implements Filter {
    @Override
  public void init(FilterConfig filterConfig) throws ServletException {
      System.out.println("init filter");
  }
  @Override
  public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        System.out.println("do filter");
    chain.doFilter(request, response);
  }
  @Override
  public void destroy() {
      System.out.println("destroy filter");
  }
}

CustomListener.java:

package com.example.demo.utils.listener;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

/**
 * 自定义 listener
 * Created by DELL on 2017/6/17.
 */
public class CustomListener implements ServletContextListener {
  @Override
    public void contextInitialized(ServletContextEvent sce) {
        System.out.println("contextInitialized");
  }
  @Override
  public void contextDestroyed(ServletContextEvent sce) {
      System.out.println("contextDestroyed");
  }
}

2.2、方式一:通过注册ServletRegistrationBean、FilterRegistrationBean和ServletListenerRegistrationBean

2.2.1、注册ServletRegistrationBean

Application中注册bean:

/**注册CustomServlet*/
@Bean
public ServletRegistrationBean servletRegistrationBean() {
    return new ServletRegistrationBean(new CustomServlet(), "/roncoo");
}

2.2.2、注册FilterRegistrationBean

Application中注册bean:

/**注册CustomFilter*/
@Bean
public FilterRegistrationBean filterRegistrationBean() {
    return new FilterRegistrationBean(new CustomFilter(), servletRegistrationBean());
}

2.2.3、注册ServletListenerRegistrationBean

Application中注册bean:

/**注册CustomListener*/
@Bean
public ServletListenerRegistrationBean<CustomListener> servletListenerRegistrationBean() {
   return new ServletListenerRegistrationBean<CustomListener>(new CustomListener());
}

上面所有例子效果:

项目启动:

访问:http://localhost:8080/roncoo

2.3、方式二:通过实现 ServletContextInitializer 接口直接注册

Application实现 ServletContextInitializer 接口:

package com.example.demo;

import com.example.demo.utils.filter.CustomFilter;
import com.example.demo.utils.listener.CustomListener;
import com.example.demo.utils.servlet.CustomServlet;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.boot.web.servlet.ServletContextInitializer;
import org.springframework.boot.web.servlet.ServletListenerRegistrationBean;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;

import javax.servlet.DispatcherType;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import java.util.EnumSet;

@SpringBootApplication
public class SpringbootDemo27Application implements ServletContextInitializer {
   @Override
   public void onStartup(ServletContext servletContext) throws ServletException {
      servletContext.addServlet("customServlet", new CustomServlet()).addMapping("/roncoo");
      servletContext.addFilter("customFilter", new CustomFilter()).addMappingForServletNames(EnumSet.of(DispatcherType.REQUEST), true, "customServlet");
      servletContext.addListener(new CustomListener());
   }

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

2.4、方式三:

在SpringBootApplication上使用@ServletComponentScan注解后,直接通过@WebServlet、@WebFilter、@WebListener注解自动注册

@ServletComponentScan
@SpringBootApplication
public class SpringbootDemo27Application {
     //...
}

@WebServlet(urlPatterns = "/roncoo", name = "customServlet")
public class CustomServlet extends HttpServlet {
    //...
}

@WebFilter(urlPatterns = "/*")
public class CustomFilter implements Filter {
    //...
}

@WebListener
public class CustomListener implements ServletContextListener {
    //...
}
时间: 2024-10-19 23:10:05

springBoot(8):web开发-Servlets, Filters, listeners的相关文章

Springboot - -web应用开发-Servlets, Filters, listeners

一.Web开发使用 Controller 基本上可以完成大部分需求,但是我们还可能会用到 Servlet. Filter. Listener等等 二.在spring boot中的三种实现方式 方法一:通过注册ServletRegistrationBean. FilterRegistrationBean 和 ServletListenerRegistrationBean 获得控制 servlet类: package com.demo.example.util.servlet; import jav

SpringBoot的Web开发

Web开发是开发中至关重要的一部分,web开发的核心内容主要包括servelet容器和SpringMVC. 1.SpringBoot的Web开发支持. SpringBoot提供了spring-boot-starter-web为web开发予以支持,spring-boot-starter-web提供了内嵌的Tomcat以及SpringMVC的依赖 而web相关的自动配置存储在spring-boot-autoconfigure.jar的org.srpingframework.boot.autoconf

4.SpringBoot的web开发1

一.回顾 好的,同学们,那么接下来呢,我们开始学习SpringBoot与Web开发,从这一章往后,就属于我们实战部分的内容了: 其实SpringBoot的东西用起来非常简单,因为SpringBoot最大的特点就是自动装配. 使用SpringBoot的步骤: 创建一个SpringBoot应用,选择我们需要的模块,SpringBoot就会默认将我们的需要的模块自动配置好 手动在配置文件中配置部分配置项目就可以运行起来了 专注编写业务代码,不需要考虑以前那样一大堆的配置了. 要熟悉掌握开发,之前学习的

SpringBoot与Web开发

web开发1).创建SpringBoot应用,选中我们需要的模块:2).SpringBoot已经默认将这些场景已经配置好了,只需要在配置文件中指定少量配置就可以运行起来3).自己编写业务代码: 自动配置原理?这个场景SpringBoot帮我们配置了扫码?能不能修改?能不能改哪些配置?能不能扩展?xxxxxxAutoConfiguration:帮我们给容器中自动配置组件:xxxProperties:配置类来 封装配置文件的内容: 2.SpringBoot对静态资源的 映射规则 @Configura

【SpringBoot】Web开发

一.简介 1.1 引入SpringBoot模块 1.2 SpringBoot对静态资源的映射规则 二.模版引擎 2.1 简介 2.2 引入thymeleaf 2.3 Thymeleaf使用 一.简介 1.1 引入SpringBoot模块 在介绍Web开发模块之前,先总结一下SpringBoot中如何引入某一个模块,我们知道,SpringBoot将功能模块封装为一个个的Starter : 1).创建SpringBoot应用,选中我们需要的模块; 2).SpringBoot已经默认将这些场景配置好了

SpringBoot(四) -- SpringBoot与Web开发

一.发开前准备 1.创建一个SpringBoot应用,引入我们需要的模块 2.SpringBoot已经默认将这些场景配置好了,只需要在配置文件中指定少量配置,就能运行起来 3.编写业务代码 二.静态资源映射规则 在WebMvcAutoConfiguration中有着如下的配置: 1 @Override 2 public void addResourceHandlers(ResourceHandlerRegistry registry) { 3 if (!this.resourceProperti

Spring Boot 内嵌servlet容器的Servlets +Filters + listeners

一:servlet (1)启动类 @SpringBootApplication @ServletComponentScan public class Application { public static void main(String[] args){ SpringApplication.run(Application.class, args); } } 启动类用@ServletComponentScan注解标注 (2)继承HttpServlet @WebServlet(name = "we

SpringBoot 基本web开发demo

1.在创建的springboot项目中的pom.xml中导入Lombok的依赖 <dependency>    <groupId>org.projectlombok</groupId>    <artifactId>lombok</artifactId>    <version>1.18.6</version></dependency> 2.安装Lombok插件 3.在主启动类的同级创建实体类的包,在包中创建实

(四)SpringBoot与Web开发

1.简介 使用SpringBoot; 1.创建SpringBoot应用,选中我们需要的模块 2.SpringBoot已经默认将这些场景配置好了,只需要在配置文件中指定少量配置就可以运行起来 3.自己编写业务代码 自动配置原理? 这个场景SpringBoot帮我们配置了什么?能不能修改?能修改哪些配置?能不能扩展? 1 xxxAutoConfiguration:帮我们给容器中自动配置组件 2 xxxProperties:配置类来封装配置文件的内容 //可以设置和静态资源有关的参数,缓存时间 2.S