SpringBoot整合Servlet
在传统的Servlet开发时,我们创建一个Servlet,需要在web.xml里做配置:
<servlet> <servlet-name>FirstServlet</servlet-name> <servlet-class>com.linhw.demo.servlet.MyFirstServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>FirstServlet</servlet-name> <url-pattern>/first</url-pattern> </servlet-mapping>
这样每新增一个Servlet类都要在web.xml增加一段类似的配置,很繁琐,降低了开发的效率。
SpringBoot提供了两种方式来解决整个问题:
- 通过注解扫描完成 Servlet组件的注册
- 通过方法完成 Servlet组件的注册
引入依赖:
<!-- 核心启动器, 包括auto-configuration、logging and YAML --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <!-- building web, including RESTful, applications using Spring MVC. 使用Tomcat作为嵌入式容器, @RestController由这个starter提供--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
二、通过注解扫描完成 Servlet组件的注册
在servlet3.0以后,web.xml中对Servlet配置,同样可以在@WebServlet注解中配置。
@WebServlet(name="FirstServlet", urlPatterns={"/first"}) public class MyFirstServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doPost(req, resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("FirstServlet Enter ......"); } }
@WebServlet属性详解:
- name:类型String,指定Servlet 的 name 属性,等价于 <servlet-name>。如果没有显式指定,则该 Servlet 的取值即为类的全限定名。
- value:类型String[],该属性等价于 urlPatterns 属性。两个属性不能同时使用。
- urlPatterns:类型String[],指定一组 Servlet 的 URL 匹配模式。等价于<url-pattern>标签。
- loadOnStartup:类型int,指定 Servlet 的加载顺序,等价于 <load-on-startup>标签。
- initParams:类型WebInitParam[],指定一组 Servlet 初始化参数,等价于<init-param>标签。
- asyncSupported:类型boolean, 声明 Servlet 是否支持异步操作模式,等价于<async-supported> 标签。
- description:String类型,该 Servlet 的描述信息,等价于 <description>标签。
- displayName:String类型,该 Servlet 的显示名,通常配合工具使用,等价于 <display-name>标签。
使用注解的方式必须在SpringBoot启动类增加@ServletComponentScan注解,这样SpringBoot 启动时会扫描@WebServlet,实例化这些类。
二、通过方法完成 Servlet组件的注册
/** * 与第一种的区别,就是没有加@WebServlet注解 */ public class MySecondServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doPost(req, resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("MySecondServlet Enter ......"); } }
这种方式需要在配置类上以@Bean的形式注入到Spring容器中。
@Configuration public class BootConfig { /** * 以@Bean注解实例化Servlet,注入到容器中,方法名称就是bean name */ @Bean public ServletRegistrationBean getServlet(){ ServletRegistrationBean secondServlet = new ServletRegistrationBean(new MySecondServlet()); secondServlet.addUrlMappings(new String[]{"/second"}); return secondServlet; } }
时刻与技术进步,每天一点滴,日久一大步!!!
本博客只为记录,用于学习,如有冒犯,请私信于我。