Struts Spring Hibernate整合例子

Struts Spring Hibernate

本次配置环境:Myeclipse5.5、MySQL5.0、Struts1.2、Spring2.0、Hibernate3.1

一、建工程

略。。。。。。

二、要使用Struts、Spring、Hibernate必须导入必需的包

1、Struts(和之前没区别)

2、Spring

分别导入Spring 2.0 Core Libraries、Spring 2.0 Web Libraries

选择把*.jar Copy到工程/WebRoot/WEB-INF/lib下; 点击NEXT

选择applicationContext.xml的目录,/WebRoot/WEB-INF;点击finish
(我一般用Myeclipse的 add capability 的功能~相信一般的人也会这么偷懒的吧? :!:
3、Hibernate

在导入Hibernate时,当然先要配置DataSource咯,这里就不再说了

选择导入Hibernate全选上

选上复选框:Hibernate 3.1 Core……、Hibernate 3.1 Advanced……、Spring 2.0 ORM/DAO…….

同样选择把*.jar Copy到工程/WebRoot/WEB-INF/lib下; 点击NEXT

这里我们选择把hibernate交给spring去管理

选中单选按钮 Spring configuration file…… 点击NEXT

选择已存在的applicationContext.xml文件,

填写SessionFactory ID :sessionFactory 点击NEXT

这里我们需要填写Bean Id :dataSource

选择 DB Driver :选择刚才配置的DataSource 点击NEXT

这里不需要创建 SessionFactory Class 点击Finish

注意:查看applicationContext.xml的变化

三、映射VO、数据操作

首先工程的结构建好,比较简单的结构:

org.gstarwd.dao

org.gstarwd.struts

org.gstarwd.struts.action

org.gstarwd.struts.form (我喜欢用动态的表单。。dynaValidateFrom :mrgreen:

org.gstarwd.vo

映射表userinfo创建持久类到org.gstarwd.vo目录

在dao下创建数据库操作类 UserDAO 这里只是对数据库进去插入,代码如下:

private SessionFactory sessionFactory;

public SessionFactory getSessionFactory() …{

return sessionFactory;

}

public void setSessionFactory(SessionFactory sessionFactory) …{

this.sessionFactory = sessionFactory;

}

/**//* 用户注册 */

public boolean regist(Userinfo user) …{

try …{

Session session = sessionFactory.openSession();

Transaction tx = session.beginTransaction();

session.save(user); //记得我有次用的是extends了 Spring 提供的 hibernateDaoSupport, 恩用那个//getHibernateTemplate 事务好像被封装了?恩。。

tx.commit();

session.close();

return true;

} catch (Exception ex) …{

ex.printStackTrace();

return false;

}

}

使用依赖注入,setter设值 sessionFactory

到此数据层已经完成

四、配置struts-config.xml

添加action、form、jsp 略……

首先在struts-config.xml添加一个插件

className="org.springframework.web.struts.ContextLoaderPlugIn">

value="/WEB-INF/applicationContext.xml" />

为什么要添回这个插件呢?

因为在后面会在applicationContext.xml下配置action,让action交给spring

去管理,实现了struts的依赖注入机制

接下来添加cuntroller,这里你可以使用DelegatingActionProxy代理

"org.springframework.web.struts.DelegatingRequestProcessor"/>

Controller取代了struts的RequestProcessor,在定义action里,我们可以省略

type属性。(我个人比较喜欢用这个)下面让我们看配置好的struts-config.xml:

type="org.chenwj.struts.form.UserForm" />

"org.springframework.web.struts.DelegatingRequestProcessor"/>

parameter="org.chenwj.struts.ApplicationResources" />

className="org.springframework.web.struts.ContextLoaderPlugIn">

value="/WEB-INF/applicationContext.xml" />

五、在applicationContext.xml配置action

这里我们先在 action类里添加一些业务逻辑,代码如下:

public class UserAction extends Action …{

private UserDAO userDao;

private Userinfo user;

public ActionForward execute(ActionMapping mapping, ActionForm form,

HttpServletRequest request, HttpServletResponse response) …{

UserForm userForm = (UserForm) form;

//封装数据

user.setName(userForm.getName());

user.setPassword(userForm.getPassword());

if(userDao.regist(user))…{

return mapping.findForward(“success”);

}

return mapping.findForward(“error”);

}

public Userinfo getUser() …{

return user;

}

public void setUser(Userinfo user) …{

this.user = user;

}

public UserDAO getUserDao() …{

return userDao;

}

public void setUserDao(UserDAO userDao) …{

this.userDao = userDao;

}}

这里使用setter实现依赖注入了两个bean,接下来配置applicationContext.xml

class="org.apache.commons.dbcp.BasicDataSource">

value="com.mysql.jdbc.Driver">

value="jdbc:mysql://localhost:3306/demo">

"org.springframework.orm.hibernate3.LocalSessionFactoryBean">

org.hibernate.dialect.MySQLDialect

org/chenwj/vo/Userinfo.hbm.xml

对应的 action path属性值相同,斜线也是必需的,通过这个属性scope=

“prototype” 每次获取bean实例时都会产生新的实例,默认是单例

abstract="false" lazy-init="default" autowire="default"

scope="prototype" dependency-check="default">

lazy-init="default" autowire="default"

dependency-check="default">

到此所有的配置已经完成,测试:

HTTP Status 404 – Servlet action is not available

The requested resource (Servlet action is not available) is not available

这个错误是大部初学者整合 SSH 时都会遇到的问题

首先建议你使用测试类进行测试,这样我们可以很快找到错误所在的地方

public static void main(String[] args) …{

ApplicationContext context = new FileSystemXmlApplicationContext(

“/WebRoot/WEB-INF/applicationContext.xml”);

UserDAO dao = (UserDAO)context.getBean(“userDao”);

Userinfo user = new Userinfo();

user.setName(“aaa”);

user.setPassword(“bbb”);

boolean a = dao.regist(user);

if(a)…{

System.out.println(“OK”);

}

}

如果这里没出错,那么请你好好检查你的配置文件,是否写错或少了些什么东东了

这里出的错误也跟使用的版本有关系,这里报的错一般都是说找不到XX类所报的异常

那么请检查lib下有没commons-pool-1.2.jar包,如没请导入,这个问题也有可能是包

之间的****,删除这个包hibernate-annotations.jar

六、.sql文件、.jsp文件

create table userinfo(

id int(10) not null auto_increment,

name varchar(20),

password varchar(20),

PRIMARY KEY (id))

name :

password :

发布评论

您的电子邮箱不会被公开。 标记为 * 的区域必须填写

*

无觅相关文章插件,快速提升流量