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对应的注解的属性完成

浙公网安备 33010602011771号