一、在WEB中配置文件spring字符集过滤
二、在web.xml加载spring配置
三、在web.xml中配置OpenSessionInViewFilter
四、在struts-config.xml配置spring
五、配置log4j.properties文件
六、配置applicationContent.xml文件
七、写DAO基础类
IBaseDAO.java
BaseDAO.java
<
filter
>
< filter-name > CharsetFilter </ 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 > CharsetFilter </ filter-name >
< url-pattern > /* </ url-pattern >
</ filter-mapping >
< filter-name > CharsetFilter </ 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 > CharsetFilter </ filter-name >
< url-pattern > /* </ url-pattern >
</ filter-mapping >
<
context-param
>
< param-name > contextConfigLocation </ param-name >
< param-value > /WEB-INF/applicationContext.xml </ param-value >
</ context-param >
< listener >
< listener-class >
org.springframework.web.context.ContextLoaderListener
</ listener-class >
</ listener >
< param-name > contextConfigLocation </ param-name >
< param-value > /WEB-INF/applicationContext.xml </ param-value >
</ context-param >
< listener >
< listener-class >
org.springframework.web.context.ContextLoaderListener
</ listener-class >
</ listener >
<
filter
>
< filter-name > hibernateFilter </ filter-name >
< filter-class >
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
</ filter-class >
< init-param >
< param-name > singleSession </ param-name >
< param-value > false </ param-value >
</ init-param >
</ filter >
< filter-mapping >
< filter-name > hibernateFilter </ filter-name >
< url-pattern > /* </ url-pattern >
</ filter-mapping >
< filter-name > hibernateFilter </ filter-name >
< filter-class >
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
</ filter-class >
< init-param >
< param-name > singleSession </ param-name >
< param-value > false </ param-value >
</ init-param >
</ filter >
< filter-mapping >
< filter-name > hibernateFilter </ filter-name >
< url-pattern > /* </ url-pattern >
</ filter-mapping >
<
controller
contentType
="text/html;charset=UTF-8"
>
< set-property property ="processorClass"
value ="org.springframework.web.struts.DelegatingRequestProcessor" />
</ controller >
< message-resources parameter ="org.school.web.ApplicationResources" />
< plug-in
className ="org.springframework.web.struts.ContextLoaderPlugIn" >
< set-property property ="contextConfigLocation"
value ="/WEB-INF/strutsContext.xml" />
</ plug-in >
< set-property property ="processorClass"
value ="org.springframework.web.struts.DelegatingRequestProcessor" />
</ controller >
< message-resources parameter ="org.school.web.ApplicationResources" />
< plug-in
className ="org.springframework.web.struts.ContextLoaderPlugIn" >
< set-property property ="contextConfigLocation"
value ="/WEB-INF/strutsContext.xml" />
</ plug-in >
#log4j.rootLogger
=
DEBUG
,
A1
,
R
#log4j.rootLogger = INFO , A1 , R
log4j.rootLogger = ERROR , A1
#log4j.category.com.laoer = INFO , A1 , R
log4j.appender.A1 = org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout = org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern = %-d{yyyy-MM-ddHH:mm:ss , SSS} [ %c ] - [ %p ] %m%n
log4j.appender.R = org.apache.log4j.RollingFileAppender
log4j.appender.R.File = study_log.txt
log4j.appender.R.MaxFileSize = 500KB
log4j.appender.R.MaxBackupIndex = 1
#log4j.appender.R.layout = org.apache.log4j.HTMLLayout
log4j.appender.R.layout = org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern = %d{yyyy-MM-ddHH:mm:ss , SSS} [ %t ] [ %c ] [ %p ] -%m%n
#log4j.rootLogger = INFO , A1 , R
log4j.rootLogger = ERROR , A1
#log4j.category.com.laoer = INFO , A1 , R
log4j.appender.A1 = org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout = org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern = %-d{yyyy-MM-ddHH:mm:ss , SSS} [ %c ] - [ %p ] %m%n
log4j.appender.R = org.apache.log4j.RollingFileAppender
log4j.appender.R.File = study_log.txt
log4j.appender.R.MaxFileSize = 500KB
log4j.appender.R.MaxBackupIndex = 1
#log4j.appender.R.layout = org.apache.log4j.HTMLLayout
log4j.appender.R.layout = org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern = %d{yyyy-MM-ddHH:mm:ss , SSS} [ %t ] [ %c ] [ %p ] -%m%n
<?
xmlversion="1.0"encoding="UTF-8"
?>
<! DOCTYPEbeansPUBLIC"-//SPRING//DTDBEAN//EN""http://www.springframework.org/dtd/spring-beans.dtd" >
< beans default-lazy-init ="false" >
< bean id ="dataSource"
class ="org.apache.commons.dbcp.BasicDataSource" >
< property name ="driverClassName" >
< value > com.mysql.jdbc.Driver </ value >
</ property >
< property name ="url" >
< value > jdbc:mysql://localhost/school?useUnicode=true & characterEncoding=utf8 </ value >
</ property >
< property name ="username" >
< value > root </ value >
</ property >
< property name ="password" >
< value > vkbje76 </ value >
</ property >
< property name ="maxActive" >
< value > 10 </ value >
</ property >
< property name ="maxIdle" >
< value > 2 </ value >
</ property >
< property name ="maxWait" >
< value > 1200 </ value >
</ property >
</ bean >
< bean id ="sessionFactory"
class ="org.springframework.orm.hibernate3.LocalSessionFactoryBean" >
< property name ="dataSource" >
< ref bean ="dataSource" />
</ property >
< property name ="hibernateProperties" >
< props >
< prop key ="hibernate.dialect" >
org.hibernate.dialect.MySQLDialect
</ prop >
<!--
<propkey="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</prop>
-->
< prop key ="hibernate.dialect" >
org.hibernate.dialect.MySQLDialect
</ prop >
< prop key ="hibernate.show_sql" > true </ prop >
< prop key ="hibernate.jdbc.fetch_size" > 25 </ prop >
< prop key ="hibernate.jdbc.batch_size" > 50 </ prop >
<!-- <propkey="hibernate.hbm2ddl.auto">create-drop</prop>
-->
</ props >
</ property >
< property name ="mappingResources" >
< list >
< value > org/school/dao/entity/Users.hbm.xml </ value >
< value > org/school/dao/entity/Groups.hbm.xml </ value >
< value > org/school/dao/entity/GroupUser.hbm.xml </ value >
</ list >
</ property >
</ bean >
< bean id ="transactionManager"
class ="org.springframework.orm.hibernate3.HibernateTransactionManager" >
< property name ="sessionFactory" ref ="sessionFactory" />
</ bean >
< bean id ="baseProxyFactory" abstract ="true"
class ="org.springframework.transaction.interceptor.TransactionProxyFactoryBean" >
< property name ="transactionManager" ref ="transactionManager" />
< property name ="transactionAttributes" >
< props >
< prop key ="get*" > PROPAGATION_REQUIRED </ prop >
< prop key ="update*" > PROPAGATION_REQUIRED </ prop >
< prop key ="add*" > PROPAGATION_REQUIRED </ prop >
< prop key ="delete*" > PROPAGATION_REQUIRED </ prop >
</ props >
</ property >
</ bean >
<!--
<beanid="UserServerProxy"parent="baseProxyFactory">
<propertyname="target">
<reflocal="UserServer"/>
</property>
</bean>
-->
< bean id ="UserDAO" class ="org.school.dao.hibernate.UserDAO" >
< property name ="sessionFactory" >
< ref bean ="sessionFactory" />
</ property >
</ bean >
< bean id ="GroupDAO" class ="org.school.dao.hibernate.GroupDAO" >
< property name ="sessionFactory" >
< ref bean ="sessionFactory" />
</ property >
</ bean >
< bean id ="GroupUserDAO" class ="org.school.dao.hibernate.GroupUserDAO" >
< property name ="sessionFactory" >
< ref bean ="sessionFactory" />
</ property >
</ bean >
< bean id ="UserServer" class ="org.school.server.impl.UserServer" >
< property name ="userDAO" >
< ref bean ="UserDAO" />
</ property >
< property name ="groupDAO" >
< ref bean ="GroupDAO" />
</ property >
< property name ="groupUserDAO" >
< ref bean ="GroupUserDAO" />
</ property >
</ bean >
< bean id ="UserServerProxy" parent ="baseProxyFactory" >
< property name ="target" >
< ref local ="UserServer" />
</ property >
</ bean >
</ beans >
<! DOCTYPEbeansPUBLIC"-//SPRING//DTDBEAN//EN""http://www.springframework.org/dtd/spring-beans.dtd" >
< beans default-lazy-init ="false" >
< bean id ="dataSource"
class ="org.apache.commons.dbcp.BasicDataSource" >
< property name ="driverClassName" >
< value > com.mysql.jdbc.Driver </ value >
</ property >
< property name ="url" >
< value > jdbc:mysql://localhost/school?useUnicode=true & characterEncoding=utf8 </ value >
</ property >
< property name ="username" >
< value > root </ value >
</ property >
< property name ="password" >
< value > vkbje76 </ value >
</ property >
< property name ="maxActive" >
< value > 10 </ value >
</ property >
< property name ="maxIdle" >
< value > 2 </ value >
</ property >
< property name ="maxWait" >
< value > 1200 </ value >
</ property >
</ bean >
< bean id ="sessionFactory"
class ="org.springframework.orm.hibernate3.LocalSessionFactoryBean" >
< property name ="dataSource" >
< ref bean ="dataSource" />
</ property >
< property name ="hibernateProperties" >
< props >
< prop key ="hibernate.dialect" >
org.hibernate.dialect.MySQLDialect
</ prop >
<!--
<propkey="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</prop>
-->
< prop key ="hibernate.dialect" >
org.hibernate.dialect.MySQLDialect
</ prop >
< prop key ="hibernate.show_sql" > true </ prop >
< prop key ="hibernate.jdbc.fetch_size" > 25 </ prop >
< prop key ="hibernate.jdbc.batch_size" > 50 </ prop >
<!-- <propkey="hibernate.hbm2ddl.auto">create-drop</prop>
-->
</ props >
</ property >
< property name ="mappingResources" >
< list >
< value > org/school/dao/entity/Users.hbm.xml </ value >
< value > org/school/dao/entity/Groups.hbm.xml </ value >
< value > org/school/dao/entity/GroupUser.hbm.xml </ value >
</ list >
</ property >
</ bean >
< bean id ="transactionManager"
class ="org.springframework.orm.hibernate3.HibernateTransactionManager" >
< property name ="sessionFactory" ref ="sessionFactory" />
</ bean >
< bean id ="baseProxyFactory" abstract ="true"
class ="org.springframework.transaction.interceptor.TransactionProxyFactoryBean" >
< property name ="transactionManager" ref ="transactionManager" />
< property name ="transactionAttributes" >
< props >
< prop key ="get*" > PROPAGATION_REQUIRED </ prop >
< prop key ="update*" > PROPAGATION_REQUIRED </ prop >
< prop key ="add*" > PROPAGATION_REQUIRED </ prop >
< prop key ="delete*" > PROPAGATION_REQUIRED </ prop >
</ props >
</ property >
</ bean >
<!--
<beanid="UserServerProxy"parent="baseProxyFactory">
<propertyname="target">
<reflocal="UserServer"/>
</property>
</bean>
-->
< bean id ="UserDAO" class ="org.school.dao.hibernate.UserDAO" >
< property name ="sessionFactory" >
< ref bean ="sessionFactory" />
</ property >
</ bean >
< bean id ="GroupDAO" class ="org.school.dao.hibernate.GroupDAO" >
< property name ="sessionFactory" >
< ref bean ="sessionFactory" />
</ property >
</ bean >
< bean id ="GroupUserDAO" class ="org.school.dao.hibernate.GroupUserDAO" >
< property name ="sessionFactory" >
< ref bean ="sessionFactory" />
</ property >
</ bean >
< bean id ="UserServer" class ="org.school.server.impl.UserServer" >
< property name ="userDAO" >
< ref bean ="UserDAO" />
</ property >
< property name ="groupDAO" >
< ref bean ="GroupDAO" />
</ property >
< property name ="groupUserDAO" >
< ref bean ="GroupUserDAO" />
</ property >
</ bean >
< bean id ="UserServerProxy" parent ="baseProxyFactory" >
< property name ="target" >
< ref local ="UserServer" />
</ property >
</ bean >
</ beans >
IBaseDAO.java
package
org.school.dao;
import java.io.Serializable;
import java.util.List;
public interface IBaseDAO ... {
/**//*
*
*/
publicObjectfindById(StringclassName,Serializableid);
publicListfindByProperty(StringtableName,StringpropertyName,Objectvalue);
publicvoidattachDirty(Objectinstance);
publicSerializablesave(ObjecttransientInstance);
publicvoiddelete(ObjectpersistentInstance);
}
import java.io.Serializable;
import java.util.List;
public interface IBaseDAO ... {
/**//*
*
*/
publicObjectfindById(StringclassName,Serializableid);
publicListfindByProperty(StringtableName,StringpropertyName,Objectvalue);
publicvoidattachDirty(Objectinstance);
publicSerializablesave(ObjecttransientInstance);
publicvoiddelete(ObjectpersistentInstance);
}
package
org.school.dao.hibernate;
import java.io.Serializable;
import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hibernate.Query;
import org.school.dao.IBaseDAO;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
/***/ /**
*Dataaccessobject(DAO)fordomainmodel
*
*@authorMyEclipse-HibernateTools
*/
public class BaseDAO extends HibernateDaoSupport implements IBaseDAO ... {
publicstaticfinalLoglog=LogFactory.getLog(UserDAO.class);
/**//*(non-Javadoc)
*@seeorg.school.dao.hibernate.IBaseDAO#findById(java.lang.String,java.lang.Integer)
*/
publicObjectfindById(StringclassName,Serializableid)...{
log.debug("gettinginstancewithid:"+id);
try...{
Objectinstance=getHibernateTemplate().get(className,id);
returninstance;
}catch(RuntimeExceptionre)...{
log.error("getfailed",re);
throwre;
}
}
/**//*(non-Javadoc)
*@seeorg.school.dao.hibernate.IBaseDAO#findByProperty(java.lang.String,java.lang.Object)
*/
publicListfindByProperty(StringtableName,StringpropertyName,Objectvalue)...{
log.debug("findinginstancewithproperty:"+propertyName
+",value:"+value);
try...{
StringqueryString="from"+tableName+"asmodelwheremodel."
+propertyName+"=?";
QueryqueryObject=getSession().createQuery(queryString);
queryObject.setParameter(0,value);
returnqueryObject.list();
}catch(RuntimeExceptionre)...{
log.error("findbypropertynamefailed",re);
throwre;
}
}
/**//*(non-Javadoc)
*@seeorg.school.dao.hibernate.IBaseDAO#attachDirty(java.lang.Object)
*/
publicvoidattachDirty(Objectinstance)...{
log.debug("attachingdirtyinstance");
try...{
getHibernateTemplate().saveOrUpdate(instance);
log.debug("attachsuccessful");
}catch(RuntimeExceptionre)...{
log.error("attachfailed",re);
throwre;
}
}
/**//*(non-Javadoc)
*@seeorg.school.dao.hibernate.IBaseDAO#save(java.lang.Object)
*/
publicSerializablesave(ObjecttransientInstance)...{
log.debug("savinginstance");
try...{
returngetHibernateTemplate().save(transientInstance);
//log.debug("savesuccessful");
}catch(RuntimeExceptionre)...{
log.error("savefailed",re);
throwre;
}
}
/**//*(non-Javadoc)
*@seeorg.school.dao.hibernate.IBaseDAO#delete(java.lang.Object)
*/
publicvoiddelete(ObjectpersistentInstance)...{
log.debug("deletinginstance");
try...{
getSession().delete(persistentInstance);
log.debug("deletesuccessful");
}catch(RuntimeExceptionre)...{
log.error("deletefailed",re);
throwre;
}
}
}
import java.io.Serializable;
import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hibernate.Query;
import org.school.dao.IBaseDAO;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
/***/ /**
*Dataaccessobject(DAO)fordomainmodel
*
*@authorMyEclipse-HibernateTools
*/
public class BaseDAO extends HibernateDaoSupport implements IBaseDAO ... {
publicstaticfinalLoglog=LogFactory.getLog(UserDAO.class);
/**//*(non-Javadoc)
*@seeorg.school.dao.hibernate.IBaseDAO#findById(java.lang.String,java.lang.Integer)
*/
publicObjectfindById(StringclassName,Serializableid)...{
log.debug("gettinginstancewithid:"+id);
try...{
Objectinstance=getHibernateTemplate().get(className,id);
returninstance;
}catch(RuntimeExceptionre)...{
log.error("getfailed",re);
throwre;
}
}
/**//*(non-Javadoc)
*@seeorg.school.dao.hibernate.IBaseDAO#findByProperty(java.lang.String,java.lang.Object)
*/
publicListfindByProperty(StringtableName,StringpropertyName,Objectvalue)...{
log.debug("findinginstancewithproperty:"+propertyName
+",value:"+value);
try...{
StringqueryString="from"+tableName+"asmodelwheremodel."
+propertyName+"=?";
QueryqueryObject=getSession().createQuery(queryString);
queryObject.setParameter(0,value);
returnqueryObject.list();
}catch(RuntimeExceptionre)...{
log.error("findbypropertynamefailed",re);
throwre;
}
}
/**//*(non-Javadoc)
*@seeorg.school.dao.hibernate.IBaseDAO#attachDirty(java.lang.Object)
*/
publicvoidattachDirty(Objectinstance)...{
log.debug("attachingdirtyinstance");
try...{
getHibernateTemplate().saveOrUpdate(instance);
log.debug("attachsuccessful");
}catch(RuntimeExceptionre)...{
log.error("attachfailed",re);
throwre;
}
}
/**//*(non-Javadoc)
*@seeorg.school.dao.hibernate.IBaseDAO#save(java.lang.Object)
*/
publicSerializablesave(ObjecttransientInstance)...{
log.debug("savinginstance");
try...{
returngetHibernateTemplate().save(transientInstance);
//log.debug("savesuccessful");
}catch(RuntimeExceptionre)...{
log.error("savefailed",re);
throwre;
}
}
/**//*(non-Javadoc)
*@seeorg.school.dao.hibernate.IBaseDAO#delete(java.lang.Object)
*/
publicvoiddelete(ObjectpersistentInstance)...{
log.debug("deletinginstance");
try...{
getSession().delete(persistentInstance);
log.debug("deletesuccessful");
}catch(RuntimeExceptionre)...{
log.error("deletefailed",re);
throwre;
}
}
}