SSM框架——具體整合教程(Spring+SpringMVC+MyBatis)

weixin_34119545發表於2017-06-02

        使用SSMSpringSpringMVCMybatis)已經有三個多月了。專案在技術上已經沒有什麼難點了,基於現有的技術就能夠實現想要的功能。當然肯定有非常多能夠改進的地方。之前沒有記錄SSM整合的過程。這次剛剛好基於自己的一個小專案又一次搭建了一次,並且比專案搭建的要更好一些。曾經解決這個問題的過程和方法並沒有及時記錄。以後在自己的小專案中遇到我再整理分享一下。這次先說說三大框架整合過程

個人覺得使用框架並非非常難,關鍵要理解其思想,這對於我們提高程式設計水平非常有幫助。只是,假設用都不會。談思想就變成紙上談兵了!!!

先技術。再思想。實踐出真知。

(可通過圖片水印檢視部落格地址)


1、基本概念


1.1、Spring


        Spring是一個開源框架,Spring是於2003 年興起的一個輕量級的Java 開發框架。由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中闡述的部分理念和原型衍生而來。

它是為了解決企業應用開發的複雜性而建立的。Spring使用主要的JavaBean來完畢曾經僅僅可能由EJB完畢的事情。然而,Spring的用途不僅限於server端的開發。從簡單性、可測試性和鬆耦合的角度而言,不論什麼Java應用都能夠從Spring中受益。 簡單來說。Spring是一個輕量級的控制反轉(IoC)和麵向切面(AOP)的容器框架。


1.2、SpringMVC

     

        Spring MVC屬於SpringFrameWork的興許產品,已經融合在Spring Web Flow裡面。Spring MVC 分離了控制器、模型物件、分派器以及處理程式物件的角色,這樣的分離讓它們更easy進行定製。


1.3、MyBatis


       MyBatis 本是apache的一個開源專案iBatis, 2010年這個專案由apache software foundation 遷移到了google code,而且改名為MyBatis MyBatis是一個基於Java持久層框架。iBATIS提供的持久層框架包含SQL MapsData Access ObjectsDAOMyBatis 消除了差點兒全部的JDBC程式碼和引數的手工設定以及結果集的檢索。MyBatis 使用簡單的 XML或註解用於配置和原始對映。將介面和 Java POJOsPlain Old Java Objects,普通的 Java物件)對映成資料庫中的記錄。



2、開發環境搭建



假設須要,參看之前的博文:http://blog.csdn.net/zhshulin/article/details/30779873



3、Maven Web專案建立


假設須要,參看之前的博文:http://blog.csdn.net/zhshulin/article/details/37921705



4、SSM整合

      

        以下主要介紹三大框架的整合,至於環境的搭建以及專案的建立,參看上面的博文。這次整合我分了2個配置檔案,各自是spring-mybatis.xml,包括springmybatis的配置檔案。還有個是spring-mvc的配置檔案,此外有2個資原始檔jdbc.propertislog4j.properties

完整資料夾結構例如以下(最後附上原始碼下載地址,不建議直接使用原始碼,由於此教程已經有了所有程式碼):


使用框架都是較新的版本號

       Spring 4.0.2 RELEASE

       Spring MVC 4.0.2 RELEASE

       MyBatis 3.2.6


4.1、Maven引入須要的JAR包

         為了方便後面說的時候不須要引入JAR包。我這裡直接給出全部須要的JAR包,這都是主要的JAR包,每一個包的是幹什麼的都有凝視,就不再多說了。

pom.xml

<properties>
		<!-- spring版本號號 -->
		<spring.version>4.0.2.RELEASE</spring.version>
		<!-- mybatis版本號號 -->
		<mybatis.version>3.2.6</mybatis.version>
		<!-- log4j日誌檔案管理包版本號 -->
		<slf4j.version>1.7.7</slf4j.version>
		<log4j.version>1.2.17</log4j.version>
	</properties>

	<dependencies>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.11</version>
			<!-- 表示開發的時候引入。公佈的時候不會載入此包 -->
			<scope>test</scope>
		</dependency>
		<!-- spring核心包 -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-core</artifactId>
			<version>${spring.version}</version>
		</dependency>

		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-web</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-oxm</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-tx</artifactId>
			<version>${spring.version}</version>
		</dependency>

		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-jdbc</artifactId>
			<version>${spring.version}</version>
		</dependency>

		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-aop</artifactId>
			<version>${spring.version}</version>
		</dependency>

		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context-support</artifactId>
			<version>${spring.version}</version>
		</dependency>

		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-test</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<!-- mybatis核心包 -->
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis</artifactId>
			<version>${mybatis.version}</version>
		</dependency>
		<!-- mybatis/spring包 -->
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis-spring</artifactId>
			<version>1.2.2</version>
		</dependency>
		<!-- 匯入java ee jar 包 -->
		<dependency>
			<groupId>javax</groupId>
			<artifactId>javaee-api</artifactId>
			<version>7.0</version>
		</dependency>
		<!-- 匯入Mysql資料庫連結jar包 -->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>5.1.30</version>
		</dependency>
		<!-- 匯入dbcp的jar包,用來在applicationContext.xml中配置資料庫 -->
		<dependency>
			<groupId>commons-dbcp</groupId>
			<artifactId>commons-dbcp</artifactId>
			<version>1.2.2</version>
		</dependency>
		<!-- JSTL標籤類 -->
		<dependency>
			<groupId>jstl</groupId>
			<artifactId>jstl</artifactId>
			<version>1.2</version>
		</dependency>
		<!-- 日誌檔案管理包 -->
		<!-- log start -->
		<dependency>
			<groupId>log4j</groupId>
			<artifactId>log4j</artifactId>
			<version>${log4j.version}</version>
		</dependency>
		
		
		<!-- 格式化物件。方便輸出日誌 -->
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>fastjson</artifactId>
			<version>1.1.41</version>
		</dependency>


		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-api</artifactId>
			<version>${slf4j.version}</version>
		</dependency>

		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-log4j12</artifactId>
			<version>${slf4j.version}</version>
		</dependency>
		<!-- log end -->
		<!-- 映入JSON -->
		<dependency>
			<groupId>org.codehaus.jackson</groupId>
			<artifactId>jackson-mapper-asl</artifactId>
			<version>1.9.13</version>
		</dependency>
		<!-- 上傳元件包 -->
		<dependency>
			<groupId>commons-fileupload</groupId>
			<artifactId>commons-fileupload</artifactId>
			<version>1.3.1</version>
		</dependency>
		<dependency>
			<groupId>commons-io</groupId>
			<artifactId>commons-io</artifactId>
			<version>2.4</version>
		</dependency>
		<dependency>
			<groupId>commons-codec</groupId>
			<artifactId>commons-codec</artifactId>
			<version>1.9</version>
		</dependency>
		
		
	</dependencies>

4.2、Spring與MyBatis的整合

全部須要的JAR包都引入以後,首先進行SpringMyBatis的整合,然後再進行JUnit測試,先看一個專案結構圖:


4.2.1、建立JDBC屬性檔案

jdbc.properties(檔案編碼改動為utf-8

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://10.221.10.111:8080/db_zsl
username=demao
password=demao
#定義初始連線數
initialSize=0
#定義最大連線數
maxActive=20
#定義最大空暇
maxIdle=20
#定義最小空暇
minIdle=1
#定義最長等待時間
maxWait=60000

4.2.2、建立spring-mybatis.xml配置檔案

        這個檔案就是用來完畢spring和mybatis的整合的。

這裡面也沒多少行配置。基本的就是自己主動掃描,自己主動注入,配置資料庫。凝視也非常具體。大家看看就明確了。

spring-mybatis.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:mvc="http://www.springframework.org/schema/mvc"
	xsi:schemaLocation="http://www.springframework.org/schema/beans  
                        http://www.springframework.org/schema/beans/spring-beans-3.1.xsd  
                        http://www.springframework.org/schema/context  
                        http://www.springframework.org/schema/context/spring-context-3.1.xsd  
                        http://www.springframework.org/schema/mvc  
                        http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">
	<!-- 自己主動掃描 -->
	<context:component-scan base-package="com.cn.hnust" />
	<!-- 引入配置檔案 -->
	<bean id="propertyConfigurer"
		class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
		<property name="location" value="classpath:jdbc.properties" />
	</bean>

	<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
		destroy-method="close">
		<property name="driverClassName" value="${driver}" />
		<property name="url" value="${url}" />
		<property name="username" value="${username}" />
		<property name="password" value="${password}" />
		<!-- 初始化連線大小 -->
		<property name="initialSize" value="${initialSize}"></property>
		<!-- 連線池最大數量 -->
		<property name="maxActive" value="${maxActive}"></property>
		<!-- 連線池最大空暇 -->
		<property name="maxIdle" value="${maxIdle}"></property>
		<!-- 連線池最小空暇 -->
		<property name="minIdle" value="${minIdle}"></property>
		<!-- 獲取連線最大等待時間 -->
		<property name="maxWait" value="${maxWait}"></property>
	</bean>

	<!-- spring和MyBatis完美整合。不須要mybatis的配置對映檔案 -->
	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="dataSource" ref="dataSource" />
		<!-- 自己主動掃描mapping.xml檔案 -->
		<property name="mapperLocations" value="classpath:com/cn/hnust/mapping/*.xml"></property>
	</bean>

	<!-- DAO介面所在包名。Spring會自己主動查詢其下的類 -->
	<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
		<property name="basePackage" value="com.cn.hnust.dao" />
		<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
	</bean>

	<!-- (事務管理)transaction manager, use JtaTransactionManager for global tx -->
	<bean id="transactionManager"
		class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<property name="dataSource" ref="dataSource" />
	</bean>

</beans>


4.2.3、Log4j的配置


      為了方便除錯,一般都會使用日誌來輸出資訊,Log4j是Apache的一個開放原始碼專案,通過使用Log4j,我們能夠控制日誌資訊輸送的目的地是控制檯、檔案、GUI元件。甚至是套介面server、NT的事件記錄器、UNIX Syslog守護程式等。我們也能夠控制每一條日誌的輸出格式;通過定義每一條日誌資訊的級別,我們能夠更加仔細地控制日誌的生成過程。

      Log4j的配置非常easy,並且也是通用的,以下給出一個主要的配置,換到其它專案中也無需做多大的調整。假設想做調整或者想了解Log4j的各種配置。參看我轉載的一篇博文,非常具體:

http://blog.csdn.net/zhshulin/article/details/37937365

以下給出配置檔案資料夾:


log4j.properties

#定義LOG輸出級別
log4j.rootLogger=INFO,Console,File
#定義日誌輸出目的地為控制檯
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.Target=System.out
#能夠靈活地指定日誌輸出格式,以下一行是指定詳細的格式
log4j.appender.Console.layout = org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=[%c] - %m%n

#檔案大小到達指定尺寸的時候產生一個新的檔案
log4j.appender.File = org.apache.log4j.RollingFileAppender
#指定輸出資料夾
log4j.appender.File.File = logs/ssm.log
#定義檔案最大大小
log4j.appender.File.MaxFileSize = 10MB
# 輸出所以日誌,假設換成DEBUG表示輸出DEBUG以上級別日誌
log4j.appender.File.Threshold = ALL
log4j.appender.File.layout = org.apache.log4j.PatternLayout
log4j.appender.File.layout.ConversionPattern =[%p] [%d{yyyy-MM-dd HH\:mm\:ss}][%c]%m%n

4.2.4、JUnit測試


      經過以上步驟(到4.2.2,log4j不配也沒影響)。我們已經完畢了Spring和mybatis的整合,這樣我們就能夠編寫一段測試程式碼來試試是否成功了。



4.2.4.1、建立測試用表

既然我們須要測試。那麼我們就須要建立在資料庫中建立一個測試表,這個表建的非常easy,SQL語句為:

DROP TABLE IF EXISTS `user_t`;

CREATE TABLE `user_t` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_name` varchar(40) NOT NULL,
  `password` varchar(255) NOT NULL,
  `age` int(4) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

/*Data for the table `user_t` */

insert  into `user_t`(`id`,`user_name`,`password`,`age`) values (1,'測試','sfasgfaf',24);

4.2.4.2、利用MyBatis Generator自己主動建立程式碼

參考博文:http://blog.csdn.net/zhshulin/article/details/23912615


       這個可依據表自己主動建立實體類、MyBatis對映檔案以及DAO介面。當然。我習慣將生成的介面名改為IUserDao。而不是直接用它生成的UserMapper。假設不想麻煩就能夠不改。完畢後將檔案拷貝到project中。

如圖:

4.2.4.3、建立Service介面和實現類

資料夾結構:


以下給出詳細的內容:

IUserService.jave

package com.cn.hnust.service;

import com.cn.hnust.pojo.User;

public interface IUserService {
	public User getUserById(int userId);
}

UserServiceImpl.java

package com.cn.hnust.service.impl;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;

import com.cn.hnust.dao.IUserDao;
import com.cn.hnust.pojo.User;
import com.cn.hnust.service.IUserService;

@Service("userService")
public class UserServiceImpl implements IUserService {
	@Resource
	private IUserDao userDao;
	@Override
	public User getUserById(int userId) {
		// TODO Auto-generated method stub
		return this.userDao.selectByPrimaryKey(userId);
	}

}

4.2.4.4、建立測試類

       測試類在src/test/java中建立。以下測試類中凝視掉的部分是不使用Spring時,普通情況下的一種測試方法;假設使用了Spring那麼就能夠使用註解的方式來引入配置檔案和類,然後再將service介面物件注入,就能夠進行測試了。

       假設測試成功。表示SpringMybatis已經整合成功了

輸出資訊使用的是Log4j列印到控制檯。


package org.zsl.testmybatis;

import javax.annotation.Resource;

import org.apache.log4j.Logger;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import com.alibaba.fastjson.JSON;
import com.cn.hnust.pojo.User;
import com.cn.hnust.service.IUserService;

@RunWith(SpringJUnit4ClassRunner.class)		//表示繼承了SpringJUnit4ClassRunner類
@ContextConfiguration(locations = {"classpath:spring-mybatis.xml"})

public class TestMyBatis {
	private static Logger logger = Logger.getLogger(TestMyBatis.class);
//	private ApplicationContext ac = null;
	@Resource
	private IUserService userService = null;

//	@Before
//	public void before() {
//		ac = new ClassPathXmlApplicationContext("applicationContext.xml");
//		userService = (IUserService) ac.getBean("userService");
//	}

	@Test
	public void test1() {
		User user = userService.getUserById(1);
		// System.out.println(user.getUserName());
		// logger.info("值:"+user.getUserName());
		logger.info(JSON.toJSONString(user));
	}
}

測試結果:



至此。完畢Spring和mybatis這兩大框架的整合。以下在繼續進行SpringMVC的整合。


4.3、整合SpringMVC

         上面已經完畢了2大框架的整合,SpringMVC的配置檔案單獨放。然後在web.xml中配置整合。

4.3.1、配置spring-mvc.xml

配置裡面的凝視也非常具體。在此就不說了,主要是自己主動掃描控制器,檢視模式,註解的啟動這三個。

<?xml version="1.0" encoding="UTF-8"?

> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd"> <!-- 自己主動掃描該包,使SpringMVC覺得包下用了@controller註解的類是控制器 --> <context:component-scan base-package="com.cn.hnust.controller" /> <!--避免IE執行AJAX時,返回JSON出現下載檔案 --> <bean id="mappingJacksonHttpMessageConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"> <property name="supportedMediaTypes"> <list> <value>text/html;charset=UTF-8</value> </list> </property> </bean> <!-- 啟動SpringMVC的註解功能,完畢請求和註解POJO的對映 --> <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"> <property name="messageConverters"> <list> <ref bean="mappingJacksonHttpMessageConverter" /> <!-- JSON轉換器 --> </list> </property> </bean> <!-- 定義跳轉的檔案的前字尾 ,檢視模式配置--> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <!-- 這裡的配置我的理解是自己主動給後面action的方法return的字串加上字首和字尾,變成一個 可用的url地址 --> <property name="prefix" value="/WEB-INF/jsp/" /> <property name="suffix" value=".jsp" /> </bean> <!-- 配置檔案上傳,假設沒有使用檔案上傳能夠不用配置,當然假設不配,那麼配置檔案裡也不必引入上傳元件包 --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <!-- 預設編碼 --> <property name="defaultEncoding" value="utf-8" /> <!-- 檔案大小最大值 --> <property name="maxUploadSize" value="10485760000" /> <!-- 記憶體中的最大值 --> <property name="maxInMemorySize" value="40960" /> </bean> </beans>


4.3.2、配置web.xml檔案

         這裡面對spring-mybatis.xml的引入以及配置的spring-mvc的Servlet就是為了完畢SSM整合,之前2框架整合不須要在此處進行不論什麼配置。配置一樣有具體凝視。不多解釋了。


web.xml

<?xml version="1.0" encoding="UTF-8"?>
<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"
	version="3.0">
	<display-name>Archetype Created Web Application</display-name>
	<!-- Spring和mybatis的配置檔案 -->
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>classpath:spring-mybatis.xml</param-value>
	</context-param>
	<!-- 編碼過濾器 -->
	<filter>
		<filter-name>encodingFilter</filter-name>
		<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
		<async-supported>true</async-supported>
		<init-param>
			<param-name>encoding</param-name>
			<param-value>UTF-8</param-value>
		</init-param>
	</filter>
	<filter-mapping>
		<filter-name>encodingFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
	<!-- Spring監聽器 -->
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>
	<!-- 防止Spring記憶體溢位監聽器 -->
	<listener>
		<listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>
	</listener>

	<!-- Spring MVC servlet -->
	<servlet>
		<servlet-name>SpringMVC</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>classpath:spring-mvc.xml</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>
		<async-supported>true</async-supported>
	</servlet>
	<servlet-mapping>
		<servlet-name>SpringMVC</servlet-name>
		<!-- 此處能夠能夠配置成*.do。相應struts的字尾習慣 -->
		<url-pattern>/</url-pattern>
	</servlet-mapping>
	<welcome-file-list>
		<welcome-file>/index.jsp</welcome-file>
	</welcome-file-list>

</web-app>

4.3.3、測試

        至此已經完畢了SSM三大框架的整合了。接下來測試一下。假設成功了,那麼恭喜你,假設失敗了。繼續除錯吧。作為程式猿就是不停的與BUG做鬥爭


4.3.3.1、新建jsp頁面


showUser.jsp   此頁面僅輸出一下username,完畢一個完整的簡單流程

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
	<title>測試</title>
  </head>
  
  <body>
    ${user.userName}
  </body>
</html>

4.3.3.2、建立UserController類

UserController.java  控制器

package com.cn.hnust.controller;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import com.cn.hnust.pojo.User;
import com.cn.hnust.service.IUserService;

@Controller
@RequestMapping("/user")
public class UserController {
	@Resource
	private IUserService userService;
	
	@RequestMapping("/showUser")
	public String toIndex(HttpServletRequest request,Model model){
		int userId = Integer.parseInt(request.getParameter("id"));
		User user = this.userService.getUserById(userId);
		model.addAttribute("user", user);
		return "showUser";
	}
}

4.3.3.3、部署專案

輸入地址:localhost:8080/專案名稱/user/showUser?id=1

至此。SSM三大框架的整合就完畢了,在此基礎上可再加入其它功能。


原始碼下載地址:http://download.csdn.net/detail/u012909091/7658611


 (轉載註明出處:http://blog.csdn.net/zhshulin


相關文章