SpringBoot再回首:SpringBoot之Servlet用法
今天我們來討論一下,SpringBoot怎麼整合Servlet....
在傳統的Servlet開發時,我們建立一個Servlet,.需要在web.xml裡做配置,相信大家在剛開始學習Servlet時,都會在web.xml裡做如下配置:
<servlet> <servlet-name>FirstServlet</servlet-name> <servlet-class>com.bjsxt.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.bjsxt.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;
}
}
這樣我們就可以進行測試了。。。。未完,待更新,每天持續充電中!