在 Web 項(xiàng)目中使用 Spring 框架,首先要解決在 web 層(這里指 Servlet)中獲取到 Spring容器的問題。只要在 web 層獲取到了 Spring 容器,便可從容器中獲取到 Service 對(duì)象。
舉例:springWeb 項(xiàng)目(在 spring-mybatis 基礎(chǔ)上修改)
將spring-mybatis項(xiàng)目中以下內(nèi)容復(fù)制到當(dāng)前項(xiàng)目中:
● Service層、Dao層全部代碼
● 配置文件applicationContext.xml及jdbc.properties,mybatis.xml
● pom.xml
● 加入servlet ,jsp依賴
在之前原有的pom.xml文件中再加入以下的內(nèi)容:
<!-- servlet依賴 -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<!-- jsp依賴 -->
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.2.1-b03</version>
<scope>provided</scope>
</dependency>
Step3:定義 index 頁(yè)面
Step4:定義 LoginServlet(重點(diǎn)代碼)
Step5:定義 success 頁(yè)面
當(dāng)表單提交,跳轉(zhuǎn)到 success.jsp 后,多刷新幾次頁(yè)面,查看后臺(tái)輸出,發(fā)現(xiàn)每刷新一次頁(yè)面,就 new 出一個(gè)新的 Spring 容器。即,每提交一次請(qǐng)求,就會(huì)創(chuàng)建一個(gè)新的 Spring 容器。對(duì)于一個(gè)應(yīng)用來說,只需要一個(gè) Spring 容器即可。所以,將 Spring 容器的創(chuàng)建語句放在 Servlet 的 doGet()或 doPost()方法中是有問題的。
此時(shí),可以考慮,將 Spring 容器的創(chuàng)建放在 Servlet 進(jìn)行初始化時(shí)進(jìn)行,即執(zhí)行 init()方法時(shí)執(zhí)行。并且,Servlet 還是單例多線程的,即一個(gè)業(yè)務(wù)只有一個(gè) Servlet 實(shí)例,所有執(zhí)行該業(yè)務(wù)的用戶執(zhí)行的都是這一個(gè) Servlet 實(shí)例。這樣,Spring 容器就具有了唯一性了。
但是,Servlet 是一個(gè)業(yè)務(wù)一個(gè) Servlet 實(shí)例,即 LoginServlet 只有一個(gè),但還會(huì)有StudentServlet、TeacherServlet 等。每個(gè)業(yè)務(wù)都會(huì)有一個(gè) Servlet,都會(huì)執(zhí)行自己的 init()方法,也就都會(huì)創(chuàng)建一個(gè) Spring 容器了。這樣一來,Spring 容器就又不唯一了。