Spring+Struts2+Hibernate框架搭建
SSH框架版本:Struts-2.3.30 + Spring-4.2.2 + Hibernate5.2.2
下图是所需要的Jar包:
下面是项目的结构图:
1、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" id="WebApp_ID" version="3.0"> <display-name>ssh</display-name> <!-- 配置struts2核心的过滤器 --> <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- Spring管理配置文件 --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/applicationContext-*.xml</param-value> </context-param> <!-- Spring监听器 --> <listener> <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class> </listener> <!-- 配置请求过滤器,编码格式设为UTF-8,避免中文乱码--> <filter> <filter-name>springUtf8Encoding</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>springUtf8Encoding</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>
2、struts.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <!--开启开发模式--> <constant name="struts.devMode" value="true"/> <!--使用简单样式 --> <constant name="struts.ui.theme" value="simple" /> <!-- 表示使用spring框架,本配置文件中所有action都要到spring配置文件中查找 --> <constant name="struts.objectFactory" value="spring" /> <package name="default" extends="struts-default"> <!-- action实际配置在applicationContext.xml配置文件中 --> <action name="grid" class="scoreAction" method="grid"> </action> </package> </struts>
3、db.properties
jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false jdbc.user=root jdbc.password=root
4、applicationContext-common.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: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.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.2.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.2.xsd"> <!-- 加载外部properties文件 --> <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="location" value="WEB-INF/db.properties"/> </bean> <!-- 采用C3P0数据库连接池方式连接数据库 --> <bean id= "candy" class ="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close" > <property name="driverClass" value="${jdbc.driver}"> </property> <property name="jdbcUrl" value="${jdbc.url}"> </property> <property name="user" value="${jdbc.user}"> </property> <property name="password" value="${jdbc.password}"> </property> <!-- 当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default: 1 --> <property name="acquireIncrement" value="1" ></property> <!-- 初始化时获取三个连接,取值应在minPoolSize与maxPoolSize之间。Default: 3 --> <property name="initialPoolSize" value="10" ></property> <!-- 最大空闲时间,60秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0 --> <property name="maxIdleTime" value="60"></property> <!-- 连接池中保留的最大连接数。Default: 15 --> <property name="maxPoolSize" value="150"></property> <!-- 连接池中保留的最小连接数。Default: 3 --> <property name="minPoolSize" value="5"></property> <!-- 两次连接中间隔时间,单位毫秒。Default: 1000 --> <property name="acquireRetryDelay" value="1000"></property> <!-- 定义在从数据库获取新连接失败后重复尝试的次数。Default: 30 --> <property name="acquireRetryAttempts" value="60"></property> <!-- 获取连接失败将会引起所有等待连接池来获取连接的线程抛出异常。但是数据源仍有效--> <!-- 保留,并在下次调用GETCONNECTION()的时候继续尝试获取连接。如果设为TRUE,那么在尝试--> <!-- 获取连接失败后该数据源将申明已断开并永久关闭。DEFAULT: FALSE --> <property name="breakAfterAcquireFailure" value="false" ></property> </bean> <!-- 取代HiberbnateSessionFactory.java --> <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> <!-- 设置注入 --> <property name="dataSource"> <ref bean="candy" /> </property> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect"> org.hibernate.dialect.MySQL5Dialect </prop> <prop key="hibernate.show_sql"> true </prop> <prop key="hibernate.format_sql"> true </prop> <!-- 是否允许Hibernate用JDBC的可滚动的结果集 --> <prop key="hibernate.jdbc.use_scrollable_resultset"> false </prop> </props> </property> <!-- 说明映射文件 --> <property name="mappingResources"> <list> <value>ssh/entity/Score.hbm.xml</value> </list> </property> </bean> <!-- 事物管理 --> <bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory"/> </bean> <bean id="transactionProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean" abstract="true"> <property name="transactionManager" ref="transactionManager"></property> <property name="transactionAttributes"> <props> <prop key="save*">PROPAGATION_REQUIRED, -Exception</prop> <prop key="add*">PROPAGATION_REQUIRED, -Exception</prop> <prop key="update*">PROPAGATION_REQUIRED, -Exception</prop> <prop key="delete*">PROPAGATION_REQUIRED, -Exception</prop> <prop key="find*">PROPAGATION_REQUIRED, readOnly</prop> </props> </property> </bean> <!-- <bean id="userDao" parent="transactionProxy"> <property name="target"> 用bean代替ref的方式 <bean class="com.dao.UserDaoImpl"> <property name="sessionFactory" ref="sessionFactory"></property> </bean> </property> </bean> --> </beans>
5、applicationContext-beans.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: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.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.2.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.2.xsd"> <!--配置bean --> <!-- <bean id="baseDaoImpl" class="ssh.base.BaseDaoImpl" scope="prototype"> <property name="sessionFactory" > <ref bean="sessionFactory"/> </property> </bean> <bean id="baseServiceImpl" class="ssh.service.impl.BaseServiceImpl" scope="prototype"> <property name="baseDao" > <ref bean="baseDaoImpl"/> </property> </bean> --> <bean id="scoreDaoImpl" class="ssh.dao.impl.ScoreDaoImpl" scope="prototype"> <property name="sessionFactory" > <ref bean="sessionFactory"/> </property> </bean> <bean id="scoreServiceImpl" class="ssh.service.impl.ScoreServiceImpl" scope="prototype"> <property name="scoreDao" > <ref bean="scoreDaoImpl"/> </property> </bean> </beans>
6、applicationContext-actions.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: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.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.2.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.2.xsd"> <bean id="scoreAction" class="ssh.action.ScoreAction" scope="prototype"> <property name="scoreService"> <ref bean="scoreServiceImpl"/> </property> </bean> </beans>
7、log4j.properties
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{MM-dd HH\:mm\:ss.SSS} %-5p [%F\:%L]%x %m%n
log4j.appender.fileout=org.apache.log4j.RollingFileAppender
log4j.appender.fileout.File=D://application.log
log4j.appender.fileout.MaxFileSize=10000KB
log4j.appender.fileout.MaxBackupIndex=10
log4j.appender.fileout.layout=org.apache.log4j.PatternLayout
log4j.appender.fileout.layout.ConversionPattern=%d{MM-dd HH:mm:ss.SSS}[%24F:%-3L:%-5p]%x %m%n
log4j.rootCategory=INFO, stdout
log4j.logger.com.wolfsquare.log2=DEBUG,stdout
追梦的脚步,永不停息