Spring Boot - Servlet、Filter、Listener

在Spring Boot中有三种实现方式

方法一:通过注册ServletRegistrationBean、FilterRegistrationBean、ServletListenerRegistrationBean

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

public class CustomServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.print("doGet");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.print("doPost");
        doGet(req, resp);
    }
}
import javax.servlet.*;
import java.io.IOException;

public class CustomFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("filter init");
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("filter doFilter");
    }

    @Override
    public void destroy() {
        System.out.println("filter destroy");
    }
}
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

public class CustomListener implements ServletContextListener {

    @Override
    public void contextInitialized(ServletContextEvent servletContextEvent) {
        System.out.println("listener contextInitialized");
    }

    @Override
    public void contextDestroyed(ServletContextEvent servletContextEvent) {
        System.out.println("listener contextDestroyed");
    }
}

 

 在启动类中注册bean:

import com.ken.util.filter.CustomFilter;
import com.ken.util.listener.CustomListener;
import com.ken.util.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.ServletListenerRegistrationBean;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@SpringBootApplication
public class KenApplication {

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

    @RequestMapping("/")
    public String home() {
        return "Spring Boot";
    }

    @Bean
    public ServletRegistrationBean servletRegistrationBean() {
        return new ServletRegistrationBean(new CustomServlet(), "/customServlet");
    }

    @Bean
    public FilterRegistrationBean filterRegistrationBean() {
        //return new FilterRegistrationBean(new CustomFilter(), servletRegistrationBean());只对/customServlet生效
        return new FilterRegistrationBean(new CustomFilter());//对所有请求生效
    }

    @Bean
    public ServletListenerRegistrationBean<CustomListener> servletListenerRegistrationBean() {
        return new ServletListenerRegistrationBean<>(new CustomListener());
    }
}

 

 

方法二:通过实现 ServletContextInitializer 接口直接注册

import com.ken.util.filter.CustomFilter;
import com.ken.util.listener.CustomListener;
import com.ken.util.servlet.CustomServlet;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletContextInitializer;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

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

@RestController
@SpringBootApplication
public class KenApplication implements ServletContextInitializer {

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

    @RequestMapping("/")
    public String home() {
        return "Spring Boot";
    }

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

 

 

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

 

posted on 2017-09-20 23:16  whlshot  阅读(260)  评论(0编辑  收藏  举报

导航