前言
在学习Servlet、Filter、Listener的时候,我们知道可以有2种注册方式,即可以在web.xml文件中注册,也可以利用对应的注解实现注册。那么在SpringBoot中,如果我们还要创建使用Servlet、Filter、Listener这3个类,那么该如何使用呢?
今天 壹哥 就带大家学习在SpringBoot中如何注册使用Servlet、Filter、Listener这3个类。
一. Spring Boot中注册配置Servlet,Filter和Listener
1. 概述
我们在Spring Boot中使用内嵌的Servlet容器时,可以通过使用Spring Bean的方式,或者扫描Servlet组件的方式来注册Servlet,Filter及Listener(比如HttpSessionListener)。
Spring Boot 为我们提供了ServletRegistrationBean、FilterRegistrationBean、ServletListenerRegistrationBean 三个类分别用来注册 Servlet、Filter、Listener,接下来我就通过代码给大家讲解在SpringBoot中如何注册Servlet。
2. 示例代码
我们可以先看一段示例代码,对用ServletRegistrationBean类来实现Servlet注册有个大致印象。
importjavax.servlet.http.HttpServlet; importjavax.servlet.http.HttpServletRequest; importjavax.servlet.http.HttpServletResponse; importjava.io.IOException; /*** @author 一一哥*/publicclassRegisterServletextendsHttpServlet { protectedvoidservice(HttpServletRequestreq, HttpServletResponseresp) throwsIOException { Stringname=getServletConfig().getInitParameter("name"); Stringsex=getServletConfig().getInitParameter("sex"); resp.getOutputStream().println("name is "+name); resp.getOutputStream().println("sex is "+sex); } } publicServletRegistrationBeanregisterServlet() { ServletRegistrationBeanservletRegistrationBean=newServletRegistrationBean( newRegisterServlet(), "/registerServlet"); servletRegistrationBean.addInitParameter("name", "一一哥"); servletRegistrationBean.addInitParameter("sex", "man"); returnservletRegistrationBean; }
3. Servlet 3.0组件扫描注册
Servlet 3.0 之前,Servlet、Filter、Listener 这些组件都需要在 web.xml 中进行配置,3.0 之后不再需要 web.xml 这个配置文件了,所有的组件都可以通过代码或者注解来达到注册的目的。Servlet 3.0 提供了3个注解来代替:
- @WebServlet注解代替 Servlet 的xml配置方式;
- @WebFilter注解代替 Filter 的xml配置;
- @WebListener注解代替 Listener 的xml配置。
二. Spring Boot中Servlet的注册使用
接下来我会带大家学习在Spring Boot中如何进行Servlet的注册使用,本文主要是讲解两种实现方式,即组件注册方式和注解实现方式。
1. 创建Web项目
首先我会创建一个Spring Boot的Web项目,添加Web相关依赖包,具体过程略,请结合之前的章节,并参考下图创建。
2. 组件注册方式
然后我先讲解组件注册的方式,看以这种方式如何实现Servlet的注册使用。
2.1 创建UserServlet类
这里我随便创建一个UserServlet类,继承HttpServlet。
packagecom.yyg.boot.web; importlombok.extern.slf4j.Slf4j; importjavax.servlet.ServletException; importjavax.servlet.http.HttpServlet; importjavax.servlet.http.HttpServletRequest; importjavax.servlet.http.HttpServletResponse; importjava.io.IOException; /*** @Author 一一哥Sun* @Date Created in 2020/3/29* @Description Description*/publicclassUserServletextendsHttpServlet { protectedvoiddoGet(HttpServletRequestreq, HttpServletResponseresp) throwsServletException, IOException { log.warn("第一种Servlet实现方式-->组件注册方式"); resp.getWriter().write("success"); } }
2.2 注册Servlet组件
我们可以在启动类Application或者别的配置类中,利用ServletRegistrationBean来注册刚才创建的UserServlet组件。
packagecom.yyg.boot; importcom.yyg.boot.web.UserServlet; importorg.springframework.boot.SpringApplication; importorg.springframework.boot.autoconfigure.SpringBootApplication; importorg.springframework.boot.web.servlet.ServletRegistrationBean; importorg.springframework.context.annotation.Bean; /*** @Author 一一哥Sun* @Date Created in 2020/3/29* @Description Description*/publicclassServletApplication { publicstaticvoidmain(String[] args){ SpringApplication.run(ServletApplication.class,args); } /***ServletRegistrationBean:注册创建的Servlet类*/publicServletRegistrationBeangetServletRegistrationBean(){ ServletRegistrationBeanbean=newServletRegistrationBean(newUserServlet()); //url映射路径bean.addUrlMappings("/user"); returnbean; } }
2.3 启动程序进行测试
接下来我们启动程序,在浏览器输入如下地址:
http://localhost:8080/user
这时候可以看到控制台中成功地输出了如下信息。
而且浏览器中也显示了如下内容:
这就说明我们的UserServlet成功的注册完毕。
3. 注解注册方式
然后我再以注解的方式来讲解如何注册使用Servlet。
3.1 创建OrderServlet类
这里我创建一个OrderServlet类,在该类上添加@WebServlet注解。
packagecom.yyg.boot.web; importlombok.extern.slf4j.Slf4j; importjavax.servlet.ServletException; importjavax.servlet.annotation.WebServlet; importjavax.servlet.http.HttpServlet; importjavax.servlet.http.HttpServletRequest; importjavax.servlet.http.HttpServletResponse; importjava.io.IOException; /*** @Author 一一哥Sun* @Date Created in 2020/3/29* @Description 第二种实现Servlet的方式, 通过@WebServlet注解来实现注册.*/name="OrderServlet", urlPatterns="/order") (publicclassOrderServletextendsHttpServlet { protectedvoiddoGet(HttpServletRequestreq, HttpServletResponseresp) throwsServletException, IOException { log.warn("第2种Servlet实现方式-->注解实现方式"); resp.getWriter().write("success"); } }
3.2 添加@ServletComponentScan注解
注意,如果使用的是 Spring Boot 内嵌的Web服务器,需要在配置类上面添加额外的 @ServletComponentScan 注解来开启 Servlet 组件扫描功能。如果使用的是独立的Tomcat服务器,则不需要添加,它会使用服务器内部的自动发现机制。
本案例中需要添加@ServletComponentScan注解,扫描Servlet类所在的包。
packagecom.yyg.boot; importcom.yyg.boot.web.UserServlet; importorg.springframework.boot.SpringApplication; importorg.springframework.boot.autoconfigure.SpringBootApplication; importorg.springframework.boot.web.servlet.ServletComponentScan; importorg.springframework.boot.web.servlet.ServletRegistrationBean; importorg.springframework.context.annotation.Bean; /*** @Author 一一哥Sun* @Date Created in 2020/3/29* @Description Description*/basePackages="com.yyg.boot.web") (publicclassServletApplication { publicstaticvoidmain(String[] args){ SpringApplication.run(ServletApplication.class,args); } }
3.3 启动程序进行测试
然后我们启动程序,在浏览器输入如下地址:
http://localhost:8080/user
这样就可以看到控制台中成功输出如下信息:
浏览器中也会显示如下内容:
这样,我就用注解的方式注册使用了一个Servlet。
三. Filter与Listener的使用
另外Filter、Listener的使用,与Servlet的用法类似,在此我就不再进行一一讲解了,感兴趣的朋友可以自行尝试。
结语
这样,我们就掌握了如何在SpringBoot中注册使用Servlet、Filter、Listener了,你学会了吗?