1. 程式人生 > >SpringBoot再回首:SpringBoot之Servlet用法

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;

    }

}

這樣我們就可以進行測試了。。。。未完,待更新,每天持續充電中!