关键字: struts2,spring2,hibernate3,整合
今天在寝室窝了一天,由于前天老师给了个ss2+toplink的项目源码,要我去消化。直接看那三个整合具吃力,于是先从ssh2入手吧!
所使用的工具和环境。 jdk6+myeclipse6.5+tomcat6+mysql5+spring2.0+hibernate3+struts2 好了,开始我们的第一个ssh2之旅吧。 首先先分析一下我们的第一个ssh2项目的需求,简单的说就是有一张表单,让你填写用户名和密码,提交后存入数据库。就这么简单,呵呵。 第一步:。我们首先新建一张mysql数据表 sql如下 CREATE TABLE mytest.users ( id INT NOT NULL, username VARCHAR(50), password VARCHAR(50), PRIMARY KEY (id) 数据表创建好后结构如下: ![]() 当然我已经有几天数据添加进去了 ![]() 第二步 打开myeclipse,新建一个web项目,命名为ssh2-2, java ee规范我们选择5,如图 ![]() 第三步 务必小心的一步 导入ssh2的各个jar,步骤如下: 选中当前的项目后,点击菜单烂的myeclipse---project capablities----add hibernate项,跳出如图 ![]() 务必按照图示选择,尤其是copy checkde……一项,然后点击next,默认next,去掉specify database……复选框,next,去掉create session……复选框,finish。 再次选中选中当前的项目后,点击菜单烂的myeclipse---project capablities----add spring项,跳出如图 ![]() 依然务必按照如是选择,jar文件选择如下5个: ![]() ![]() 点击next, 之后按下选择,务必, ![]() next后finsh即可。 然后导入struts2的jar 如下5个放到lib下 ![]() 然后放入我们的数据库驱动jar mysql-connector-java-5.0.8-bin.jar 没得话附件中有 至此,包都导入完毕 第四步 配置web.xml 代码如下 注意注释:
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java./xml/ns/javaee" xmlns:xsi="http://www./2001/XMLSchema-instance" xsi:schemaLocation="http://java./xml/ns/javaee http://java./xml/ns/javaee/web-app_2_5.xsd"> <!-- struts2的常规配置 --> <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> <!-- 在web应用启动是自动形成一个spring容器 --> <listener> <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class> </listener> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app> 第五步: 从视图层入手;在webroot目录下新建一个save.jsp文件 如下代码;
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <%@ taglib prefix="s" uri="/struts-tags" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>My JSP 'save.jsp' starting page</title> </head> <body> <s:form action='saveUser'> <s:textfield name="user.username" label="用名"></s:textfield> <s:textfield name="user.password" label="密码"></s:textfield> <s:submit></s:submit> </s:form> </body> </html> 接下去顺水推舟,自然开发action,及控制层 新建包com.test.action.user 新建一个SaveUserAction.java 代码初步如下:
package com.test.action.user; import com.opensymphony.xwork2.ActionSupport; import com.test.bean.User; public class SaveUserAction extends ActionSupport { private User user; public User getUser() { return user; } public void setUser(User user) { this.user = user; } @Override public String execute() throws Exception { return SUCCESS; } } 于是,自然我们要新建一个bean 新建包com.test.bean 新建User.java
package com.test.bean; public class User { private Integer id; private String username; private String password; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } } 好了,现在我们先把控制层的action放在这里,开发业务层和持久层(DAO) 新建包com.test.dao 建类UserDAO.java 代码如下:
package com.test.dao; import java.util.List; import com.test.bean.User; public interface UserDAO { public void saveUser(User user); public void removeUser(User user); public User findUserById(Integer id); public List<User> findAllUsers(); public void updateUser(User user); }这是一个接口 在开发dao的实现类 新建包com.test.dao.impl 建类UserDAOImpl.java 代码:
package com.test.dao.impl; import java.util.List; import org.springframework.orm.hibernate3.support.HibernateDaoSupport; import com.test.bean.User; import com.test.dao.UserDAO; /** * * @author Administrator * 这个dao试用了hibernate的数据库操作语句 */ public class UserDAOImpl extends HibernateDaoSupport implements UserDAO { /* * 获取所有数据 */ public List<User> findAllUsers() { String hql = "from User user order by user.id desc"; return (List<User>) this.getHibernateTemplate().find(hql); } /* * 获取指定的数据 */ public User findUserById(Integer 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); } } 好了,数据持久层(dao)开发好了,按顺序,现在应该开发业务层了, 新建包com.test.service 建类UserService.java 代码:
package com.test.service; import java.util.List; import com.test.bean.User; public interface UserService { public List<User> findAll(); public void save(User user); public void delete(User user); public User findById(Integer id); public void update(User user); }这是一个接口类 然后写实现类 新建包 com.test.service.impl 建类 UserServiceImpl.java
package com.test.service.impl; import java.util.List; import com.test.bean.User; import com.test.dao.UserDAO; import com.test.service.UserService; public class UserServiceImpl implements UserService { private UserDAO userDao; public UserDAO getUserDao() { return userDao; } public void setUserDao(UserDAO userDao) { this.userDao = userDao; } //服务层的方法 public void delete(User user) { this.userDao.removeUser(user); } public List<User> findAll() { return this.userDao.findAllUsers(); } public User findById(Integer id) { return this.userDao.findUserById(id); } public void save(User user) { this.userDao.saveUser(user); } public void update(User user) { this.userDao.updateUser(user); } } 业务和持久层都开发好了,现在我们回到控制层action 修改action的代码如下:
package com.test.action.user; import com.opensymphony.xwork2.ActionSupport; import com.test.bean.User; import com.test.service.*; public class SaveUserAction extends ActionSupport { private User user; private UserService service; public UserService getService() { return service; } public void setService(UserService service) { this.service = service; } public User getUser() { return user; } public void setUser(User user) { this.user = user; } @Override public String execute() throws Exception { this.service.save(this.user); return SUCCESS; } } 修改struts.xml 如下
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts./dtds/struts-2.0.dtd"> <struts> <package name="user" extends="struts-default"> <action name="saveUser" class="saveUserAction"> <result name="success" type="redirect">listUser.action</result> <result name="input">/saveUser.jsp</result> </action> </package> </struts> 至此,我们已经开发好了一个典型的mvc项目,现在的任务是将strust2和hibernate都放入spring容器管理, 现在我们的项目结构如下: ![]() 然后修改 applicationContext.xml 代码如下 注意注释
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www./schema/beans" xmlns:xsi="http://www./2001/XMLSchema-instance" xsi:schemaLocation="http://www./schema/beans http://www./schema/beans/spring-beans-2.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/mytest"></property> <property name="username" value="root"></property> <property name="password" value="123456"></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> <!-- 一下配置sessionFactory 这个东西曾经是在hibernate中定义的 如今交给了spring管理 --> <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="hibernate.show_sql">true</prop> </props> </property> <property name="mappingResources"> <list> <value>com/test/bean/User.hbm.xml</value> </list> </property> </bean> <!-- 以下使一些用到的类 在使用类中均没有实例化这个类,都交给了spring管理 --> <!-- DAObean --> <bean id="userDao" class="com.test.dao.impl.UserDAOImpl" scope="singleton"> <property name="sessionFactory" ref="sessionFactory"></property> </bean> <!-- DAObean --> <bean id="userService" class="com.test.service.impl.UserServiceImpl"> <property name="userDao" ref="userDao"></property> </bean> <bean id="saveUserAction" class="com.test.action.user.SaveUserAction"> <property name="service" ref="userService"></property> </bean> </beans> 好了 到此为止,ssh2的整合已经完成了,发布后开启服务器吧, 不对,服务器开启后有异常 ![]() 这里是包冲突问题 到项目的lib目录下, ![]() 删除选中的jar即可 ok了 可以测试了 http://localhost:8080/ssh2-2/save.jsp |
|