`
斗子朝上的鱼
  • 浏览: 15143 次
  • 性别: Icon_minigender_1
  • 来自: 广州
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

学习笔记ssh2(struts2+hibernate3.2+spring2.5)整合

阅读更多

SSH2 development

 

1.    项目文件列表

 

 

2.    Bean 依赖关系:

 

 

3.    实现目标

实现对用户的增删查改

 

4.    开发步骤

建立ssh2 项目->增加hibernate capability,选择annotationcore library,不要选择建立session factory,而是让spring来管理->增加spring capability,选择aopcorepresistence core, persistence jdbc librara->web-inf目录下的web.xml中加入filterlistener如下:  

  

<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>

 

 

 

 

 

->src目录下新建struts.xml文件,dtd文件在struts2democopy一个即可

->ok,准备工作已经完成。

->重启服务器,会发现报错,xxx.asm.xxx的错误,这是由于spring中的asm.jar文件与hibernate中的asm.jar版本冲突,删掉asm.2.x.x.jar即可。

 

bean的依赖关系可以看出,action依赖于service的实现,service又依赖于下一

层的userdao

 

5.    建立cn.scau.ssh2.beans.User

包下有User.javauser的属性文件。

还有一个validation.xml待会再说。

6.    建立 cn.scau.ssh2.dao

包下的UserDao.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);

	}

}

 

 

 

8.    建立cn.scau.ssh2.service

包下的UserService.java其实现与UserDao差不多,因为UserService 依赖于UserDao的实现。

这里就不贴代码,具体看project里的就行

9.    建立cn.scau.ssh2.service.impl

包下的UserServiceImpl.java的实现就是调用UserDaoImpl中的方法。

详见project

10.    建立cn.scau.ssh2.action

包下的各个action实现对页面的控制。

Code

 

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;

	}
	
}

  

 

 

11.    其他action类似实现,主要是在execute()中调用UserService对数据库crud的方法。

此处要注意:可以看到多了一个UpdatePUserAction,这是因为update用户时,先要把用户先preview,然后再update,所以多一个UpdatePUserAction,然后再掉转到update.jsp页面输入需要update的数据。

12.    其实不是写完所有action后才写struts.xmlapplicationContext.xml文件,而是每写完一个action,在struts.xmlapplicationContext.xml中对action进行配置。

13.    struts.xml

code:

<?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>

 

 

 

 

 

 

15.    实现对输入信息的校验

action包下可以看到有*Action-validation.xml文件,实现校验。因为我们在action中定义的是对象类型,所以校验时采用的validatorvisitor。使用了visitor则要在相应的bean包中加入user对象的基本属性的校验。

16.    此时完成ssh2整合,可以在此基础上实现对业务逻辑的开发。

END:ssh2 project是参照浪曦风中叶老师的视频画葫芦出来的,可以在vercd中找到相应的链接下载。

 

 

 

 

 

 

10
1
分享到:
评论
6 楼 wb14521 2012-05-14  
[b]
引用
                             
[/b]
5 楼 阳光泛滥的日子 2012-05-05  
说实话 很感激这样的人 看完一遍思路完全打开 对我帮助很大 感谢楼主!
4 楼 zhdjbabygo 2012-04-20  
验证信息是怎么实现的???求教
3 楼 yanzhoupuzhang 2011-11-30  
SSH2好像用不了!
2 楼 诗飘秋舞的活着 2011-09-27  
似乎没有导入struct包。。。
1 楼 ab591462256 2011-08-02  
??????

相关推荐

Global site tag (gtag.js) - Google Analytics