一. 開發環境
1. 點擊此查看並下載需要的 Eclipse IDE for Java EE Developers 開發工具,推薦選用32位
2. 點擊此查看並下載需要的 MySQL Server 數據庫,推薦選用32位
3. 點擊此找到並下載 Java SE Development Kit 6u45,推薦選用32位
4. 點擊此找到並下載 apache-tomcat-6.0.48.zip
二. 准備工作
1. 點擊此找到並下載 spring-framework-4.3.4.RELEASE-dist.zip,解壓縮並在 libs 文件夾下得到:
spring-aop-4.3.4.RELEASE.jar spring-beans-4.3.4.RELEASE.jar spring-context-4.3.4.RELEASE.jar spring-core-4.3.4.RELEASE.jar spring-expression-4.3.4.RELEASE.jar spring-jdbc-4.3.4.RELEASE.jar spring-orm-4.3.4.RELEASE.jar spring-tx-4.3.4.RELEASE.jar spring-web-4.3.4.RELEASE.jar spring-webmvc-4.3.4.RELEASE.jarView Code
目前最高版本
2. 點擊此找到並下載 aspectjweaver-1.8.9.jar
目前最高穩定版本,spring AOP 依賴 aspectj 來實現的
3. 點擊此找到並下載 hibernate-release-4.2.21.Final.zip,解壓縮並在 libs/required 文件夾下得到:
antlr-2.7.7.jar dom4j-1.6.1.jar hibernate-commons-annotations-4.0.2.Final.jar hibernate-core-4.2.21.Final.jar hibernate-jpa-2.0-api-1.0.1.Final.jar javassist-3.18.1-GA.jar jboss-logging-3.1.0.GA.jar jboss-transaction-api_1.1_spec-1.0.1.Final.jarView Code
支持 java 1.6 的最高版本
4. 點擊此找到並下載 slf4j-1.7.21.zip,解壓縮得到:
jcl-over-slf4j-1.7.21.jar slf4j-api-1.7.21.jar slf4j-log4j12-1.7.21.jarView Code
目前最高版本,spring 的日記記錄采用:jc-over-slf4j ---> slf4j ---> log4j
5. 點擊此找到並下載 log4j-1.2.17.jar
支持 java 1.6、spring-4.3.4 的最高穩定版本
6. 點擊此找到並下載 log4jdbc4-1.2.1.jar.zip,解壓縮得到:log4jdbc4-1.2.1.jar
7. 點擊此找到並下載 fastjson-1.2.21.jar
8. 點擊此找到並下載 mysql-connector-java-5.1.40.zip,解壓縮得到: mysql-connector-java-5.1.40-bin.jar
9. 點擊此找到並下載 commons-lang3-3.5.jar
目前最高版本
三. 工程搭建
1. Eclipse --> File --> New --> Dynamic Web Project --> 輸入工程名 ims --> Next -->
修改 Default output folder 為:WebContent/WEB-INF/classes --> Finish
2. 將(一)中得到的所有jar包放到 WebContent/WEB-INF/lib 文件夾下
3. src 目錄下創建如下包結構:
src |--com | |--ims | | |--common | | |--persistence | | | |--base | | | |--dao | | | | |--xxx | | | | |--impl | | | |--model | | | |--xxx | | |--service | | | |--xxx | | | |--impl | | |--web | | | |--controller | | | | |---xxxView Code
其中,xxx表示子項目
4. src 目錄下創建如下文件:
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:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-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/context http://www.springframework.org/schema/context/spring-context-4.3.xsd"> <context:component-scan base-package="com" use-default-filters="false"> <context:include-filter type="aspectj" expression="com.ims.persistence.dao..*.impl.*DaoImpl"/> <context:include-filter type="aspectj" expression="com.ims.service..*.impl.*BSImpl"/> </context:component-scan> <!-- log4jdbc,需要依賴slf4j框架,攔截輸出完整sql語句 --> <bean id="log4jdbcInterceptor" class="net.sf.log4jdbc.DataSourceSpyInterceptor" /> <bean id="dataSourceLog4jdbcAutoProxyCreator" class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator"> <property name="interceptorNames"> <list> <value>log4jdbcInterceptor</value> </list> </property> <property name="beanNames"> <list> <value>sysDatasource</value> <value>mmsDatasource</value> </list> </property> </bean> </beans>View Code
applicationContextXxx.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:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-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/context http://www.springframework.org/schema/context/spring-context-4.3.xsd"> <bean id="xxxDatasource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost:3306/xxx?characterEncoding=utf8" /> <property name="username" value="root" /> <property name="password" value="123456" /> </bean> <bean id="xxxSessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> <property name="configLocation" value="classpath:hibernate.cfg.xml"/> <property name="dataSource" ref="xxxDatasource" /> <property name="packagesToScan"> <list> <value>com.ims.persistence.model.xxx</value> </list> </property> </bean> <bean id="xxxTransactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager"> <property name="sessionFactory" ref="xxxSessionFactory"/> </bean> <tx:advice id="xxxTxAdvice" transaction-manager="xxxTransactionManager"> <tx:attributes> <tx:method name="find*" isolation="READ_COMMITTED" read-only="true"/> <tx:method name="get*" isolation="READ_COMMITTED" read-only="true"/> <tx:method name="*" isolation="READ_COMMITTED" rollback-for="Throwable" /> </tx:attributes> </tx:advice> <aop:config> <aop:pointcut id="xxxTxPointcut" expression="execution(* com.ims.service.xxx.impl..*BSImpl.*(..))"/> <aop:advisor advice-ref="xxxTxAdvice" pointcut-ref="xxxTxPointcut" order="0"/> </aop:config> <bean id="xxxBaseDao" class="com.ims.persistence.dao.xxx.impl.XxxBaseDaoImpl"> <property name="sessionFactory" ref="xxxSessionFactory"/> </bean> </beans>View Code
其中,xxx表示子項目的名稱
controllerServlet.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: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-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/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd"> <mvc:annotation-driven /> <context:component-scan base-package="com" use-default-filters="false"> <context:include-filter type="aspectj" expression="com.ims.web.controller..*Controller"/> </context:component-scan> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/view/" /> </bean> </beans>View Code
hibernate.cfg.xml
<?xml version='1.0' encoding='UTF-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <property name="hibernate.order_updates">true</property> <property name="hibernate.show_sql">false</property> <!-- none --> <property name="hibernate.hbm2ddl.auto">update</property> <property name="hibernate.c3p0.max_size">30</property> <property name="hibernate.c3p0.min_size">5</property> <property name="hibernate.c3p0.timeout">3000</property> <property name="hibernate.c3p0.max_statements">50</property> <!--每隔多少秒檢測連接是否可正常使用 --> <property name="c3p0.idle_test_period">121</property> <!--當池中的連接耗盡的時候,一次性增加的連接數量,默認為3--> <property name="c3p0.acquire_increment">1</property> <property name="c3p0.validate">true</property> <property name="dialect">org.hibernate.dialect.MySQLInnoDBDialect</property> </session-factory> </hibernate-configuration>View Code
log4j.properties
#輸出級別和輸出位置 ; 包中只有級別大於或等於配置級別,才允許輸出 log4j.rootLogger=WARN,console,roll #控制台輸出 log4j.appender.console = org.apache.log4j.ConsoleAppender log4j.appender.console.layout=org.apache.log4j.PatternLayout log4j.appender.console.layout.ConversionPattern=%d %p [%c] - %m%n #按日期滾動輸出 log4j.appender.roll=org.apache.log4j.DailyRollingFileAppender log4j.appender.roll.File=${catalina.base}/logs/ims/ims.log log4j.appender.roll.layout=org.apache.log4j.PatternLayout log4j.appender.roll.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %p %t %c %m%n #繼承rootLogger的輸出位置 log4j.logger.com.ims = WARN log4j.logger.org.hibernate.cache = ERROR log4j.logger.org.directwebremoting = ERROR #顯示sql語句的參數 #log4j.logger.org.hibernate.type=trace log4j.logger.jdbc.connection=OFF log4j.logger.jdbc.audit=OFF log4j.logger.jdbc.resultset=OFF log4j.logger.jdbc.sqlonly=OFF #INFO、OFF log4j.logger.jdbc.sqltiming=INFOView Code
5. 創建基礎controller類:
創建工程的基礎controller類:
詳見 springMVC基礎controller類
創建子項目的基礎controller類:
package com.ims.web.controller.xxx; import com.ims.web.controller.BaseController; public class XxxBaseController extends BaseController{ }View Code
6. 創建基礎dao類:
創建工程的基礎dao類:
詳見 hibernate基礎dao類
創建子項目的基礎dao類:
基礎接口類:XxxBaseDao.java
package com.ims.persistence.dao.xxx; import java.io.Serializable; import java.util.List; import java.util.Map; import com.ims.persistence.base.BaseDao; /** * 統一數據訪問接口 */ public interface XxxBaseDao<T extends Serializable> extends BaseDao<T> { }View Code
基礎接口實現類:XxxBaseDaoImpl.java
package com.ims.persistence.dao.xxx.impl; import java.io.Serializable; import java.util.ArrayList; import java.util.List; import java.util.Map; import javax.annotation.Resource; import org.hibernate.SessionFactory; import com.ims.persistence.base.BaseDaoImpl; import com.ims.persistence.dao.xxx.XxxBaseDao; public class XxxBaseDaoImpl<T extends Serializable> extends BaseDaoImpl<T> implements XxxBaseDao<T>{ @Resource(name = "xxxSessionFactory") public void setSuperSessionFactory(SessionFactory xxxSessionFactory) { super.setSessionFactory(xxxSessionFactory); } }View Code
7. WebContent 目錄下創建如下目錄結構:
WebContent |--common |--content | |--css | |--images | |--js |--sql | |--xxx |--view | |--xxx |--viewModel | |--xxxView Code
8. 修改 WebContent/WEB-INF/web.xml 為:
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:web="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_4.xsd http://xmlns.jcp.org/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.4"> <session-config> <session-timeout>30</session-timeout> </session-config> <context-param> <param-name>log4jConfigLocation</param-name> <param-value>classpath:log4j.properties</param-value> </context-param> <context-param> <param-name>contextConfigLocation</param-name> <param-value> classpath:applicationContext.xml, classpath:applicationContextXxx.xml </param-value> </context-param> <context-param> <param-name>webAppRootKey</param-name> <param-value>webapp.root</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <listener> <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class> </listener> <listener> <listener-class>org.springframework.web.util.WebAppRootListener</listener-class> </listener> <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> <servlet> <servlet-name>controller</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:controllerServlet.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>controller</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> </web-app>View Code