基于Maven的Spring + Spring MVC + Mybatis的環(huán)境搭建

基于Maven的Spring + Spring MVC + Mybatis的環(huán)境搭建項(xiàng)目開發(fā),先將環(huán)境先搭建起來(lái)凤藏。上次做了一個(gè)Spring + Spring MVC + Mybatis + Log4J + JUnit Test的環(huán)境搭建,這次也差不多嗡善,不過(guò)就是基于了Maven岗宣,同時(shí)也添加了事務(wù)管理热某。

首先,可以去了解一下maven园细,個(gè)人覺得這個(gè)東西就是JAR包管理方便惦积,不用自己一個(gè)個(gè)去寫,直接添加dependence就行了猛频,不過(guò)有時(shí)候要注意喲狮崩,有可能重復(fù)的包含了某個(gè)JAR包,會(huì)報(bào)沖突的喲鹿寻,親睦柴!因?yàn)橹挥幸粋€(gè)POM文件里指定JAR包,所以整個(gè)項(xiàng)目都很小的毡熏,一般就幾MB坦敌,只有你在將該項(xiàng)目打成WAR包的時(shí)候,maven會(huì)自動(dòng)的把三方JAR包放進(jìn)項(xiàng)目痢法,然后你就可以去部署到Tomcat的webapp下面了狱窘,放進(jìn)去,重啟Tomcat就OK财搁。

1.開始搭建我的環(huán)境吧浮定。首先邻邮,IDE我用的是eclipse的JEE版本休傍。要保證裝上了Maven喲沪悲,可以使用eclipse的Install New Software穷当,
URL地址是http://m2eclipse.sonatype.org/sites/m2e/
然后一步步走下去淹禾,安裝好了過(guò)了會(huì)重啟一次膘滨。給一個(gè)忠告喲,安裝好了maven后稀拐,不要使用IDE里面的了,而是去官方下載一個(gè)丹弱,解壓德撬,然后讓IDE的Maven指向你下載安裝的,如圖:

在這里插入圖片描述

2.maven安裝成功了躲胳,我們用Maven創(chuàng)建一個(gè)新的WEB項(xiàng)目蜓洪。File—> New—> Other—>Maven Project.
選默認(rèn),下一步坯苹。在Select an Archetype里面種找到如下圖所示
在這里插入圖片描述

3.然后next隆檀,輸入groupId:net.yuanmomo;artifactId:Test粹湃,然后finish恐仑,稍微等待一下,就創(chuàng)建好了为鳄。下面的是創(chuàng)建好了的一個(gè)初始的項(xiàng)目:


在這里插入圖片描述

4.但是這個(gè)并不是默認(rèn)的maven項(xiàng)目的標(biāo)準(zhǔn)結(jié)構(gòu).我們需要進(jìn)行一些改動(dòng).
(1).在項(xiàng)目下創(chuàng)建一個(gè)Source Folder.
Folder Name:src/main/java
如下圖所示:


在這里插入圖片描述

(當(dāng)然,還可以添加用于junit測(cè)試的src/test/java和src/test/resources
不過(guò)在此就不添加了.)
(2).在src/main/java中創(chuàng)建3個(gè)包(maven標(biāo)準(zhǔn)推薦是3層包結(jié)構(gòu))
(3).如果裝的JDK是1.6的,更改JRE System Libary為1.6版本的.
(4).就src/main/webapp文件夾看做一個(gè)的WebRoot,然后創(chuàng)建js,css,jsp等文件夾裳仆。
這樣.一個(gè)標(biāo)準(zhǔn)的maven web項(xiàng)目創(chuàng)建成功.


在這里插入圖片描述

5.大家一看上面的項(xiàng)目結(jié)構(gòu),很熟悉吧孤钦。maven的項(xiàng)目結(jié)構(gòu)路徑有點(diǎn)討厭歧斟,有點(diǎn)讓人很煩。maven打WAR包的時(shí)候提取的東西是src/main/webapp下面的文件偏形,然后打成一個(gè)WAR的WEB項(xiàng)目就可以部署了静袖,但是,但是俊扭,我們?cè)陂_發(fā)的時(shí)候队橙,在使用eclipse里面的Tomcat調(diào)試的時(shí)候,tomcat卻不是把src/main/webapp下面的文件部署到服務(wù)器萨惑。此時(shí)喘帚,如果你打開Server,然后add and remove,你在左邊是找不到Test項(xiàng)目的咒钟,如下:


在這里插入圖片描述

原因是因?yàn)門omcat默認(rèn)回去Test項(xiàng)目的路徑下面去找WebRoot—>WEB-INF–>web.xml(WebRoot文件夾的名字可以不一樣吹由,可以使其它的,但是WEB-INF–>web.xml這兩個(gè)名字不能變)朱嘴,但是當(dāng)前就找不到這幾個(gè)目錄倾鲫。這個(gè)時(shí)候有兩個(gè)解決辦法:

(5.1). 在Test項(xiàng)目的路徑下面粗合,按照路徑規(guī)則創(chuàng)建WebRoot,WEB-INF等文件夾乌昔,然后把上面的web.xml拷貝到新建的WEB-INF中去隙疚。放心吧,我上一個(gè)項(xiàng)目就是這樣做的磕道,不過(guò)這種方式打死都不可取的供屉。你修改JSP的時(shí)候改的是下面的,maven打包的時(shí)候用的上面的溺蕉。你還得拷貝過(guò)來(lái)伶丐,拷過(guò)去,麻煩疯特,如果再有svn管理哗魂,累死你,暈死你漓雅,我們經(jīng)常是調(diào)試編寫的時(shí)候再下面做录别,最后提交的時(shí)候還得一個(gè)個(gè)拷貝上去,還出很多問題邻吞。所以建議采用第二種方式组题。
(5.2).轉(zhuǎn)換該項(xiàng)目:
(1)在Test工程名上右鍵–>Properties–>Project Facets–>Convet to faceted form,


在這里插入圖片描述

(2)勾上Dynamic Web Module,選擇2.4版本。同時(shí)點(diǎn)擊下方的further configuration available


在這里插入圖片描述

(3)將默認(rèn)的WebContent改成src/main/webapp
在這里插入圖片描述

(4)一路點(diǎn)OK..此時(shí)在server視圖中的tomcat server上點(diǎn)右鍵–>Add and Remove抱冷,就能看到該項(xiàng)目于往踢,然后部署啦。
在這里插入圖片描述

至此徘层,我們已經(jīng)創(chuàng)建好了一個(gè)合格的基于Maven的項(xiàng)目峻呕,也可以在Tomcat中部署。
接下來(lái)趣效,我們開始整合我們的J2EE框架瘦癌。

6.先給出數(shù)據(jù)庫(kù)的創(chuàng)建腳本,方便測(cè)試搭建是否成功跷敬。

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
— 
— 數(shù)據(jù)庫(kù): `timesheet` 
— 
CREATE DATABASE `timesheet` DEFAULT CHARACTER SET utf8 COLLATE utf8_bin; 
USE `timesheet`;
— ——————————————————–
— 
— 表的結(jié)構(gòu) `testtable` 
—
CREATE TABLE IF NOT EXISTS `testtable` ( 
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
  `name` varchar(50) COLLATE utf8_bin DEFAULT NULL, 
  `date` timestamp NULL DEFAULT NULL, 
  PRIMARY KEY (`id`) 
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=1 ;

7.在pom文件中添加必要的jar包的dependence讯私,可以從兩個(gè)地方查詢:

http://mvnrepository.com/
http://search.maven.org/
添加后的pom文件如下:

<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>net.yuanmomo</groupId>     <artifactId>Test</artifactId>     <packaging>war</packaging>     <version>0.0.1-SNAPSHOT</version>     <name>Test Maven Webapp</name>     <url>http://maven.apache.org</url>    <!– 設(shè)置 Spring 的版本 –>     <properties>         <org.springframework.version>3.0.0.RELEASE</org.springframework.version>     </properties>    <dependencies>         <!– 此處開始就是Spring 所有的jar了,spring3.0的jar包拆分了西傀,所以很多 –>         <!– Core utilities used by other modules. Define this if you use Spring             Utility APIs (org.springframework.core.*/org.springframework.util.*) –>         <dependency>             <groupId>org.springframework</groupId>             <artifactId>spring-core</artifactId>             <version>${org.springframework.version}</version>         </dependency>        <!– Expression Language (depends on spring-core) Define this if you use             Spring Expression APIs (org.springframework.expression.*) –>         <dependency>             <groupId>org.springframework</groupId>             <artifactId>spring-expression</artifactId>             <version>${org.springframework.version}</version>         </dependency>        <!– Bean Factory and JavaBeans utilities (depends on spring-core) Define             this if you use Spring Bean APIs (org.springframework.beans.*) –>         <dependency>             <groupId>org.springframework</groupId>             <artifactId>spring-beans</artifactId>             <version>${org.springframework.version}</version>         </dependency>        <!– Aspect Oriented Programming (AOP) Framework (depends on spring-core,             spring-beans) Define this if you use Spring AOP APIs (org.springframework.aop.*) –>         <dependency>             <groupId>org.springframework</groupId>             <artifactId>spring-aop</artifactId>             <version>${org.springframework.version}</version>         </dependency>        <!– Application Context (depends on spring-core, spring-expression, spring-aop,             spring-beans) This is the central artifact for Spring’s Dependency Injection             Container and is generally always defined –>         <dependency>             <groupId>org.springframework</groupId>             <artifactId>spring-context</artifactId>             <version>${org.springframework.version}</version>         </dependency>        <!– Various Application Context utilities, including EhCache, JavaMail,             Quartz, and Freemarker integration Define this if you need any of these integrations –>         <dependency>             <groupId>org.springframework</groupId>             <artifactId>spring-context-support</artifactId>             <version>${org.springframework.version}</version>         </dependency>        <!– Transaction Management Abstraction (depends on spring-core, spring-beans,             spring-aop, spring-context) Define this if you use Spring Transactions or             DAO Exception Hierarchy (org.springframework.transaction.*/org.springframework.dao.*) –>         <dependency>             <groupId>org.springframework</groupId>             <artifactId>spring-tx</artifactId>             <version>${org.springframework.version}</version>         </dependency>        <!– JDBC Data Access Library (depends on spring-core, spring-beans, spring-context,             spring-tx) Define this if you use Spring’s JdbcTemplate API (org.springframework.jdbc.*) –>         <dependency>             <groupId>org.springframework</groupId>             <artifactId>spring-jdbc</artifactId>             <version>${org.springframework.version}</version>         </dependency>        <!– Object-to-Relation-Mapping (ORM) integration with Hibernate, JPA,             and iBatis. (depends on spring-core, spring-beans, spring-context, spring-tx)             Define this if you need ORM (org.springframework.orm.*) –>         <dependency>             <groupId>org.springframework</groupId>             <artifactId>spring-orm</artifactId>             <version>${org.springframework.version}</version>         </dependency>        <!– Object-to-XML Mapping (OXM) abstraction and integration with JAXB,             JiBX, Castor, XStream, and XML Beans. (depends on spring-core, spring-beans,             spring-context) Define this if you need OXM (org.springframework.oxm.*) –>         <dependency>             <groupId>org.springframework</groupId>             <artifactId>spring-oxm</artifactId>             <version>${org.springframework.version}</version>         </dependency>        <!– Web application development utilities applicable to both Servlet and             Portlet Environments (depends on spring-core, spring-beans, spring-context)             Define this if you use Spring MVC, or wish to use Struts, JSF, or another             web framework with Spring (org.springframework.web.*) –>         <dependency>             <groupId>org.springframework</groupId>             <artifactId>spring-web</artifactId>             <version>${org.springframework.version}</version>         </dependency>        <!– Spring MVC for Servlet Environments (depends on spring-core, spring-beans,             spring-context, spring-web) Define this if you use Spring MVC with a Servlet             Container such as Apache Tomcat (org.springframework.web.servlet.*) –>         <dependency>             <groupId>org.springframework</groupId>             <artifactId>spring-webmvc</artifactId>             <version>${org.springframework.version}</version>         </dependency>        <!– Spring MVC for Portlet Environments (depends on spring-core, spring-beans,             spring-context, spring-web) Define this if you use Spring MVC with a Portlet             Container (org.springframework.web.portlet.*) –>         <dependency>             <groupId>org.springframework</groupId>             <artifactId>spring-webmvc-portlet</artifactId>             <version>${org.springframework.version}</version>         </dependency>        <!– Support for testing Spring applications with tools such as JUnit and             TestNG This artifact is generally always defined with a ‘test’ scope for             the integration testing framework and unit testing stubs –>         <dependency>             <groupId>org.springframework</groupId>             <artifactId>spring-test</artifactId>             <version>${org.springframework.version}</version>             <scope>test</scope>         </dependency>         <!– 上面的都是Spring的jar包斤寇,可以選擇性的添加 –>         <!– Mybatis 開發(fā)包 –>         <dependency>             <groupId>org.mybatis</groupId>             <artifactId>mybatis-spring</artifactId>             <version>1.1.1</version>         </dependency>         <!– Mybatis 和Spring的 整合包,是mybatis出的–>         <dependency>             <groupId>org.mybatis</groupId>             <artifactId>mybatis</artifactId>             <version>3.1.1</version>         </dependency>        <!– tomcat servlet開發(fā)包 –>         <dependency>             <groupId>javax.servlet</groupId>             <artifactId>jstl</artifactId>             <version>1.2</version>         </dependency>         <!– JSTL標(biāo)簽庫(kù) –>         <dependency>             <groupId>javax.servlet</groupId>             <artifactId>servlet-api</artifactId>             <version>2.5</version>         </dependency>         <!– mysql的數(shù)據(jù)庫(kù)驅(qū)動(dòng)包 –>         <dependency>             <groupId>mysql</groupId>             <artifactId>mysql-connector-java</artifactId>             <version>5.1.21</version>         </dependency>         <!– 日志打印 log4j包 –>         <dependency>             <groupId>log4j</groupId>             <artifactId>log4j</artifactId>             <version>1.2.14</version>             <scope>runtime</scope>         </dependency>         <!– 下面兩個(gè)包 commons-dbcp,commons-pool 是配置數(shù)據(jù)源的包–>         <dependency>             <groupId>commons-dbcp</groupId>             <artifactId>commons-dbcp</artifactId>             <version>1.4</version>         </dependency>         <dependency>             <groupId>commons-pool</groupId>             <artifactId>commons-pool</artifactId>             <version>1.4</version>         </dependency>        <!– 日志記錄依賴包拥褂,很多都依賴此包娘锁,像log4j,json-lib等等 –>         <dependency>             <groupId>commons-logging</groupId>             <artifactId>commons-logging-api</artifactId>             <version>1.1</version>         </dependency>         <!– Spring 文件上傳的包 –>         <dependency>             <groupId>commons-fileupload</groupId>             <artifactId>commons-fileupload</artifactId>             <version>1.2.2</version>         </dependency>         <!– Spring 文件上傳的依賴包 –>         <dependency>             <groupId>org.apache.commons</groupId>             <artifactId>commons-io</artifactId>             <version>1.3.2</version>         </dependency>         <!– dom4j 解析 XML文件的包 –>         <dependency>             <groupId>dom4j</groupId>             <artifactId>dom4j</artifactId>             <version>1.6.1</version>         </dependency>         <!– 下面的三個(gè)包是在配置事務(wù)的時(shí)候用到的 spring的依賴包  –>         <dependency>             <groupId>org.aspectj</groupId>             <artifactId>aspectjweaver</artifactId>             <version>1.7.0</version>         </dependency>         <dependency>             <groupId>aopalliance</groupId>             <artifactId>aopalliance</artifactId>             <version>1.0</version>         </dependency>         <dependency>             <groupId>cglib</groupId>             <artifactId>cglib-nodep</artifactId>             <version>2.2.2</version>         </dependency>        <!– JSON lib 開發(fā)包 以及它的依賴包 –>         <dependency>             <groupId>net.sf.json-lib</groupId>             <artifactId>json-lib</artifactId>             <classifier>jdk15</classifier>             <version>2.4</version>         </dependency>         <dependency>             <groupId>commons-beanutils</groupId>             <artifactId>commons-beanutils</artifactId>             <version>1.8.3</version>         </dependency>         <dependency>             <groupId>commons-collections</groupId>             <artifactId>commons-collections</artifactId>             <version>3.2.1</version>         </dependency>         <dependency>             <groupId>commons-lang</groupId>             <artifactId>commons-lang</artifactId>             <version>2.6</version>         </dependency>         <dependency>             <groupId>net.sf.ezmorph</groupId>             <artifactId>ezmorph</artifactId>             <version>1.0.5</version>         </dependency>         <!– junit 測(cè)試包 –>         <dependency>             <groupId>junit</groupId>             <artifactId>junit</artifactId>             <version>3.8.1</version>             <scope>test</scope>         </dependency>     </dependencies>     <build>         <finalName>Test</finalName>     </build> </project>

修改pom文件后,保存饺鹃,maven會(huì)自動(dòng)的去download這些jar包到本地莫秆。等待的時(shí)間可能會(huì)很長(zhǎng)间雀。上面我把所有我這次項(xiàng)目用到的包都羅列出來(lái)了,如果你用不到的镊屎,可以自行刪除惹挟。
下載完成過(guò)后,點(diǎn)開項(xiàng)目左側(cè)的Maven Dependencies缝驳,你就能看到很多的下載的JAR包了连锯。


在這里插入圖片描述

8. 修改web.xml,配置Spring用狱,spring MVC运怖,log4j,亂碼處理等齿拂。

<?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"     xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"     id="WebApp_ID" version="2.5">    <!– Spring context startup Spring的初始化–>     <context-param>         <param-name>contextConfigLocation</param-name>         <param-value><!– Spring的配置文件 –>         classpath:/com/comverse/timesheet/config/ApplicationContext.xml         </param-value>     </context-param>     <listener>         <listener-class>         org.springframework.web.context.ContextLoaderListener         </listener-class>     </listener>    <!– Spring character filter 處理亂碼–>     <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>     </filter>     <filter-mapping>         <filter-name>encodingFilter</filter-name>         <url-pattern>/*</url-pattern>     </filter-mapping>    <!– Configuration of Log4j log4j的配置 –>     <context-param>         <param-name>log4jConfigLocation</param-name>         <param-value><!– log4j.properties文件路徑 –>         classpath:/com/comverse/timesheet/config/log4j.properties         </param-value>     </context-param>     <context-param>         <param-name>log4jRefreshInterval</param-name>         <param-value>60000</param-value>     </context-param>     <listener>         <listener-class>         org.springframework.web.util.Log4jConfigListener         </listener-class>     </listener>    <!– Spring MVC Configuration Spring MVC的配置–>     <servlet>         <servlet-name>dispatcher</servlet-name>         <servlet-class>         org.springframework.web.servlet.DispatcherServlet         </servlet-class>         <init-param>            <param-name>contextConfigLocation</param-name>            <param-value><!– dispatcher-servlet.xml文件路徑 –>            classpath:/com/comverse/timesheet/config/dispatcher-servlet.xml            </param-value>           </init-param>         <load-on-startup>1</load-on-startup>     </servlet>     <servlet-mapping>         <servlet-name>dispatcher</servlet-name>         <url-pattern>*.do</url-pattern>     </servlet-mapping> </web-app>

修改后保存該文件。

9.添加 log4j.properties,jdbc.properties等配置文件:

路徑位置:

在這里插入圖片描述

各個(gè)配置文件的內(nèi)容如下:
(1). log4j.properties: log4j的配置

#配置了控制臺(tái)和文本記錄兩種方式 log4j.rootLogger=DEBUG,CONSOLE,FILEOUT log4j.addivity.org.apache=true# CONSOLE log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender log4j.appender.Threshold=DEBUG log4j.appender.CONSOLE.Target=System.out log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout #log4j.appender.CONSOLE.layout.ConversionPattern=[framework] %d – %c -%-4r [%t] %-5p %c %x – %m%n log4j.appender.CONSOLE.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH\:mm\:ss} \:%m%n# # FILEOUT log4j.appender.FILEOUT=org.apache.log4j.RollingFileAppender log4j.appender.FILEOUT.File=${catalina.home}\\file.log log4j.appender.fileout.MaxFileSize=100000KB # default is true肴敛,append to the file; if false, the replace the log file whenever restart system log4j.appender.FILEOUT.Append=true #RollingFileAppender沒有DatePattern這個(gè)屬性 log4j.appender.FILEOUT.layout=org.apache.log4j.PatternLayout #log4j.appender.CONSOLE.layout.ConversionPattern=[framework] %d – %c -%-4r [%t] %-5p %c %x – %m%n log4j.appender.FILEOUT.layout.ConversionPattern=[%-5p]_%d{yyyy-MM-dd HH:mm:ss} :%m%n

(2). jdbc.properties: 數(shù)據(jù)庫(kù)連接信息的配置

driver=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/timesheet user=root password=root

(3). ApplicationContext.xml: Spring的配置文件

<?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: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-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">     <!– jdbc.properties文件路徑  –>     <bean         class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">         <property name="locations"         value="classpath:/com/comverse/timesheet/config/jdbc.properties" />     </bean>     <!– 數(shù)據(jù)源的配置 –>     <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="${user}" />         <property name="password" value="${password}" />         <!– data source configuration –>         <property name="initialSize" value="60" /><!– initial connections –>         <property name="maxActive" value="100" /><!– MAX connections –>         <property name="maxIdle" value="50" /><!– MAX idle connections –>         <property name="minIdle" value="10" /><!– MIN idle connections –>         <!– 處理mysql 8小時(shí)自動(dòng)斷開連接的問題 –>         <property name="testWhileIdle" value="true" />         <property name="testOnBorrow" value="false" />         <property name="testOnReturn" value="false" />         <property name="validationQuery" value="select 1" />         <property name="timeBetweenEvictionRunsMillis" value="20000" />         <property name="numTestsPerEvictionRun" value="100" />     </bean>     <!–====事務(wù)相關(guān)控制==–>     <bean id="transactionManager"         class="org.springframework.jdbc.datasource.DataSourceTransactionManager">         <property name="dataSource" ref="dataSource" />     </bean>     <tx:advice id="userTxAdvice" transaction-manager="transactionManager">         <tx:attributes>             <tx:method name="*" propagation="REQUIRED" read-only="false"                 rollback-for="java.lang.Exception"/>         </tx:attributes>     </tx:advice>     <aop:config>         <aop:pointcut id="pc"             expression="execution(* com.comverse.timesheet.web.business.*.*(..))" />              <!– 把事務(wù)控制在Business層 –>         <aop:advisor pointcut-ref="pc" advice-ref="userTxAdvice" />     </aop:config>     <!– MyBatis sqlSessionFactory 配置 mybatis–>     <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">         <property name="configLocation"         value="classpath:/com/comverse/timesheet/mybatis/SqlMapConfig.xml" />         <property name="dataSource" ref="dataSource" />     </bean>     <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">         <constructor-arg index="0" ref="sqlSessionFactory" />     </bean>     <!– business AND implementation beans 包含ImplAndBusinessBeans.xml文件 –>     <import resource="ImplAndBusinessBeans.xml" /> </beans>

(4). dispatcher-servlet: Spring MVC的配置文件

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"     xmlns:aop="http://www.springframework.org/schema/aop"     xmlns:context="http://www.springframework.org/schema/context"     xmlns:p="http://www.springframework.org/schema/p"     xmlns:tx="http://www.springframework.org/schema/tx"     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"     xsi:schemaLocation="  http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">    <context:annotation-config />     <!– 把標(biāo)記了@Controller注解的類轉(zhuǎn)換為bean –>     <context:component-scan base-package="com.comverse.timesheet.web.controller" />    <!– 啟動(dòng)Spring MVC的注解功能署海,完成請(qǐng)求和注解POJO的映射 –>     <bean         class="org.springframework.web.servlet.mvc.             annotation.AnnotationMethodHandlerAdapter" />     <!– 視圖 beans –>     <bean id="viewResolver"         class="org.springframework.web.servlet.view.InternalResourceViewResolver"         p:prefix="/WEB-INF/jsp/" p:suffix=".jsp" />         <!– Controller 跳轉(zhuǎn)的JSP頁(yè)面路徑 和 文件的后綴 –>     <!– 文件上傳 –>        <bean id="multipartResolver"         class="org.springframework.web.multipart.commons.CommonsMultipartResolver">         <!– set the max upload size100MB –>         <property name="maxUploadSize">             <value>104857600</value>         </property>         <property name="maxInMemorySize">             <value>1024000</value>         </property>     </bean> </beans>

(5). ImplAndBusinessBeans.xml: 這個(gè)文件主要放置implementation 和 Business的 bean 對(duì)象。

<?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: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-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"><!– 這兩個(gè)類的具體實(shí)現(xiàn)會(huì)在后面給出來(lái)–>     <bean id="ITestTableDAOImpl" class="com.comverse.timesheet.web.impl.ITestTableDAOImpl">         <property name="session" ref="sqlSession" />     </bean>     <bean id="TestBusiness" class="com.comverse.timesheet.web.business.TestBusiness">         <property name="testDAO" ref="ITestTableDAOImpl" />     </bean> </beans>

此時(shí)医男,幾個(gè)主要的配置文件我們已經(jīng)加進(jìn)來(lái)了砸狞,只有mybatis還有幾個(gè)配置文件沒有加進(jìn)來(lái)。

10. 創(chuàng)建包镀梭,用于開發(fā)系統(tǒng):

在這里插入圖片描述

bean : 放pojo, java bean
business : 放業(yè)務(wù)層
conroller : 放控制層刀森,主要負(fù)責(zé)接受請(qǐng)求和調(diào)用business,返回視圖結(jié)果
dao : 放每個(gè)bean對(duì)應(yīng)的接口
impl : dal 接口的具體實(shí)現(xiàn)
interceptor: 過(guò)濾器
resource : 資源包,比如文件路徑报账,配置文件呀
test : 測(cè)試包
util : 工具包
web : 是裝樣子的喲研底,不是我這次要用的,是個(gè)空包透罢。

10. 創(chuàng)建本次測(cè)試的java文件

(1). bean : TestTable.java:

package com.comverse.timesheet.web.bean;import java.util.Date;public class TestTable {     private int id;     private String name;     private Date birthday;    //setter and getter   …………….}

(2). dao : ITestTableDAO.java

package com.comverse.timesheet.web.dao;import com.comverse.timesheet.web.bean.TestTable;public interface ITestTableDAO {     public boolean add(TestTable test) throws Exception; }

(3). impl : ITestTableDAOImpl:

package com.comverse.timesheet.web.impl;import com.comverse.timesheet.web.bean.TestTable; import com.comverse.timesheet.web.dao.ITestTableDAO; import com.comverse.timesheet.web.util.BasicSqlSupport;public class ITestTableDAOImpl extends BasicSqlSupport implements ITestTableDAO {     @Override     public boolean add(TestTable test) throws Exception {         boolean flag=false;         int count=this.session.insert("com.comverse.timesheet.web.mapper.Test.add",test);         if(count>0){             flag=true;         }         return flag;     } }

(4). business: TestBusiness.java

package com.comverse.timesheet.web.business;import java.util.Date;import javax.annotation.Resource;import org.springframework.transaction.annotation.Transactional;import com.comverse.timesheet.web.bean.TestTable; import com.comverse.timesheet.web.dao.ITestTableDAO;public class TestBusiness {     private ITestTableDAO testDAO=null;     public ITestTableDAO getTestDAO() {         return testDAO;     }     public void setTestDAO(ITestTableDAO testDAO) {         this.testDAO = testDAO;     }     public void add() throws Exception{         TestTable test=new TestTable();         test.setName("yuanmomo6");         test.setBirthday(new Date());         try {             testDAO.add(test);         } catch (Exception e) {             // TODO Auto-generated catch block             throw e;         }     } }

(5). Controller : ResultController

package com.comverse.timesheet.web.controller;import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest;import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.RequestMapping;import com.comverse.timesheet.web.business.TestBusiness;@Controller @RequestMapping("/result.do") public class ResultController {     //將spring 配置文件中的bean 通過(guò)setter注入進(jìn)來(lái)     @Resource(name="TestBusiness")     private TestBusiness testBusiness=null;     public void setTestBusiness(TestBusiness testBusiness) {         this.testBusiness = testBusiness;     }    @RequestMapping     public String viewUser(HttpServletRequest request, ModelMap modelMap)             throws Exception {         System.out.println("$$$$$$$$$$$$$$$$$$$$$you want to check the result.jsp+++++++++++++");        System.out.println("$$$$$$$$$$$$$$$$$$$$$ ready to insert   +++++++++++++");         testBusiness.add();         System.out.println("$$$$$$$$$$$$$$$$$$$$$ insert completed +++++++++++++");         return "result";     } }

(6). util : BasicSqlSupport.java所有的implementation類都會(huì)繼承這個(gè)類榜晦,在ImplAndBusinessBeans.xml文件中注冊(cè)的bean,都會(huì)注入一個(gè)sqlsession。例如上面的implementation就是繼承了這個(gè)類羽圃。

package com.comverse.timesheet.web.util;import org.apache.ibatis.session.SqlSession;public class BasicSqlSupport{     protected SqlSession session;    public SqlSession getSession() {         return session;     }     public void setSession(SqlSession session) {         this.session = session;     } }
  1. 加入mybatis的配置文件:
    (1). 為 TestTable bean 創(chuàng)建mapper文件乾胶,路徑為com/comverse/timesheet/mybatis/mapper/Test.xml:
    Test.xml

    <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN" "http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd"> <mapper namespace="com.comverse.timesheet.web.mapper.Test"> <!– 定義一條查詢語(yǔ)句,在bean的implementation中會(huì)引用此語(yǔ)句的id –> <insert id="add" parameterType="Test" useGeneratedKeys="true" keyProperty="classId"> INSERT INTO testtable (NAME,DATE) VALUES(#{name},#{birthday}) </insert> </mapper>

(1). 加入Mybatis的配置文件:在上面的ApplicationContext.xml文件中我們已經(jīng)包含了SqlMapConfig.xml文件朽寞。在/com/comverse/timesheet/mybatis/下創(chuàng)建
SqlMapConfig.xml:

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//ibatis.apache.org//DTD Config 3.0//EN" "http://ibatis.apache.org/dtd/ibatis-3-config.dtd"> <configuration>     <typeAliases>         <!– Entities 參數(shù)實(shí)體 –>         <!– com.comverse.timesheet.web.bean 包中的 所有Bean, 取個(gè)別名 –>         <!– 比如TestTable類就用Test來(lái)表示–>         <typeAlias type="com.comverse.timesheet.web.bean.TestTable"         alias="Test" />     </typeAliases>     <mappers>         <!– 對(duì)應(yīng)Bean類的xml配置文件的路徑信息 –>         <mapper resource="com/comverse/timesheet/mybatis/mapper/Test.xml" />     </mappers> </configuration>
  1. 框架的整合完成识窿,項(xiàng)目的目錄結(jié)構(gòu)如下:


    在這里插入圖片描述
  2. 編寫一個(gè)測(cè)試頁(yè)面,這個(gè)頁(yè)面的路徑在dispatcher-servlet.xml中已經(jīng)確定—/WEB-INF/jsp/:
    文件名在controller中已經(jīng)定義–result, 后綴是 .jsp, 所以就是 result.jsp脑融。


    在這里插入圖片描述

(1). result.jsp:

<%@page language="java" contentType="text/html; charset=utf-8"     pageEncoding="utf-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Insert title here</title> </head> <body>     <h1> 你插入數(shù)據(jù)成功了S髌怠!肘迎!</h1> </body> </html>

14.至此半抱,我們的項(xiàng)目完成了脓恕,部署。

部署之前檢查一下problem框窿侈,看有沒有問題炼幔。這次我突然遇到一個(gè)問題,我上個(gè)星期五的時(shí)候都沒有遇到史简,今天就奇了怪了乃秀。不過(guò)沒事,問題來(lái)就想辦法解決它圆兵。
(1).在problem處發(fā)現(xiàn)這個(gè)問題


在這里插入圖片描述

Description:
Classpath entry org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER will not be exported or published. Runtime ClassNotFoundExceptions may result. 如果部署了項(xiàng)目跺讯,啟動(dòng),會(huì)報(bào)找不到類異常殉农。


在這里插入圖片描述

(2).問題的原因參考 Loose classpath web libraries support
在項(xiàng)目上右鍵–>properties—>deployment Assembly–>add,選擇 java build path entries刀脏,然后選中Maven dependencies–>finish–>OK,就能解決問題啦。

在這里插入圖片描述
在這里插入圖片描述

在這里插入圖片描述
  1. 一點(diǎn)小插曲過(guò)后超凳,我們?cè)俅蔚牟渴痦?xiàng)目愈污,重新啟動(dòng),看日志轮傍,項(xiàng)目成功的啟動(dòng)起來(lái)啦暂雹。
    在這里插入圖片描述

    打開瀏覽器:訪問 http://localhost:8080/Test/,看到HelloWord
    在這里插入圖片描述

    先查看數(shù)據(jù)的信息创夜,沒有數(shù)據(jù)杭跪,返回0行。
    在這里插入圖片描述

接著訪問驰吓,http://localhost:8080/Test/result.do 看到結(jié)果了涧尿,高興哇!檬贰!再看數(shù)據(jù)庫(kù)

在這里插入圖片描述

數(shù)據(jù)插入成功现斋,至此,我們的項(xiàng)目搭建完整的完成了Y苏骸W!!如有錯(cuò)別字迷雪,請(qǐng)?jiān)徬奘椋驗(yàn)榇蜃痔纯嗬玻≌逻郑≈x謝大家>胛鳌!

  1. 檢查一下我們的日志信息:

    [DEBUG] 2012-08-13 18:10:34 :DispatcherServlet with name ‘dispatcher’ determining Last-Modified value for [/Test/result.do] [DEBUG] 2012-08-13 18:10:34 :Mapping [/result.do] to handler ‘com.comverse.timesheet.web.controller.ResultController@7056d5’ [DEBUG] 2012-08-13 18:10:34 :Last-Modified value for [/Test/result.do] is: -1 [DEBUG] 2012-08-13 18:10:34 :DispatcherServlet with name ‘dispatcher’ processing GET request for [/Test/result.do] [DEBUG] 2012-08-13 18:10:34 :Invoking request handler method: public java.lang.String com.comverse.timesheet.web.controller.ResultController.viewUser(javax.servlet.http.HttpServletRequest,org.springframework.ui.ModelMap) throws java.lang.Exception $$$$$$$$$$$$$$$$$$$$$you want to check the result.jsp+++++++++++++ $$$$$$$$$$$$$$$$$$$$$ ready to insert +++++++++++++ [DEBUG] 2012-08-13 18:10:34 :Creating new transaction with name [com.comverse.timesheet.web.business.TestBusiness.add]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT,-java.lang.Exception [DEBUG] 2012-08-13 18:10:34 :Acquired Connection [jdbc:mysql://localhost:3306/timesheet, UserName=root@localhost, MySQL-AB JDBC Driver] for JDBC transaction [DEBUG] 2012-08-13 18:10:34 :Switching JDBC Connection [jdbc:mysql://localhost:3306/timesheet, UserName=root@localhost, MySQL-AB JDBC Driver] to manual commit [DEBUG] 2012-08-13 18:10:34 :Creating a new SqlSession [DEBUG] 2012-08-13 18:10:34 :Registering transaction synchronization for SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@177e6b4] [DEBUG] 2012-08-13 18:10:34 :JDBC Connection [jdbc:mysql://localhost:3306/timesheet, UserName=root@localhost, MySQL-AB JDBC Driver] will be managed by Spring [DEBUG] 2012-08-13 18:10:34 :ooo Using Connection [jdbc:mysql://localhost:3306/timesheet, UserName=root@localhost, MySQL-AB JDBC Driver] [DEBUG] 2012-08-13 18:10:34 :==> Preparing: INSERT INTO testtable (NAME,DATE) VALUES(?,?) [DEBUG] 2012-08-13 18:10:34 :==> Parameters: yuanmomo6(String), 2012-08-13 18:10:34.122(Timestamp) [DEBUG] 2012-08-13 18:10:34 :Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@177e6b4] [DEBUG] 2012-08-13 18:10:34 :Initiating transaction commit [DEBUG] 2012-08-13 18:10:34 :Committing JDBC transaction on Connection [jdbc:mysql://localhost:3306/timesheet, UserName=root@localhost, MySQL-AB JDBC Driver] [DEBUG] 2012-08-13 18:10:34 :Transaction synchronization committing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@177e6b4] [DEBUG] 2012-08-13 18:10:34 :Transaction synchronization closing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@177e6b4] [DEBUG] 2012-08-13 18:10:34 :Releasing JDBC Connection [jdbc:mysql://localhost:3306/timesheet, UserName=root@localhost, MySQL-AB JDBC Driver] after transaction [DEBUG] 2012-08-13 18:10:34 :Returning JDBC Connection to DataSource $$$$$$$$$$$$$$$$$$$$$ insert completed +++++++++++++ [DEBUG] 2012-08-13 18:10:34 :Invoking afterPropertiesSet() on bean with name ‘result’ [DEBUG] 2012-08-13 18:10:34 :Rendering view [org.springframework.web.servlet.view.JstlView: name ‘result’; URL [/WEB-INF/jsp/result.jsp]] in DispatcherServlet with name ‘dispatcher’ [DEBUG] 2012-08-13 18:10:34 :Forwarding to resource [/WEB-INF/jsp/result.jsp] in InternalResourceView ‘result’ [DEBUG] 2012-08-13 18:10:34 :Successfully completed request [DEBUG] 2012-08-13 18:10:34 :Returning cached instance of singleton bean ‘sqlSessionFactory’

可以看出我們的事務(wù)也添加成功赁严。

Spring MVC的流程:
request–>controller–>business–>implementation–>mysql

GitHub項(xiàng)目地址:GitHub項(xiàng)目地址:https://github.com/BothEyes1993/HNUST2

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末扰柠,一起剝皮案震驚了整個(gè)濱河市粉铐,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌卤档,老刑警劉巖蝙泼,帶你破解...
    沈念sama閱讀 219,188評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異劝枣,居然都是意外死亡汤踏,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門舔腾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)溪胶,“玉大人,你說(shuō)我怎么就攤上這事稳诚』┎保” “怎么了?”我有些...
    開封第一講書人閱讀 165,562評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵扳还,是天一觀的道長(zhǎng)才避。 經(jīng)常有香客問我,道長(zhǎng)普办,這世上最難降的妖魔是什么工扎? 我笑而不...
    開封第一講書人閱讀 58,893評(píng)論 1 295
  • 正文 為了忘掉前任徘钥,我火速辦了婚禮衔蹲,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘呈础。我一直安慰自己舆驶,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,917評(píng)論 6 392
  • 文/花漫 我一把揭開白布而钞。 她就那樣靜靜地躺著沙廉,像睡著了一般。 火紅的嫁衣襯著肌膚如雪臼节。 梳的紋絲不亂的頭發(fā)上撬陵,一...
    開封第一講書人閱讀 51,708評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音网缝,去河邊找鬼巨税。 笑死,一個(gè)胖子當(dāng)著我的面吹牛粉臊,可吹牛的內(nèi)容都是我干的草添。 我是一名探鬼主播,決...
    沈念sama閱讀 40,430評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼扼仲,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼远寸!你這毒婦竟也來(lái)了抄淑?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,342評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤驰后,失蹤者是張志新(化名)和其女友劉穎肆资,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體倡怎,經(jīng)...
    沈念sama閱讀 45,801評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡迅耘,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,976評(píng)論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了监署。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片颤专。...
    茶點(diǎn)故事閱讀 40,115評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖钠乏,靈堂內(nèi)的尸體忽然破棺而出栖秕,到底是詐尸還是另有隱情,我是刑警寧澤晓避,帶...
    沈念sama閱讀 35,804評(píng)論 5 346
  • 正文 年R本政府宣布簇捍,位于F島的核電站,受9級(jí)特大地震影響俏拱,放射性物質(zhì)發(fā)生泄漏暑塑。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,458評(píng)論 3 331
  • 文/蒙蒙 一锅必、第九天 我趴在偏房一處隱蔽的房頂上張望事格。 院中可真熱鬧,春花似錦搞隐、人聲如沸驹愚。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,008評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)逢捺。三九已至,卻和暖如春癞季,著一層夾襖步出監(jiān)牢的瞬間劫瞳,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,135評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工绷柒, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留志于,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,365評(píng)論 3 373
  • 正文 我出身青樓辉巡,卻偏偏與公主長(zhǎng)得像恨憎,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,055評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容