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
)
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 对应的 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 :