一塊兒學Spring之Web基礎篇

概述

在平常的開發中Web項目集成Spring框架,已經愈來愈重要,而Spring框架已經成爲web開發的主流框架之一。本文主要講解Java開發Web項目集成Spring框架的簡單使用,以及使用Spring和不使用Spring框架,二者之間的差別。 僅供學習分享使用,若有不足之處,還請指正。html

頁面訪問流程圖

本示例的頁面訪問流程圖以下所示:前端

 

不使用Spring框架的開發流程

步驟以下:java

1. 新增Service和Dao對應的類及接口實現

以下所示:在Service中對Dao進行了強關聯web

 1 package com.hex.Dao;
 2 
 3 /**
 4  * 學生Dao
 5  * @author Administrator
 6  *
 7  */
 8 public interface IStudentDao {
 9     public String GetStudentById(int id);
10 }
11 ////////////////////////////////////////
12 package com.hex.Dao;
13 
14 /**
15  * 學生Dao
16  * @author Administrator
17  *
18  */
19 public class StudentDaoImpl implements IStudentDao {
20 
21     /**
22      * 查詢學生信息
23      */
24     @Override
25     public String GetStudentById(int id) {
26         
27         return "hex";
28     }
29 
30 }
31 ////////////////////////////////////////
32 package com.hex.Service;
33 
34 /**
35  * 學生服務接口
36  * @author Administrator
37  *
38  */
39 public interface IStudentService {
40     public String GetStudentById(int id);
41 }
42 ////////////////////////////////////////
43 package com.hex.Service;
44 
45 import com.hex.Dao.IStudentDao;
46 import com.hex.Dao.StudentDaoImpl;
47 
48 /**
49  * 學生服務實現類
50  * @author Administrator
51  *
52  */
53 public class StudentServiceImpl implements IStudentService {
54 
55     private IStudentDao studentDao;
56     
57     public void setStudentDao(IStudentDao studentDao) {
58         this.studentDao = studentDao;
59     }
60 
61     @Override
62     public String GetStudentById(int id) {
63         //studentDao=new StudentDaoImpl();
64         return studentDao.GetStudentById(id);
65     }
66 
67 }
View Code

2. 新增HomeServlet類,並須要經過new的方式聲明studentService對象

以下所示:spring

 1 package com.hex.servlet;
 2 
15 /**
16  * 訪問Servlet實現類
17  */
18 public class HomeServlet extends HttpServlet {
19     private static final long serialVersionUID = 1L;
20     
21     private IStudentService studentService;
22       
23 
24     /**
25      * 構造函數26      */
27     public HomeServlet() {
28        
29     }
30     
31     /**
32      * 初始化時聲明studentService對象
33      */
34     @Override
35     public void init() throws ServletException {
36         studentService=new StudentServiceImpl();
37     }
38 
39     /**
40      * Get方法
41      */
42     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
43         
44         String studentName=studentService.GetStudentById(0);
45         request.setAttribute("studentName", studentName);
46         request.getRequestDispatcher("/jsp/Home.jsp").forward(request, response);
47     }
48 
49     /**
50      * Post方法,此處和Get方法同
51      */
52     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
53         // TODO Auto-generated method stub
54         doGet(request, response);
55     }
56 
57 }

3. 前端頁面進行訪問便可

以下所示:數據庫

1 <a href="../HomeServlet">點擊進入</a>

4. 缺點:

此處造成了強依賴,即HomeServlet須要StudentServiceImpl對象。且StudentServiceImpl須要StudentDao的支持。app

採用Spring的方式進行訪問

1. 須要在web.xml文件中配置Spring對應的監聽器

以下所示:框架

applicationContext.xml 位於src目錄,因此須要加上classpath,是Spring容器的配置文件jsp

1 <context-param>
2     <param-name>contextConfigLocation</param-name>
3     <param-value>classpath:applicationContext.xml
4     </param-value>
5 </context-param>
6 <!-- 配置spring-web.jar對應的監聽器 ,Tomcat啓動時,自動初始化IOC容器 -->
7 <listener>
8     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
9 </listener>

2. 配置Spring的IOC容器

以下所示:依賴引用對象屬性採用ref方式,若是是值對象,則採用value方式。ide

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4 xsi:schemaLocation="http://www.springframework.org/schema/beans
 5  http://www.springframework.org/schema/beans/spring-beans.xsd">
 6      <!-- Dao依賴於數據庫的底層操做,本示例不予深刻 -->
 7      <bean id="studentDao" class="com.hex.Dao.StudentDaoImpl"></bean>
 8      <!-- Service層依賴於StudentDao,採用set的方式注入 -->
 9      <bean id="studentService" class="com.hex.Service.StudentServiceImpl">
10          <property name="studentDao" ref="studentDao"></property>
11      </bean>
12 </beans>

3. 在Servlet中,引入ApplicationContext對象,將Tomcat容器和Spring的IOC容器進行關聯

以下所示:其餘方法保持不變,增長studentService對象的getter和setter方法,而後經過容器注入的聲明方式產生對象。在StudentServiceImpl中對StudengDao的依賴採用一樣方法進行注入。

 1 package com.hex.servlet;
 2 
 3 /**
 4  * Servlet實現類
 5  */
 6 public class HomeServlet extends HttpServlet {
 7     private static final long serialVersionUID = 1L;
 8     
 9     private IStudentService studentService;
10        
11     public IStudentService getStudentService() {
12         return studentService;
13     }
14 
15     public void setStudentService(IStudentService studentService) {
16         this.studentService = studentService;
17     }
18     
19     /**
20      * 初始化時獲取Sping的IOC容器中的bean對象
21      */
22     @Override
23     public void init() throws ServletException {
24         //Web項目獲取Spring上下文對象。
25         ApplicationContext context=WebApplicationContextUtils.getWebApplicationContext(this.getServletContext());
26         studentService=(IStudentService)context.getBean("studentService");
27     }
28 }

4. 優點:

此方式將Servlet和Service及Dao之間進行了解耦,靈活擴展性大大加強。

小知識

若是Spring的IOC容器文件有多個,能夠採用Import的方式進行引入,以下所示:

1 <!-- 第二種方式,採用import方式引入其餘容器文件 -->
2 <import resource="applicationContext2.xml"/>

在web.xml中配置servlet的方式,以下所示:

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
 3     <display-name>FirstWebSpring</display-name>
 4     <servlet>
 5         <description>
 6         </description>
 7         <display-name>HomeServlet</display-name>
 8         <servlet-name>HomeServlet</servlet-name>
 9         <servlet-class>com.hex.servlet.HomeServlet</servlet-class>
10     </servlet>
11     <servlet-mapping>
12         <servlet-name>HomeServlet</servlet-name>
13         <url-pattern>/HomeServlet</url-pattern>
14     </servlet-mapping>
15     <welcome-file-list>
16         <welcome-file>index.html</welcome-file>
17         <welcome-file>index.htm</welcome-file>
18         <welcome-file>index.jsp</welcome-file>
19         <welcome-file>default.html</welcome-file>
20         <welcome-file>default.htm</welcome-file>
21         <welcome-file>default.jsp</welcome-file>
22     </welcome-file-list>
23     <!-- 配置容器地址 -->
24     <!-- 第一種方式若是要加載多個配置文件,能夠寫多個,以下所示:
25         <param-value>
26             classpath:applicationContext.xml,
27             classpath:applicationContext2.xml
28         </param-value>
29      -->
30     <context-param>
31         <param-name>contextConfigLocation</param-name>
32         <param-value>
33             classpath:applicationContext.xml
34         </param-value>
35     </context-param>
36     <!-- 配置spring-web.jar對應的監聽器 ,Tomcat啓動時,自動初始化IOC容器 -->
37     <listener>
38         <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
39     </listener>
40 </web-app>
View Code

備註

繩鋸木斷,水滴石穿。

相關文章
相關標籤/搜索