在myeclipse 8.6 环境下搭建一个S2SH的环境,通过一个简单的用户信息输入存储整理一下。对于S2SH环境的搭建可以认为是以spring为中心,将struts2和hiberbate整合进来。因此本文分两部分来整理:
一.对struts 2的整合:
核心就是将原本由struts框架创建的action托管给spring构造bean。
1.在web.xml中添加spring的监听器,spring框架会根据参数中给出的xml文件构造bean,如下:
<context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/classes/inputhandler.xml,/WEB-INF/classes/application*.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener>
2.修改strut.xml文件,将action的创建托管给spring,如下:
<constant name="struts.objectFactory" value="spring"></constant> //注意在myeclipse环境下要添加spring.jar和struts-spring-plugin-XX.jar <package name = "struts" namespace="" extends="struts-default"> <action name = "login" class="LogAction"> //此时的class里不再是具体的类,而是spring创建的bean id <result name = "LOG">/index.jsp</result> </action> </package> </struts>
3.在spring的xml中创建bean,为了清晰起见,在applicationContext.xml增加import resource,新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" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd"> <bean id="des" class="com.DesInputHandler" /> <bean id="LogAction" class="com.LogAction"> <property name="handler"> <ref bean="des"/> </property> <property name="usrdao"> <ref bean="usrdao"/> </property> <property name = "preName"> <value>Hello</value> </property> </bean> </beans>
4.对应测试用的action类如下:
public class LogAction extends ActionSupport { private String password; private String name; private String email;
//下面这些属性作为bean的property在构造时被赋值 private InputHandler handler; private String preName; private UsrDao usrdao;
二.hibernate整合
hibernate的整合相对简单,在myeclipse下创建时自动将sessionFactory构造成spring bean,见applicationContext中的定义:
<?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" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver"> </property> <property name="url" value="jdbc:mysql://localhost:3306/test"></property> <property name="username" value="root"></property> <property name="password" value="root"></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> </props> </property> <property name="mappingResources"> <list> <value>./USER.hbm.xml</value></list> </property></bean> <bean id ="hibernateTemplate" class = "org.springframework.orm.hibernate3.HibernateTemplate"> <property name = "sessionFactory" ref = "sessionFactory"></property> </bean> <bean id = "usrdao" class = "com.UsrDapImpl"> <property name = "hibernateTemplate"> <ref bean = "hibernateTemplate"></ref> </property> <property name = "sessionFactory"> <ref bean = "sessionFactory"></ref> </property> </bean> <import resource="inputhandler.xml"/> </beans>
spring提供了hibernateTemplate实现CRUD操作,见UsrDaoImpl实现:
public class UsrDaoImpl implements UsrDao { private SessionFactory sessionFactory; private HibernateTemplate hibernateTemplate; public void save(USER usr) { // TODO Auto-generated method stub System.out.println(usr.getEmail() + "saved"); getHibernateTemplate().save(usr); } public HibernateTemplate getHibernateTemplate() { if(hibernateTemplate == null){ HibernateTemplate hibernateTemplate = new HibernateTemplate(sessionFactory); } return hibernateTemplate; }
备注:
出现异常问题org.apache.commons.dbcp.BasicDataSource 和org.springframework.orm.hibernate3.LocalSessionFactoryBean 没有找到的错误。在myeclipse 8.6环境下采用其插件构建S2SH环境主要原因是在spring框架倒入时加入的包不够。应导入包括:spring 3.0 persistence core libirary 和spring 3.0 persistence jdbc libirary