spring boot 的Servlet 、Filter 和Listener的实现

springboot本身集成了Servlet容器,又如何去实现Servlet容器的Servlet、Filter和Listener功能呢?

 

在springboot中有两种方法实现Servlet等,一种是通过代码注册,一种通过注解注册

1、代码注册。代码注册通过ServletRegistrationBean、FilterRegistrationBean和ListenerRegistrationBean获得控制,也可以通过ServletContextInitializer接口直接注册。

2、注解自动注册。在配置类中添加@ServletComponentScan 注解后,在自己的Servlet、Filter和Listener使用注解@WebServlet,@WebFilter和@Listener,即可获得控制。

 

Servlet实例:

package com.example.servlet;

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

/**
 * Created by lenovo on 2017/3/14.
 */
public class MyServlet extends HttpServlet{
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("doGet");
    }

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

    @Override
    public void destroy() {
        System.out.println("destroy");
    }

    @Override
    public void init() throws ServletException {
        System.out.println("init");
    }
}

 

使用代码注册:

@Bean                                                                 
public ServletRegistrationBean servletRegistrationBean() {            
    return new ServletRegistrationBean(new MyServlet(), "/test/*");   
}                                                                     

 

使用注解注册:

  在MyServlet上面加注解@WebServlet,并在@SpringBootApplication注解的类上加@ServletComponentScan注解启动注解扫描

@SpringBootApplication
@ServletComponentScan
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}
@WebServlet(urlPatterns = {"/text/*,/index"},loadOnStartup = 0,description = "测试Servlet")
public class MyServlet extends HttpServlet{
  .............  
}

 这样也可以控制Servlet

 

同样的Filter 通过实现Filter接口,并且配置@WebFilter对应的注解的属性完成

Lister通过实现相应的事件监听接口,并且@WebListener对应的注解的属性完成

posted @ 2017-03-14 22:35  海角七号已存在  阅读(82)  评论(0)    收藏  举报