今天我们来讨论一下,SpringBoot怎么整合Servlet....
在传统的Servlet开发时,我们创建一个Servlet,.需要在web.xml里做配置,相信大家在刚开始学习Servlet时,都会在web.xml里做如下配置:
<servlet>
<servlet-name>FirstServlet</servlet-name>
<servlet-class>com.llp.servlet.FirstServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>FirstServlet</servlet-name>
<url-pattern>/first</url-pattern>
</servlet-mapping>
这样每写一个Servlet类都要在web.xml配置一段类似的代码,实在尤为繁琐,降低了开发的效率。让我们来看看SpringBoot是怎样快速简洁的解决这个问题的。
第一种方式:通过注解扫描完成 Servlet 组件的注册
第一步:创建项目,引入相关依赖
<dependencies>
//导入web开发时,需要的jar包都在pring-boot-starter-web里
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.0.4.RELEASE</version>
</dependency>
</dependencies>
第二步:创建Servlet类继承HttpServlet实现doGet()或者doPost()方法,并加上@WebServlet注解
@WebServlet(name="FirstServlet",urlPatterns="/first")
public class FirstServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//TODO Auto-generated method stub super.doGet(req, resp);
}
}
第三步:启动主程序类进行测试
@SpringBootApplication
@ServletComponentScan //在springBoot启动时会自动扫描@WebServlet,并将该类实例化
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
在第二步时引入了@WebServlet(name="FirstServlet",urlPatterns="/first")
其实name就相当于传统中web.xml里配置的<servlet-name>FirstServlet</servlet-name>
urlPatterns相当于<url-pattern>/first</url-pattern>,
而@WebServlet作用于哪个类就相当于是<servlet-class>com.llp.servlet.FirstServlet</servlet-class>。
在第三步中使用了@ServletComponentScan ,它的作用主要是加载@WebServlet,并将被@WebServlet修饰的类实例化
这样就解决了传统web开发中servlet配置的繁琐。
第二种方式:通过方法完成 Servlet 组件的注册
第一步:同上引入相关依赖
第二步:同上创建Servlet类并继承HttpServlet
/**
*SpringBoot 整合 Servlet 方式二
*/
public class SecondServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("SecondServlet..........");
}
}
和方式一相比,方式二不引入@WebServlet注解了,只是一个传统的Servlet类,同样主程序类中也不需要@ServletComponentScan来扫描@WebServlet注解了。
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
那么我们怎么办呢?在主程序类中添加一个方法,方法名叫什么无所谓,但是这个方法的返回值必须是ServletRegistrationBean对象,这个对象就是用于注册Servlet实例的一个对象,在这个对象的构造方法中,放相应的Servlet类即可。
@SpringBootApplication
public class App2 {
public static void main(String[] args) {
SpringApplication.run(App2.class, args);
}
@Bean
public ServletRegistrationBean getServletRegistrationBean(){
ServletRegistrationBean bean = new ServletRegistrationBean(new SecondServlet());
bean.addUrlMappings("/second");
return bean;
}
}
这样我们就可以进行测试了。。。。未完,待更新,每天持续充电中!