Spring Boot Servlet支持介绍

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

当使用Spring-Boot时,嵌入式Servlet容器通过扫描注解的方式注册Servlet、Filter和Servlet规范的所有监听器(如HttpSessionListener监听器)。 
Spring boot 的主 Servlet 为 DispatcherServlet,其默认的url-pattern为“/”。也许我们在应用中还需要定义更多的Servlet。

在spring boot中添加自己的Servlet有两种方法,代码注册Servlet和注解自动注册(Filter和Listener也是如此)。 
一、代码注册通过ServletRegistrationBean、 FilterRegistrationBean 和 ServletListenerRegistrationBean 获得控制。 
也可以通过实现 ServletContextInitializer 接口直接注册。

二、在 SpringBootApplication 上使用@ServletComponentScan注解后,Servlet、Filter、Listener 可以直接通过 @WebServlet、@WebFilter、@WebListener 注解自动注册,无需其他代码。

注解Servlet

1import javax.servlet.ServletException; 2import javax.servlet.annotation.WebServlet; 3import javax.servlet.http.HttpServlet; 4import javax.servlet.http.HttpServletRequest; 5import javax.servlet.http.HttpServletResponse; 6 7@WebServlet(urlPatterns="/myServlet2/*", description="Servlet的说明") 8public class MyServlet2 extends HttpServlet{ 9 10 private static final long serialVersionUID = 1L; 11 12 @Override 13 protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 14 System.out.println(">>>>>>>>>>doGet()<<<<<<<<<<<"); 15 doPost(req, resp); 16 } 17 18 @Override 19 protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 20 System.out.println(">>>>>>>>>>doPost()<<<<<<<<<<<"); 21 resp.setContentType("text/html"); 22 PrintWriter out = resp.getWriter(); 23 out.println("<html>"); 24 out.println("<head>"); 25 out.println("<title>Hello World</title>"); 26 out.println("</head>"); 27 out.println("<body>"); 28 out.println("<h1>这是:myServlet2</h1>"); 29 out.println("</body>"); 30 out.println("</html>"); 31 } 32}

注解式过滤器 

1import javax.servlet.Filter; 2import javax.servlet.FilterChain; 3import javax.servlet.FilterConfig; 4import javax.servlet.ServletException; 5import javax.servlet.ServletRequest; 6import javax.servlet.ServletResponse; 7import javax.servlet.annotation.WebFilter; 8 9/** 10 * 11 * 使用注解标注过滤器 12 * @WebFilter将一个实现了javax.servlet.Filter接口的类定义为过滤器 13 * 属性filterName声明过滤器的名称,可选 14 * 属性urlPatterns指定要过滤的URL模式,也可使用属性value来声明.(指定要过滤的URL模式是必选属性) 15 */ 16@WebFilter(filterName="myFilter",urlPatterns="/*") 17publicclass MyFilter implements Filter{ 18 19 @Override 20 publicvoid init(FilterConfig config) throws ServletException { 21 System.out.println("过滤器初始化"); 22 } 23 24 25 @Override 26 publicvoid doFilter(ServletRequest request, ServletResponse response, 27 FilterChain chain) throws IOException, ServletException { 28 System.out.println("执行过滤操作"); 29 chain.doFilter(request, response); 30 } 31 32 @Override 33 publicvoid destroy() { 34 System.out.println("过滤器销毁"); 35 } 36}

注解式监听器

1import javax.servlet.ServletContextEvent; 2import javax.servlet.ServletContextListener; 3import javax.servlet.annotation.WebListener; 4 5/** 6 * 使用@WebListener注解,实现ServletContextListener接口 7 * 8 * @author Angel(QQ:412887952) 9 * @version v.0.1 10 */ 11@WebListener 12public class MyServletContextListener implements ServletContextListener { 13 14 @Override 15 public void contextDestroyed(ServletContextEvent arg0) { 16 System.out.println("ServletContex销毁"); 17 } 18 19 @Override 20 public void contextInitialized(ServletContextEvent arg0) { 21 System.out.println("ServletContex初始化"); 22 } 23}

监听Session的创建与销毁

1import javax.servlet.annotation.WebListener; 2import javax.servlet.http.HttpSessionEvent; 3import javax.servlet.http.HttpSessionListener; 4 5/** 6 * 监听Session的创建与销毁 7 * 8 */ 9@WebListener 10public class MyHttpSessionListener implements HttpSessionListener { 11 12 @Override 13 publicvoid sessionCreated(HttpSessionEvent se) { 14 System.out.println("Session 被创建"); 15 } 16 17 @Override 18 publicvoid sessionDestroyed(HttpSessionEvent se) { 19 System.out.println("ServletContex初始化"); 20 } 21 22}

注意不要忘记在 SpringBootSampleApplication.java 上添加 @ServletComponentScan 注解。

启动的过程中我们会看到输出:

ServletContex初始化

过滤器初始化

服务启动后,随便访问一个页面,会看到输出:

执行过滤操作

Session 被创建

点赞
收藏

评论区

加载中...

相关推荐

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

java代码073

code073.javapackagepack02;importjava.io.IOException;importjava.io.PrintWriter;importjava.util.UUID;importjavax.servlet.ServletException;importjavax.servlet.annotation.Multip

SpringBoot 注册Servlet三大组件【Servlet、Filter、Listener】

由于SpringBoot默认是以jar包的方式启动嵌入式的Servlet容器来启动SpringBoot的web应用,没有web.xml文件。注册三大组件,classMyServlet()/classMyListener/classMyFilter需要自己亲自编写!!1\.classMyServletpa

Spring Boot使用笔记

1\. boot将自动把bean类型为Servlet,Filter,listener等servlet规范中的类型,向boot内嵌的web容器注册,需要控制filter、servlet的初始化和参数等,可以使用FilterRegistrationBean和ServletRegistrationBean,来自文档https://docs.spring.i

SpringBoot动态注册Servlet

1、SpringBoot配置自定义监听器实质上是在servlet3.0的容器中,注册一个Servlet。功能:监听对应的请求路径urlapi@Slf4j@ConfigurationpublicclassSpringBootAutoConfigure