1. 程式人生 > >從零開始Eclipse/Maven搭建SSM框架做web應用(超詳細+100%可用+避坑版)

從零開始Eclipse/Maven搭建SSM框架做web應用(超詳細+100%可用+避坑版)

目前SSM框架(Spring+SpringMVC+Mybatis)依然是市場主流,如何搭建一個實用的SSM框架是很多同學都想學習的技能。但網路上的大多數教程要麼不完整,要麼還遺留了很多坑,即使嚴格按教程來也很難得到我們想要的結果。所以我就想自己寫一篇搭建攻略,即使零基礎的同學,按我的攻略步驟也能搭出一個實用的SSM框架。

一、SSM框架介紹

標準的mvc結構包含model(模型層),view(檢視層)和controller(控制層)。該模式在一套SSM框架中對應的是:model包含資料庫和dao層(資料庫連線及存取技術層),controller包含controller層(資源解析對映並向檢視層傳送資料)和service層(業務處理),view包含所有前端(jsp、html、css、js、vm等檔案)。

二、預安裝程式

  1. Jdk 1.7
  2. eclipse(注意jdk版本和eclipse版本的匹配,高版本eclipse不支援低版本jdk。我用的是從官網下載的eclipse-jee-mars-R-win32-x86_64版本,只支援jdk1.7以上版本)
  3. tomcat(同樣注意和jdk版本匹配問題。我用的是7.0.82版本)
  4. maven(我用的是3.2.1版本)
  5. 遠端maven庫使用阿里雲的庫,配置相關setting.xml檔案(具體配置後面會介紹)。
  6. 資料庫(我用的mysql 5.6.21)

萌新儘量安裝和我一樣版本的程式,以免出現不相容的問題。如果沒有一模一樣的,保證大版本一致也行,如mysql用5.6.*的都可以。具體的安裝步驟和環境變數配置請自行百度,此處不贅述。

三、搭建步驟

步驟一、新建maven專案

1、新建一個eclipse工程,該路徑主要存放eclipse相關檔案,並提供該專案編譯、部署和執行時的環境。
在這裡插入圖片描述
2、eclipse配置
2.1 Window—Preferences—General—Workspace,設定Text file encoding為UTF-8
在這裡插入圖片描述
2.2 Window—Preferences—Java—Installed JREs,新增自己安裝的jdk並勾選,注意選jdk路徑下而不是jre路徑下(選jre有個坑,具體原因我不太記得了)。
在這裡插入圖片描述
2.3 Window—Preferences—Maven—User Settings,匯入配置好的setting.xml檔案
在這裡插入圖片描述


settings.xml檔案內容如下:

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

<settings>
  <!-- 本地倉庫地址,新建一個空資料夾即可,jar包會從遠端maven庫下載到該資料夾 -->
  <localRepository>F:\test_repository</localRepository>  
  <!-- 遠端maven庫配置 -->
  <mirrors>
	<mirror>
 		<id>alimaven</id>
 		<name>aliyun maven</name>
 		<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
 		<mirrorOf>central</mirrorOf>
	</mirror>
  </mirrors>

</settings>

2.4 Window—Preferences—Server—Runtime Environments,新增安裝好的tomcat
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述

3、用maven建立一個web專案
3.1 File–New–Maven Project,建立Maven專案(New選單下沒有Maven Project的話就去New選單下的Other裡面找)
在這裡插入圖片描述
這裡Use default Workspace location一般會預設勾選,代表將你要寫的程式碼放到第一幅圖的Workspace目錄下。如果希望程式碼和工程分離的話,可以去勾選,自己另外指定一個目錄(常用)。
在這裡插入圖片描述
在這裡插入圖片描述
Group Id是專案組織唯一的識別符號,實際對應Java的包結構。Artifact Id是該專案的唯一識別符號,實際對應專案名,也是專案根目錄的名稱。Version代表版本號。

3.2 建立成功即會生成下圖中的目錄(不同eclipse版本可能排版會不大一樣),JRE庫版本如果不是1.7則需要替換成1.7(替換方法在後面),index.jsp有個報錯是因為沒有匯入javax.servlet-api的jar包,按步驟新增完jar包依賴後該報錯就會消失。(該報錯暫不影響程式執行)
在這裡插入圖片描述
如果有同學在建立專案的時候發現類似如下報錯:
在這裡插入圖片描述
請先檢查settings.xml檔案是否寫錯。
如果settings檔案沒問題,就進到F:\test_repository\org\apache\maven路徑下刪除plugins資料夾,然後右鍵點選專案名–Maven–Update Project,勾選ForceUpdate of Snapshots/Releases,點選OK。
在這裡插入圖片描述
如果上述方法仍不可行,請進到F:\test_repository\org\apache\maven\plugins\maven-resources-plugin目錄及其子資料夾中,檢視是否有jar包。如果沒有對應jar包或者發現有.lastUpdated檔案存在,說明下載失敗或者未完成下載。此時需要檢查網路。如果網路沒有問題,那麼說明遠端倉庫連線異常。此時可以更換遠端倉庫地址,或者直接去網路下載相應jar包到本地倉庫,同時將settings.xml檔案中的遠端倉庫配置刪除。(如果將settings.xml檔案中遠端倉庫配置刪除的話,那麼以後所有新增的依賴都需要手動下載到本地倉庫,不推薦)
如果還不能解決,恕老夫無能為力,道友請移步百度。

3.3 右鍵專案名–Build Path–Configure Build Path,新增JRE 1.7jar包依賴。
在這裡插入圖片描述
在這裡插入圖片描述
之前配置eclipse步驟裡如果已經配置了1.7版本,此處預設就是1.7,直接確認就好。
在這裡插入圖片描述
remove掉1.5版本,點選Apply或OK確認。如此我們便將專案依賴的JRE jar包替換成了1.7版本。
在這裡插入圖片描述

3.4 Maven規定必須新增以下Source Folder:
src/main/java
src/main/resources
src/test/java
src/test/resources
如有缺失,則右鍵專案名–New–Source Folder,新增完整目錄結構
在這裡插入圖片描述
右鍵專案名–Build Path–Configure Build Path,修改輸出路徑
在這裡插入圖片描述
右鍵專案名–Properties–Project Facets,修改Java為1.7版本,個別eclipse版本需要手動勾選Dynamic Web Module。
在這裡插入圖片描述
右鍵專案名–Properties–Deployment Assembly,刪除test的兩項,因為test是測試用的,不需要部署。另外個別eclispe版本沒有新增最後一個Maven Dependencies釋出到lib下,需手動新增Add–Java Build Path Entries–Maven Dependencies–Finish
在這裡插入圖片描述

如此一來,我們建好了一個完整的Maven web專案
在這裡插入圖片描述

3.5 在Tomcat上執行該Maven工程,以檢測之前的步驟是否都完成了。
右鍵專案名–Run As–Maven clean,
右鍵專案名–Run As–Maven install,
右鍵專案名–Run As–Run On Server
在這裡插入圖片描述
在這裡插入圖片描述
如果Console下不報錯且顯示Server startup in *** ms或者有Hello World的頁面(訪問的index.jsp檔案)出來,證明我們搭建的第一階段順利完成。
在這裡插入圖片描述

4、引入maven依賴jar包,包含spring,mybatis和一些常用jar包。pom.xml檔案內容如下(完全覆蓋原檔案),如果你的groupId、artifactId和version跟我檔案裡不一樣,則需要修改。

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.test.ssm</groupId>
  <artifactId>ssm-base</artifactId>
  <packaging>war</packaging>
  <version>0.0.1-SNAPSHOT</version>
  <name>ssm-base Maven Webapp</name>
  <url>http://maven.apache.org</url>
  
  <properties>
  	<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  	<maven.build.timestamp.format>yyyyMMddHHmmss</maven.build.timestamp.format>
  	<spring.version>3.2.3.RELEASE</spring.version>
  	<mybatis.version>3.2.2</mybatis.version>
  	<mybatis.spring.version>1.2.0</mybatis.spring.version>
  	<mysql.jdbc.version>5.1.29</mysql.jdbc.version>
  	<slf4j.version>1.7.5</slf4j.version>
  	<mybatis.generator.vesion>1.3.5</mybatis.generator.vesion>
  </properties>
  
  <dependencies>
  	<!-- 測試依賴jar包 -->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    
    <!-- spring依賴jar包 -->
    <dependency>
    	<groupId>org.springframework</groupId>
    	<artifactId>spring-core</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-test</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.aspectj</groupId>
    	<artifactId>aspectjweaver</artifactId>
    	<version>1.6.10</version>
    </dependency>
	
	<!-- mybatis依賴jar包 -->
    <dependency>
    	<groupId>org.mybatis</groupId>
    	<artifactId>mybatis</artifactId>
    	<version>${mybatis.version}</version>
    </dependency>
    <dependency>
    	<groupId>org.mybatis</groupId>
    	<artifactId>mybatis-spring</artifactId>
    	<version>${mybatis.spring.version}</version>
    </dependency>
    <!-- mybatis自動生成sql相關檔案依賴jar包 -->
    <dependency>  
       	<groupId>org.mybatis.generator</groupId>  
       	<artifactId>mybatis-generator-core</artifactId>  
       	<version>${mybatis.generator.vesion}</version>
   	</dependency> 
    
    <!-- mysql依賴jar包 -->
    <dependency>
    	<groupId>mysql</groupId>
    	<artifactId>mysql-connector-java</artifactId>
    	<version>${mysql.jdbc.version}</version>
    </dependency>
    
    <!-- c3p0資料庫連線池依賴jar包 -->
    <dependency>
    	<groupId>c3p0</groupId>
    	<artifactId>c3p0</artifactId>
    	<version>0.9.1.2</version>
    </dependency>
    
    <!-- Servlet依賴jar包 -->
    <dependency>
    	<groupId>javax.servlet</groupId>
    	<artifactId>servlet-api</artifactId>
    	<version>2.5</version>
    </dependency>
    <dependency>
    	<groupId>javax.servlet.jsp</groupId>
    	<artifactId>jsp-api</artifactId>
    	<version>2.2</version>
    </dependency>
	<dependency>
		<groupId>javax.servlet</groupId>
		<artifactId>jstl</artifactId>
		<version>1.2</version>
	</dependency>
    
    <!-- 檔案上傳依賴jar包 -->
    <dependency>
    	<groupId>commons-fileupload</groupId>
    	<artifactId>commons-fileupload</artifactId>
    	<version>1.3.1</version>
    </dependency>
    
    <!-- 輔助工具類jar包 -->
    <dependency>
    	<groupId>commons-lang</groupId>
    	<artifactId>commons-lang</artifactId>
    	<version>2.6</version>
    </dependency>
    
    <!-- 編碼相關jar包 -->
    <dependency>
    	<groupId>commons-codec</groupId>
    	<artifactId>commons-codec</artifactId>
    	<version>1.9</version>
    </dependency>
    
    <!-- httpclient -->
    <dependency>
    	<groupId>org.apache.httpcomponents</groupId>
    	<artifactId>httpclient</artifactId>
    	<version>4.5.3</version>
    </dependency>
    
    <!-- 日誌記錄依賴jar包 -->
    <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>
    
    <!-- json工具jar包 -->
    <dependency>
    	<groupId>com.alibaba</groupId>
    	<artifactId>fastjson</artifactId>
    	<version>1.2.20</version>
    </dependency>
    <dependency>
    	<groupId>org.codehaus.jackson</groupId>
    	<artifactId>jackson-mapper-asl</artifactId>
    	<version>1.9.13</version>
    </dependency>
  </dependencies>
  
  <build>
  	<plugins>
  		<plugin>
  			<artifactId>maven-compiler-plugin</artifactId>
  			<version>3.5</version>
  			<configuration>
  				<source>1.7</source>
  				<target>1.7</target>
  			</configuration>
  		</plugin>
  		<plugin>
  			<artifactId>maven-war-plugin</artifactId>
  			<version>2.2</version>
  			<configuration>

  			</configuration>
  		</plugin>
  		
  		<!-- mybatis generator 外掛 -->
      <plugin>
        <groupId>org.mybatis.generator</groupId>
    	<artifactId>mybatis-generator-maven-plugin</artifactId>
    	<version>${mybatis.generator.vesion}</version>
    	<configuration>
    	  <verbose>true</verbose>
    	  <configurationFile>src/main/resources/META-INF/generatorConfig.xml</configurationFile>
    	  <overwrite>true</overwrite>
    	</configuration>
    	<dependencies>  
        <dependency>  
            <groupId>org.mybatis.generator</groupId>  
            <artifactId>mybatis-generator-core</artifactId>  
            <version>${mybatis.generator.vesion}</version>  
        </dependency>  
        <dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis</artifactId>
			<version>3.2.2</version>
		</dependency>
    </dependencies>  
      </plugin>
  	</plugins>
    <finalName>
    	${project.artifactId}_${project.version}_${maven.build.timestamp}
    </finalName>
  </build>
</project>

5、配置web.xml檔案(完全覆蓋原檔案)。包含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/j2ee" xmlns:web="http://xmlns.jcp.org/xml/ns/javaee"
	xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_5.xsd"
	version="2.5">
	
	<!-- 配置Spring -->
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>classpath:META-INF/spring/applicationContext.xml</param-value>
	</context-param>
	<context-param>
		<param-name>log4jConfigLocation</param-name>
		<param-value>classpath:META-INF/properties/log4j.properties</param-value>
	</context-param>
	<listener>
		<listener-class>
			org.springframework.web.context.ContextLoaderListener
		</listener-class>
	</listener>
	<!-- 防止Spring記憶體溢位監聽器 -->
	<listener>
		<listener-class>
			org.springframework.web.util.IntrospectorCleanupListener
		</listener-class>
	</listener>
	<!-- 日誌記錄監聽器 -->
	<listener>
		<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
	</listener>
	
	<!-- 配置springmvc -->
	<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:META-INF/spring/spring-mvc.xml</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>springMVC</servlet-name>
		<url-pattern>/</url-pattern>
	</servlet-mapping>
	
	<!-- 字符集過濾器 -->
	<filter>
		<filter-name>encodingFilter</filter-name>
		<filter-class>
			org.springframework.web.filter.CharacterEncodingFilter
		</filter-class>
		<init-param>
			<param-name>encoding</param-name>
			<param-value>UTF-8</param-value>
		</init-param>
		<init-param>
			<param-name>forceEncoding</param-name>
			<param-value>true</param-value>
		</init-param>
	</filter>
	<filter-mapping>
			<filter-name>encodingFilter</filter-name>
			<url-pattern>/*</url-pattern>
	</filter-mapping>

  <display-name>Archetype Created Web Application</display-name>
</web-app>

6、在src/main/resources目錄下建立META-INF/spring資料夾,在該資料夾下建立applicationContext.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:mvc="http://www.springframework.org/schema/mvc"  
    xmlns:context="http://www.springframework.org/schema/context"  
    xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"  
    xsi:schemaLocation="http://www.springframework.org/schema/beans   
            http://www.springframework.org/schema/beans/spring-beans-4.3.xsd   
            http://www.springframework.org/schema/mvc   
            http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd   
            http://www.springframework.org/schema/context   
            http://www.springframework.org/schema/context/spring-context-4.3.xsd   
            http://www.springframework.org/schema/aop   
            http://www.springframework.org/schema/aop/spring-aop-4.3.xsd   
            http://www.springframework.org/schema/tx   
            http://www.springframework.org/schema/tx/spring-tx-4.3.xsd "> 

	<!-- 掃描service、dao元件 -->
	<context:component-scan base-package="com.test.ssm" />
	<!-- 分解配置 jdbc.properties -->
	<context:property-placeholder location="classpath:META-INF/properties/jdbc.properties"/>
	
	<!-- 資料來源c3p0 -->
	<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
		<property name="driverClass" value="${jdbc.driverClassName}" />  
        <property name="jdbcUrl" value="${jdbc.url}" />  
        <property name="user" value="${jdbc.username}" />  
        <property name="password" value="${jdbc.password}" />  
        <property name="maxPoolSize" value="${c3p0.pool.size.max}" />  
        <property name="minPoolSize" value="${c3p0.pool.size.min}" />  
        <property name="initialPoolSize" value="${c3p0.pool.size.ini}" />  
        <property name="acquireIncrement" value="${c3p0.pool.size.increment}" />
	</bean>
	
	
	<!-- sessionFactory將spring和mybatis整合 -->
	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="dataSource" ref="dataSource" />
		<property name="configLocation" value="classpath:META-INF/spring/spring-mybatis.xml" />
		<property name="mapperLocations" value="classpath*:META-INF/sqlmap/**/*.xml" />
	</bean>
	<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
		<property name="basePackage" value="com.test.ssm.dao" />
		<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
	</bean>
	
	<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<property name="dataSource" ref="dataSource" />
	</bean>
	<tx:advice id="transactionAdvice" transaction-manager="transactionManager">
		<tx:attributes>
			<tx:method name="add*" propagation="REQUIRED" />  
            <tx:method name="append*" propagation="REQUIRED" />  
            <tx:method name="insert*" propagation="REQUIRED" />  
            <tx:method name="save*" propagation="REQUIRED" />  
            <tx:method name="update*" propagation="REQUIRED" />  
            <tx:method name="modify*" propagation="REQUIRED" />  
            <tx:method name="edit*" propagation="REQUIRED" />  
            <tx:method name="delete*" propagation="REQUIRED" />  
            <tx:method name="remove*" propagation="REQUIRED" />  
            <tx:method name="repair" propagation="REQUIRED" />  
            <tx:method name="delAndRepair" propagation="REQUIRED" />  
  
            <tx:method name="get*" propagation="SUPPORTS" />  
            <tx:method name="find*" propagation="SUPPORTS" />  
            <tx:method name="load*" propagation="SUPPORTS" />  
            <tx:method name="search*" propagation="SUPPORTS" />  
            <tx:method name="datagrid*" propagation="SUPPORTS" />  
  
            <tx:method name="*" propagation="SUPPORTS" /> 
		</tx:attributes>
	</tx:advice>
	<aop:config>
		<aop:pointcut id="transactionPointCut" expression="execution(* com.test.ssm.service..*Impl.*(..))" />
		<aop:advisor pointcut-ref="transactionPointCut" advice-ref="transactionAdvice" />
	</aop:config>
</beans>

7、在src/main/resources/META-INF/spring目錄下建立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.2.xsd  
    http://www.springframework.org/schema/context  
    http://www.springframework.org/schema/context/spring-context-3.2.xsd  
    http://www.springframework.org/schema/mvc    
    http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd"> 
    
    <!-- 預設的註解對映的支援 -->
    <mvc:annotation-driven />
    
    <!-- 自動掃描該包,使SpringMVC認為包下用了@Controller註解的類是控制器 -->
    <context:component-scan base-package="com.test.ssm.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> 
    
    <!-- 定義跳轉的檔案的前後綴,檢視模式配置 -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    	<property name="prefix" value="/" />
    	<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>

8、在src/main/resources/META-INF/spring目錄下建立spring-mybatis.xml檔案,檔案內容如下:

<?xml version="1.0" encoding="UTF-8" ?>  
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">  
<configuration>  
    <!-- 暫時不需要其他配置-->  
</configuration>  

9、在src/main/resources/META-INF/properties目錄下建立log4j.properties檔案,檔案內容如下:

log4j.rootLogger=info, console, debug, app, error  
  
###Console ###  
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 = %d %p[%C:%L]- %m%n  
  
### debug ###    
log4j.appender.debug = org.apache.log4j.DailyRollingFileAppender  
log4j.appender.debug.File = log/debug.log  
log4j.appender.debug.Append = true  
log4j.appender.debug.Threshold = DEBUG  
log4j.appender.debug.DatePattern='.'yyyy-MM-dd  
log4j.appender.debug.layout = org.apache.log4j.PatternLayout  
log4j.appender.debug.layout.ConversionPattern = %d %p[%c:%L] - %m%n  
  
### app ###    
log4j.appender.app = org.apache.log4j.DailyRollingFileAppender  
log4j.appender.app.File = log/app.log  
log4j.appender.app.Append = true  
log4j.appender.app.Threshold = INFO  
log4j.appender.app.DatePattern='.'yyyy-MM-dd  
log4j.appender.app.layout = org.apache.log4j.PatternLayout  
log4j.appender.app.layout.ConversionPattern = %d %p[%c:%L] - %m%n  
  
### Error ###  
log4j.appender.error = org.apache.log4j.DailyRollingFileAppender  
log4j.appender.error.File = log/error.log  
log4j.appender.error.Append = true  
log4j.appender.error.Threshold = ERROR   
log4j.appender.error.DatePattern='.'yyyy-MM-dd  
log4j.appender.error.layout = org.apache.log4j.PatternLayout  
log4j.appender.error.layout.ConversionPattern =%d %p[%c:%L] - %m%n 

10、在src/main/resources/META-INF/properties目錄下建立jdbc.properties檔案,檔案內容如下。(此處需要設定你自己的資料庫連線方式,不要直接複製,我這裡建的資料庫名是ssm_data。另外注意第一行最後,也就是Driver的後面不要有空格,不然會報jdbc為空的錯誤)

jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/ssm_data?useUnicode=true&amp;characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull
jdbc.username=root
jdbc.password=123456
  
c3p0.pool.size.max=20
c3p0.pool.size.min=5
c3p0.pool.size.ini=3
c3p0.pool.size.increment=2

11、使用mybatis generator外掛自動生成sql相關檔案。
11.1 在你的資料庫中建表t_user,注意一定要有個主鍵,建表sql語句參考如下:

CREATE TABLE "t_user" ("id" int(11) NOT NULL AUTO_INCREMENT,
"name" VARCHAR(32) DEFAULT NULL,
"sex" VARCHAR(32) DEFAULT NULL,
"introduction" VARCHAR(64) DEFAULT NULL,
PRIMARY KEY ("id")) ENGINE=InnoDB DEFAULT CHARSET=utf8;

11.2 在src/main/resources/META-INF目錄下新建資料夾sqlmap,在src/main/java目錄下新建包com.test.ssm.dao和包com.test.ssm.model

11.3 在src/main/resources/META-INF目錄下新建檔案generatorConfig.xml(路徑和檔名以及需要的jar包和外掛已在pom.xml裡配置好了,不懂的同學可以檢視之前pom.xml裡的內容),generatorConfig.xml內容如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
        PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
        "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">

<generatorConfiguration>
    <!-- 只能有0個或1個 -->
    <!-- <properties resource=""/> -->
    <!-- <properties url=""/> -->
    
    <!-- 可以有0個或多個 -->
    <classPathEntry location="F:/test_repository/mysql/mysql-connector-java/5.1.29/mysql-connector-java-5.1.29.jar" />

    <!-- 1個或多個 -->
    <context id="mysql" targetRuntime="MyBatis3" defaultModelType="flat" >
        <property name="beginningDelimiter" value="`"/>
        <property name="endingDelimiter" value="`"/>

        <!-- <plugin type=""></plugin> -->
        
        <!-- 欄位註釋:type值需要實現介面org.mybatis.generator.api.CommentGenerator -->
        <commentGenerator>
            <property name="suppressAllComments" value="false" />
            <property name="suppressDate" value="true" />
        </commentGenerator>
        
        <!-- 資料庫連線資訊 -->
        <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                        connectionURL="jdbc:mysql://localhost:3306/ssm_data"
                        userId="root"
                        password="123456">
            <property name="remarkable" value="true"></property>
        </jdbcConnection>

        <!-- 資料型別轉換 -->
         <!-- <javaTypeResolver type="com.netfinworks.tool.mybatis.type.MoneyResolverImpl">
            <property name="forceBigDecimals" value="false"/>
            <property name="forceMoney" value="true"/>
            <property name="moneyClumnPattern" value="AMOUNT$"/>
        </javaTypeResolver>  -->
  
        <!-- 定義model存放位置,必須配置一個 -->
        <javaModelGenerator targetPackage="com.test.ssm.model" 
                            targetProject="src\main\java">
            <property name="enableSubPackages" value="true" />
            <property name="trimStrings" value="true" />
        </javaModelGenerator>

        <sqlMapGenerator targetPackage="META-INF/sqlmap"
                         targetProject="src\main\resources">
            <property name="enableSubPackages" value="true" />
        </sqlMapGenerator>

        <!-- DAO介面存放位置 -->
        <javaClientGenerator type="XMLMAPPER"
                             targetPackage="com.test.ssm.dao" 
                             targetProject="src\main\java">
            <property name="enableSubPackages" value="true" />
        </javaClientGenerator>

		<table schema="ssm_data" tableName="t_user" domainObjectName="User"
               enableCountByExample="false" enableUpdateByExample="false"
               enableDeleteByExample="false" enableSelectByExample="false"
               selectByExampleQueryId="false">
        </table>
        

    </context>
</generatorConfiguration> 

11.4 右鍵專案名–Run As–Run Configurations,執行mysql generator外掛。
在這裡插入圖片描述
點選Apply儲存之後,點選Run,外掛就開始運行了。外掛執行完畢,你的Console視窗會出現執行結果,不報錯且顯示生成了相關檔案並BUILD SUCCESS,證明執行無誤。
在這裡插入圖片描述
同時也可以去src/main/resources/META-INF/sqlmap目錄和src/main/java下檢視是否有相關檔案。(注意:剛生成的檔案不會直接顯示在eclipse裡面,你需要右鍵專案名–Refresh重新整理一下才會有)
在這裡插入圖片描述

12、構建Service層
12.1 在src/main/java目錄下新建com.test.ssm.service包,在包裡新建介面UserService.java,內容如下:

package com.test.ssm.service;

import com.test.ssm.model.User;

public interface UserService {
	
	public User getUserById(int id);
	
}

12.2 在src/main/java目錄下新建com.test.ssm.service.impl包,在包裡新建實現類UserServiceImpl.java實現介面UserService.java,內容如下:

package com.test.ssm.service.impl;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.test.ssm.dao.UserMapper;
import com.test.ssm.model.User;
import com.test.ssm.service.UserService;

@Service
public class UserServiceImpl implements UserService {

	@Autowired
	private UserMapper userMapper;
	
	@Override
	public User getUserById(int id) {
		
		return userMapper.selectByPrimaryKey(id);
		
	}

}

13、構建Controller層
在src/main/java目錄下新建包com.test.ssm.controller,在包裡新建類UserController.java,檔案內容如下:

package com.test.ssm.controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import com.test.ssm.model.User;
import com.test.ssm.service.UserService;

@Controller
public class UserController {
	
	private Logger log = Logger.getLogger(UserController.class);
	
	@Autowired
	private UserService userService;
	
	@RequestMapping("/showUser")
	public ModelAndView getUser(HttpSession session, HttpServletRequest request) {
		log.info("獲取使用者資訊");
		ModelAndView mv = new ModelAndView();
		
		User user = userService.getUserById(1);
		mv.addObject("user", user);
		mv.setViewName("/page/user");
		
		return mv;
	}

}

該類中的@RequestMapping("/showUser")指的是外部訪問資源路徑,mv.setViewName("/page/showUser");指的是對映到src/main/webapp/page/user.jsp檔案。另外,為了對應User user = userService.getUserById(1);該語句能查詢出結果,需要向資料庫的t_user表插入一條資料,參考sql語句如下:

INSERT INTO t_user VALUES(1, '小明', '男', '我要上清華!');

14、構建檢視層
此處的檢視層比較簡單,僅給大家做個示例,看前臺如何通過EL語法獲取後臺傳遞的資料。在src/main/webapp目錄下新建資料夾page,在page下面新建檔案user.jsp,檔案內容如下:

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta charset="utf-8">
<title>這就是我</title>
</head>
<body>
	<p>我的名字是:<b>${user.name}</b></p>
	<p>性別:<b>${user.sex}</b></p>
	<p>我的人生宣言:<b>${user.introduction}</b></p>
</body>
</html>

15、至此,我們所有示例程式碼都寫好了,如下是完整目錄。同學們可以對照這幅圖看自己的檔案是否齊全,檔案路徑是否正確,不然會出現各種檔案找不到的問題(這專案名上可能會有紅叉,不用管它,我覺得是eclipse抽風)。
在這裡插入圖片描述

16、執行程式碼
16.1 清除上次編譯內容:右鍵專案名–Run As–Maven clean,檢視Console
在這裡插入圖片描述

16.2 編譯程式碼並打包:右鍵專案名–Run As–Maven install,檢視Console
在這裡插入圖片描述
16.3 在tomcat上執行程式碼:右鍵專案名–Run As–Run On Server
在這裡插入圖片描述
在這裡插入圖片描述
和之前執行一樣,Console不報錯並打印出Server startup in *** ms或者出現“Hello World!”頁面,證明服務正常啟動。
在這裡插入圖片描述

17、瀏覽器驗證
我們在瀏覽器輸入網址http://localhost/ssm-base/showUser檢視頁面:
在這裡插入圖片描述
頁面正常並顯示出我們存入資料庫的內容,則說明我們已完成了ssm三大框架整合以及資料從儲存、取出到顯示在頁面的整個流程。有什麼其他需求可以在此基礎上新增。
如果出現了404報錯,請檢查tomcat埠是否為預設的80埠。