在Spring Boot中,使用组件注册方式整合内嵌Servlet容器的Servlet、Filter、Listener三大组件时,只需将这些自定义组件通过ServletRegistrationBean、FilterRegistrationBean、ServletListenerRegistrationBean类注册到容器中即可,这些类相当于将组件配置在web.xml中。
1. 使用组件注册方式整合Servlet
(1)创建自定义Servlet类。在chapter05项目中创建名为com.itheima.servletComponent的包,并在该包下创建一个自定义Servlet类MyServlet,内容如文件1所示。
文件1 MyServlet.java
importorg.springframework.stereotype.Component;importjavax.servlet.ServletException;importjavax.servlet.http.*;importjava.io.IOException;/**
* 自定义Servlet类
*/@ComponentpublicclassMyServletextendsHttpServlet{@OverrideprotectedvoiddoGet(HttpServletRequest req,HttpServletResponse resp)throwsServletException,IOException{this.doPost(req, resp);}@OverrideprotectedvoiddoPost(HttpServletRequest req,HttpServletResponse resp)throwsServletException,IOException{
resp.getWriter().write("hello MyServlet");}}
文件1中,使用@Component注解将MyServlet类作为组件注入Spring容器。MyServlet类继承自HttpServlet,通过HttpServletResponse对象向页面输出“hello MyServlet”。
(2)创建Servlet组件配置类。在项目com.itheima.config包下创建一个Servlet组件配置类ServletConfig,用来对Servlet相关组件进行注册,内容如文件2所示。
文件2 ServletConfig.java
importcom.itheima.servletComponent.MyServlet;importorg.springframework.boot.web.servlet.ServletRegistrationBean;importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Configuration;/**
* 嵌入式Servlet容器三大组件配置
*/@ConfigurationpublicclassServletConfig{// 注册Servlet组件@BeanpublicServletRegistrationBeangetServlet(MyServlet myServlet){ServletRegistrationBean registrationBean =newServletRegistrationBean(myServlet,"/myServlet");return registrationBean;}}
文件2中,使用@Configuration注解定义了一个Servlet组件配置类ServletConfig,并添加了一个getServlet(MyServlet myServlet)方法,通过组件注册的方式注册自定义的MyServlet组件。在注册自定义的MyServlet组件时,指定了匹配路径为“/myServlet”,并使用@Bean注解将重新组装的ServletRegistrationBean类对象作为Bean组件返回。
启动项目进行测试。项目启动成功后,在浏览器上访问“http://localhost:8080/myServlet”,效果如图1所示。