在平常的開發中Web項目集成Spring框架,已經愈來愈重要,而Spring框架已經成爲web開發的主流框架之一。本文主要講解Java開發Web項目集成Spring框架的簡單使用,以及使用Spring和不使用Spring框架,二者之間的差別。 僅供學習分享使用,若有不足之處,還請指正。html
本示例的頁面訪問流程圖以下所示:前端
步驟以下:java
以下所示:在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 }
以下所示: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 }
以下所示:數據庫
1 <a href="../HomeServlet">點擊進入</a>
此處造成了強依賴,即HomeServlet須要StudentServiceImpl對象。且StudentServiceImpl須要StudentDao的支持。app
以下所示:框架
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>
以下所示:依賴引用對象屬性採用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>
以下所示:其餘方法保持不變,增長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 }
此方式將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>
繩鋸木斷,水滴石穿。