学习笔记ssh2(struts2+hibernate3.2+spring2.5)整合
2010-06-26 03:28
531 查看
学习笔记ssh2(struts2+hibernate3.2+spring2.5)整合
文章分类:Java编程[align=center]SSH2 development[/align]
[align=left]1. 项目文件列表[/align]
[align=center] [/align]
[align=left]2. Bean 依赖关系:[/align]
[align=left]3. 实现目标[/align]
[align=left]实现对用户的增删查改[/align]
[align=left] [/align]
[align=left]4. 开发步骤[/align]
[align=left]建立ssh2 项目->增加hibernate capability,选择annotation和core library,不要选择建立session factory,而是让spring来管理->增加spring capability,选择aop,core,presistence core, persistence jdbc librara->在web-inf目录下的web.xml中加入filter和listener如下: [/align]
[align=left] [/align]
Xml代码
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.FilterDispatcher
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<filter> <filter-name>struts2</filter-name> <filter-class> org.apache.struts2.dispatcher.FilterDispatcher </filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <listener> <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class> </listener>
[align=left] [/align]
[align=left] [/align]
[align=left] [/align]
[align=left] [/align]
[align=left] [/align]
[align=left]->在src目录下新建struts.xml文件,dtd文件在struts2的demo中copy一个即可[/align]
[align=left]->ok,准备工作已经完成。[/align]
[align=left]->重启服务器,会发现报错,xxx.asm.xxx的错误,这是由于spring中的asm.jar文件与hibernate中的asm.jar版本冲突,删掉asm.2.x.x.jar即可。[/align]
[align=left] [/align]
[align=left]从bean的依赖关系可以看出,action依赖于service的实现,service又依赖于下一[/align]
[align=left]层的userdao。[/align]
[align=left] [/align]
[align=left]5. 建立cn.scau.ssh2.beans.User包[/align]
[align=left]包下有User.java是user的属性文件。[/align]
[align=left]还有一个validation.xml待会再说。[/align]
[align=left]6. 建立 cn.scau.ssh2.dao包[/align]
[align=left]包下的UserDao.java是一个接口,规定了增删查改的方法[/align]
[align=left] [/align]
Java代码
package cn.scau.ssh2.dao;
import java.util.List;
import cn.scau.ssh2.beans.User;
public interface UserDao {
public void saveUser(User user);
public void removeUser(User user);
public User findUserById(int id);
public List<User> findAllUserser();
public void updateUser(User user);
}
7. 建立cn.scau.ssh2.dao.impl包
包下有UserDaoImpl.java为具体的实现:
package cn.scau.ssh2.dao.impl;
import java.util.List;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import cn.scau.ssh2.beans.User;
import cn.scau.ssh2.dao.UserDao;
//继承HibernateDaoSupport,用到了getHibernateTemplate这个方法。
public class UserDaoImpl extends HibernateDaoSupport implements UserDao {
@SuppressWarnings("unchecked")
public List<User> findAllUserser() {
String hql = "from User user order by user.id desc";
List<User> list = this.getHibernateTemplate().find(hql);
return list;
}
public User findUserById(int id) {
User user = (User) this.getHibernateTemplate().get(User.class, id);
return user;
}
public void removeUser(User user) {
this.getHibernateTemplate().delete(user);
}
public void saveUser(User user) {
this.getHibernateTemplate().save(user);
}
public void updateUser(User user) {
this.getHibernateTemplate().update(user);
}
}
package cn.scau.ssh2.dao; import java.util.List; import cn.scau.ssh2.beans.User; public interface UserDao { public void saveUser(User user); public void removeUser(User user); public User findUserById(int id); public List<User> findAllUserser(); public void updateUser(User user); } 7. 建立cn.scau.ssh2.dao.impl包 包下有UserDaoImpl.java为具体的实现: package cn.scau.ssh2.dao.impl; import java.util.List; import org.springframework.orm.hibernate3.support.HibernateDaoSupport; import cn.scau.ssh2.beans.User; import cn.scau.ssh2.dao.UserDao; //继承HibernateDaoSupport,用到了getHibernateTemplate这个方法。 public class UserDaoImpl extends HibernateDaoSupport implements UserDao { @SuppressWarnings("unchecked") public List<User> findAllUserser() { String hql = "from User user order by user.id desc"; List<User> list = this.getHibernateTemplate().find(hql); return list; } public User findUserById(int id) { User user = (User) this.getHibernateTemplate().get(User.class, id); return user; } public void removeUser(User user) { this.getHibernateTemplate().delete(user); } public void saveUser(User user) { this.getHibernateTemplate().save(user); } public void updateUser(User user) { this.getHibernateTemplate().update(user); } }
8. 建立cn.scau.ssh2.service包
[align=left]包下的UserService.java其实现与UserDao差不多,因为UserService 依赖于UserDao的实现。[/align]
[align=left]这里就不贴代码,具体看project里的就行[/align]
[align=left]9. 建立cn.scau.ssh2.service.impl包[/align]
[align=left]包下的UserServiceImpl.java的实现就是调用UserDaoImpl中的方法。[/align]
[align=left]详见project。[/align]
[align=left]10. 建立cn.scau.ssh2.action包[/align]
[align=left]包下的各个action实现对页面的控制。[/align]
[align=left]Code:[/align]
[align=left] [/align]
Java代码
package cn.scau.ssh2.action;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import cn.scau.ssh2.beans.User;
import cn.scau.ssh2.service.UserService;
import com.opensymphony.xwork2.ActionSupport;
public class SaveUserAction extends ActionSupport {
private static final long serialVersionUID = -4055521880257114396L;
private User user;
private UserService userService;
// get方法可以不用写,因为要用到的只是set方法
public UserService getUserService() {
return userService;
}
public void setUserService(UserService userService) {
this.userService = userService;
}
public void setUser(User user) {
this.user = user;
}
public User getUser() {
return user;
}
@Override
public String execute() throws Exception {
this.userService.save(user);
return SUCCESS;
}
}
package cn.scau.ssh2.action; import java.util.Iterator; import java.util.Map; import java.util.Set; import cn.scau.ssh2.beans.User; import cn.scau.ssh2.service.UserService; import com.opensymphony.xwork2.ActionSupport; public class SaveUserAction extends ActionSupport { private static final long serialVersionUID = -4055521880257114396L; private User user; private UserService userService; // get方法可以不用写,因为要用到的只是set方法 public UserService getUserService() { return userService; } public void setUserService(UserService userService) { this.userService = userService; } public void setUser(User user) { this.user = user; } public User getUser() { return user; } @Override public String execute() throws Exception { this.userService.save(user); return SUCCESS; } }
[align=left]11. 其他action类似实现,主要是在execute()中调用UserService对数据库crud的方法。[/align]
[align=left]此处要注意:可以看到多了一个UpdatePUserAction,这是因为update用户时,先要把用户先preview,然后再update,所以多一个UpdatePUserAction,然后再掉转到update.jsp页面输入需要update的数据。[/align]
[align=left]12. 其实不是写完所有action后才写struts.xml和applicationContext.xml文件,而是每写完一个action,在struts.xml和applicationContext.xml中对action进行配置。[/align]
[align=left]13. struts.xml[/align]
[align=left]code:[/align]
Java代码
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.custom.i18n.resources"
value="globalMessages">
</constant>
<constant name="struts.i18n.encoding" value="utf-8"></constant>
<package name="cn.scau.ssh2.action" extends="struts-default">
<action name="saveUser" class="saveUserAction">
<result name="success" type="redirect">
listUser.action
</result>
<result name="input">/save.jsp</result>
</action>
<action name="listUser" class="listUserAction">
<result name="success">/list.jsp</result>
<result name="input">/index.jsp</result>
</action>
<action name="deleteUser" class="removeUserAction">
<result name="success" type="redirect">
listUser.action
</result>
</action>
<action name="updatePUser" class="updatePUserAction">
<result name="success">/update.jsp</result>
</action>
<action name="updateUser" class="updateUserAction">
<result name="success" type="redirect">listUser.action</result>
<result name="input">/update.jsp</result>
</action>
</package>
</struts>
14. 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"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
<!-- destroy-method="close"将连接放回连接池-->
<bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName"
value="com.mysql.jdbc.Driver">
</property>
<property name="url" value="jdbc:mysql://localhost:3306/ssh2"></property>
<property name="username" value="root"></property>
<property name="password" value="rick"></property>
<property name="maxActive" value="100"></property>
<property name="maxIdle" value="30"></property>
<property name="maxWait" value="500"></property>
<property name="defaultAutoCommit" value="true"></property>
</bean>
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
org.hibernate.dialect.MySQLDialect
</prop>
<prop key="show_sql">true</prop>
<!-- <prop key="hbm2ddl.auto">update</prop> -->
</props>
</property>
<property name="mappingResources">
<list>
<value>cn/scau/ssh2/beans/User.hbm.xml</value>
</list>
</property>
</bean>
<bean id="userDao" class="cn.scau.ssh2.dao.impl.UserDaoImpl"
scope="singleton">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
<bean id="userService"
class="cn.scau.ssh2.service.impl.UserServiceImpl">
<property name="userDao" ref="userDao"></property>
</bean>
<!-- scope="prototype"因为struts2中action是有状态的,所以要将scope设为"prototype",如果不设,可以试一下效果,当输入有误信息时会出现错误提示重复输出的情况-->
<bean id="saveUserAction" class="cn.scau.ssh2.action.SaveUserAction"
scope="prototype">
<property name="userService" ref="userService"></property>
</bean>
<bean id="listUserAction" class="cn.scau.ssh2.action.ListUserAction"
scope="prototype">
<property name="userService" ref="userService"></property>
</bean>
<bean id="removeUserAction"
class="cn.scau.ssh2.action.RemoveUserAction" scope="prototype">
<property name="userService" ref="userService"></property>
</bean>
<bean id="updatePUserAction"
class="cn.scau.ssh2.action.UpdatePUserAction" scope="prototype">
<property name="userService" ref="userService"></property>
</bean>
<bean id="updateUserAction"
class="cn.scau.ssh2.action.UpdateUserAction" scope="prototype">
<property name="userService" ref="userService"></property>
</bean>
</beans>
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <constant name="struts.custom.i18n.resources" value="globalMessages"> </constant> <constant name="struts.i18n.encoding" value="utf-8"></constant> <package name="cn.scau.ssh2.action" extends="struts-default"> <action name="saveUser" class="saveUserAction"> <result name="success" type="redirect"> listUser.action </result> <result name="input">/save.jsp</result> </action> <action name="listUser" class="listUserAction"> <result name="success">/list.jsp</result> <result name="input">/index.jsp</result> </action> <action name="deleteUser" class="removeUserAction"> <result name="success" type="redirect"> listUser.action </result> </action> <action name="updatePUser" class="updatePUserAction"> <result name="success">/update.jsp</result> </action> <action name="updateUser" class="updateUserAction"> <result name="success" type="redirect">listUser.action</result> <result name="input">/update.jsp</result> </action> </package> </struts> 14. 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" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"> <!-- destroy-method="close"将连接放回连接池--> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="com.mysql.jdbc.Driver"> </property> <property name="url" value="jdbc:mysql://localhost:3306/ssh2"></property> <property name="username" value="root"></property> <property name="password" value="rick"></property> <property name="maxActive" value="100"></property> <property name="maxIdle" value="30"></property> <property name="maxWait" value="500"></property> <property name="defaultAutoCommit" value="true"></property> </bean> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="dataSource" ref="dataSource"></property> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect"> org.hibernate.dialect.MySQLDialect </prop> <prop key="show_sql">true</prop> <!-- <prop key="hbm2ddl.auto">update</prop> --> </props> </property> <property name="mappingResources"> <list> <value>cn/scau/ssh2/beans/User.hbm.xml</value> </list> </property> </bean> <bean id="userDao" class="cn.scau.ssh2.dao.impl.UserDaoImpl" scope="singleton"> <property name="sessionFactory"> <ref bean="sessionFactory" /> </property> </bean> <bean id="userService" class="cn.scau.ssh2.service.impl.UserServiceImpl"> <property name="userDao" ref="userDao"></property> </bean> <!-- scope="prototype"因为struts2中action是有状态的,所以要将scope设为"prototype",如果不设,可以试一下效果,当输入有误信息时会出现错误提示重复输出的情况--> <bean id="saveUserAction" class="cn.scau.ssh2.action.SaveUserAction" scope="prototype"> <property name="userService" ref="userService"></property> </bean> <bean id="listUserAction" class="cn.scau.ssh2.action.ListUserAction" scope="prototype"> <property name="userService" ref="userService"></property> </bean> <bean id="removeUserAction" class="cn.scau.ssh2.action.RemoveUserAction" scope="prototype"> <property name="userService" ref="userService"></property> </bean> <bean id="updatePUserAction" class="cn.scau.ssh2.action.UpdatePUserAction" scope="prototype"> <property name="userService" ref="userService"></property> </bean> <bean id="updateUserAction" class="cn.scau.ssh2.action.UpdateUserAction" scope="prototype"> <property name="userService" ref="userService"></property> </bean> </beans>
[align=left] [/align]
[align=left] [/align]
[align=left] [/align]
[align=left] [/align]
15. 实现对输入信息的校验
[align=left]在action包下可以看到有*Action-validation.xml文件,实现校验。因为我们在action中定义的是对象类型,所以校验时采用的validator为visitor。使用了visitor则要在相应的bean包中加入user对象的基本属性的校验。[/align]
[align=left]16. 此时完成ssh2整合,可以在此基础上实现对业务逻辑的开发。[/align]
[align=left]END:ssh2 project是参照浪曦风中叶老师的视频画葫芦出来的,可以在vercd中找到相应的链接下载。[/align]
[align=left] [/align]
[align=left] [/align]
[align=left]http://bellyupfish-sina-com.javaeye.com/blog/363467[/align]
ssh2_2.rar (146.4 KB)
下载次数: 536
相关文章推荐
- struts2.1.8+spring2.5+hibernate3.2+ext3.0框架整合笔记
- ssh框架搭建Struts2.06+spring2.5+hibernate3.2整合实例代码教程步骤
- myeclipse整合Struts1.2+Hibernate3.2+Spring2.5
- 在Myeclipse7中整合struts2+spring2.5+hibernate3.2
- struts2.2+hibernate3.2+spring2.5整合所需要的包
- 整合Spring2.5+Struts2.1+Hibernate3.2
- ssh框架搭建Struts2.06+spring2.5+hibernate3.2整合实例代码教程步骤
- SSH框架搭建Struts2.06+spring2.5+hibernate3.2整合实例代码教程步骤
- Struts2.1.6 + Spring2.5+Hibernate3.2整合
- struts2.1.8+spring2.5+hibernate3.2+ext3.0框架整合笔记
- 整合struts1.2+spring2.5+hibernate3.2实现简单登录
- Struts2.1.6 + Spring2.5+Hibernate3.2整合
- struts2+hibernate3+spring2.5整合配置
- MyEclipse 7.0M1 SSH 整合开发问题解决:Spring2.5+hibernate3.1+Struts1.3 +Tomcat6.0
- dwr2.0+spring2.5+hibernate3.2整合
- MyEclipse6.5.0构建S2SH(struts2.2+spring2.5+hibernate3.2)项目
- Struts2+Hibernate3.2+Spring 2.0整合应用配置
- Struts2+Spring2.5+Hibernate3.5的整合开发
- Struts2+Spring2.5+Hibernate3.3 整合总结
- 整合Struts2+Spring2.5+Hibernate3.5