SSH框架整合
struts 控制用的
hibernate 操作数据库的
spring 用解耦的
Struts 、 spring 、 Hibernate 在各层的作用
1 ) struts 负责 web 层 .
ActionFormBean 接收网页中表单提交的数据,然后通过 Action 进行处理,再 Forward 到对应的网页。
在 struts-config.xml 中定义 <action-mapping>, ActionServlet 会加载。
2 ) spring 负责业务层管理,即 Service (或 Manager).
1 . service 为 action 提供统计的调用接口,封装持久层的 DAO.
2 .可以写一些自己的业务方法。
3 .统一的 javabean 管理方法
4 .声明式事务管理
5. 集成 Hiberante
3 ) Hiberante ,负责持久化层,完成数据库的 crud 操作
hibernate 为持久层,提供 OR/Mapping 。
它有一组 .hbm.xml 文件和 POJO, 是跟数据库中的表相对应的。然后定义 DAO ,这些是跟数据库打交道的类,它们会使用 PO 。
在 struts+spring+hibernate 的系统中,
对象的调用流程是: jsp-> Action - > Service ->DAO ->Hibernate 。
数据的流向是 ActionFormBean 接受用户的数据, Action 将数据从 ActionFromBean 中取出,封装成 VO 或 PO,
再调用业务层的 Bean 类,完成各种业务处理后再 forward 。而业务层 Bean 收到这个 PO 对象之后,会调用 DAO 接口方法,进行持久化操作。
spring:Aop管理事务控制,IoC管理各个组件的耦合,DaoTemplate作为常规持久层的快速开发模板!
struts:控制层Action,页面标签和Model数据,调用业务层
Hibernate:负责数据库和对象的映射,负责DAO层(Data Access Object:数据访问)
spring整合hibernate和struts,只要在配好了applicationContext.xml,在struts的action中直接调用就可以了。hibernate访问数据库的操作都在spring中实现了,spring的调用又在stuts的action中实现了。这个ssh框架就连到了一起……
一个简单的SSH例子
配置文件
/SSHLoginDemo/WebRoot/WEB-INF/struts-config.xml
![](https://i-blog.csdnimg.cn/blog_migrate/81178cc93a2a3bb5048d90d76e7ec935.gif)
<? xml version="1.0" encoding="UTF-8" ?> <! DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd" > < struts-config > < data-sources /> < form-beans > < form-bean name ="loginForm" type ="com.qdu.sun.struts.form.LoginForm" /> </ form-beans > < global-exceptions /> < global-forwards /> < action-mappings > < action attribute ="loginForm" input ="/login.jsp" name ="loginForm" path ="/login" scope ="request" type ="org.springframework.web.struts.DelegatingActionProxy" > < forward name ="success" path ="/success.jsp" /> < forward name ="fail" path ="/fail.jsp" /> </ action > </ action-mappings > < message-resources parameter ="com.qdu.sun.struts.ApplicationResources" /> < plug-in className ="org.springframework.web.struts.ContextLoaderPlugIn" > < set-property property ="contextConfigLocation" value ="/WEB-INF/classes/applicationContext.xml" /> </ plug-in > </ struts-config >
/SSHLoginDemo/src/applicationContext.xml
![](https://i-blog.csdnimg.cn/blog_migrate/81178cc93a2a3bb5048d90d76e7ec935.gif)
<? 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.0.xsd" > < bean id ="login" class ="com.qdu.sun.BO.LoginBO" /> < bean name ="/login" class ="com.qdu.sun.struts.action.LoginAction" > < property name ="loginBean" > < ref bean ="login" /> </ property > </ bean > < bean id ="sessionFactory" class ="org.springframework.orm.hibernate3.LocalSessionFactoryBean" > < property name ="configLocation" value ="classpath:hibernate.cfg.xml" > </ property > </ bean > < bean id ="UserDAO" class ="com.qdu.sun.hibernate.UserDAO" > < property name ="sessionFactory" > < ref bean ="sessionFactory" /> </ property > </ bean > </ beans >
前端页面
/SSHLoginDemo/WebRoot/login.jsp
![](https://i-blog.csdnimg.cn/blog_migrate/81178cc93a2a3bb5048d90d76e7ec935.gif)
<% @ page language = " java " pageEncoding = " ISO-8859-1 " %> <% @ taglib uri = " http://struts.apache.org/tags-bean " prefix = " bean " %> <% @ taglib uri = " http://struts.apache.org/tags-html " prefix = " html " %> < html > < head > < title > JSP for LoginForm form </ title > </ head > < body > < html:form action ="/login" > password : < html:password property ="password" />< html:errors property ="password" />< br /> username : < html:text property ="username" />< html:errors property ="username" />< br /> < html:submit />< html:cancel /> </ html:form > </ body > </ html >
struts
/SSHLoginDemo/src/com/qdu/sun/struts/action/LoginAction.java
![](https://i-blog.csdnimg.cn/blog_migrate/81178cc93a2a3bb5048d90d76e7ec935.gif)
/* * Generated by MyEclipse Struts * Template path: templates/java/JavaClass.vtl */ package com.qdu.sun.struts.action; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import com.qdu.sun.BO.LoginBO; import com.qdu.sun.struts.form.LoginForm; /** * MyEclipse Struts * Creation date: 08-26-2008 * * XDoclet definition: * @struts.action path="/login" name="loginForm" input="/login.jsp" scope="request" validate="true" * @struts.action-forward name="success" path="welcome.jsp" * @struts.action-forward name="fail" path="fail.jsp" */ public class LoginAction extends Action { /* * Generated Methods */ /** * Method execute * @param mapping * @param form * @param request * @param response * @return ActionForward */ private LoginBO loginBean; public LoginBO getLoginBean() { return loginBean; } public void setLoginBean(LoginBO loginBean) { this .loginBean = loginBean; } public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { LoginForm loginForm = (LoginForm) form; // TODO Auto-generated method stub LoginBO login = getLoginBean(); if (login.validate(loginForm.getUsername(), loginForm.getPassword())) { request.setAttribute( " username " , loginForm.getUsername()); return mapping.findForward( " success " ); } else return mapping.findForward( " fail " ); } }
/SSHLoginDemo/src/com/qdu/sun/struts/form/LoginForm.java
![](https://i-blog.csdnimg.cn/blog_migrate/81178cc93a2a3bb5048d90d76e7ec935.gif)
/* * Generated by MyEclipse Struts * Template path: templates/java/JavaClass.vtl */ package com.qdu.sun.struts.form; import javax.servlet.http.HttpServletRequest; import org.apache.struts.action.ActionErrors; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionMapping; import org.apache.struts.action.ActionMessage; /** * MyEclipse Struts * Creation date: 08-26-2008 * * XDoclet definition: * @struts.form name="loginForm" */ public class LoginForm extends ActionForm { /* * Generated fields */ /** password property */ private String password; /** username property */ private String username; /* * Generated Methods */ /** * Method validate * @param mapping * @param request * @return ActionErrors */ public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { // TODO Auto-generated method stub ActionErrors errors = new ActionErrors(); if ( this .username == null || this .username.length() < 1 ) errors.add( " username " , new ActionMessage( " login.username " )); if ( this .password == null || this .password.length() < 1 ) errors.add( " password " , new ActionMessage( " login.password " )); return errors; } /** * Method reset * @param mapping * @param request */ public void reset(ActionMapping mapping, HttpServletRequest request) { // TODO Auto-generated method stub this .username = null ; this .password = null ; } /** * Returns the password. * @return String */ public String getPassword() { return password; } /** * Set the password. * @param password The password to set */ public void setPassword(String password) { this .password = password; } /** * Returns the username. * @return String */ public String getUsername() { return username; } /** * Set the username. * @param username The username to set */ public void setUsername(String username) { this .username = username; } }
spring
/SSHLoginDemo/src/com/qdu/sun/BO/LoginBO.java
![](https://i-blog.csdnimg.cn/blog_migrate/cdec0645add3fc3c328197dda5c76203.gif)
hibernate
/SSHLoginDemo/src/com/qdu/sun/hibernate/UserDAO.java
![](https://i-blog.csdnimg.cn/blog_migrate/81178cc93a2a3bb5048d90d76e7ec935.gif)
package com.qdu.sun.hibernate; import java.util.List; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.hibernate.LockMode; import org.springframework.context.ApplicationContext; import org.springframework.orm.hibernate3.support.HibernateDaoSupport; /** * A data access object (DAO) providing persistence and search support for User * entities. Transaction control of the save(), update() and delete() operations * can directly support Spring container-managed transactions or they can be * augmented to handle user-managed Spring transactions. Each of these methods * provides additional information for how to configure it for the desired type * of transaction control. * * @see com.qdu.sun.hibernate.User * @author MyEclipse Persistence Tools */ public class UserDAO extends HibernateDaoSupport { private static final Log log = LogFactory.getLog(UserDAO. class ); // property constants public static final String USERNAME = " username " ; public static final String PASSWORD = " password " ; protected void initDao() { // do nothing } public void save(User transientInstance) { log.debug( " saving User instance " ); try { getHibernateTemplate().save(transientInstance); log.debug( " save successful " ); } catch (RuntimeException re) { log.error( " save failed " , re); throw re; } } public void delete(User persistentInstance) { log.debug( " deleting User instance " ); try { getHibernateTemplate().delete(persistentInstance); log.debug( " delete successful " ); } catch (RuntimeException re) { log.error( " delete failed " , re); throw re; } } public User findById(java.lang.Integer id) { log.debug( " getting User instance with id: " + id); try { User instance = (User) getHibernateTemplate().get( " com.qdu.sun.hibernate.User " , id); return instance; } catch (RuntimeException re) { log.error( " get failed " , re); throw re; } } public List findByExample(User instance) { log.debug( " finding User instance by example " ); try { List results = getHibernateTemplate().findByExample(instance); log.debug( " find by example successful, result size: " + results.size()); return results; } catch (RuntimeException re) { log.error( " find by example failed " , re); throw re; } } public List findByProperty(String propertyName, Object value) { log.debug( " finding User instance with property: " + propertyName + " , value: " + value); try { String queryString = " from User as model where model. " + propertyName + " = ? " ; return getHibernateTemplate().find(queryString, value); } catch (RuntimeException re) { log.error( " find by property name failed " , re); throw re; } } public List findByUsername(Object username) { return findByProperty(USERNAME, username); } public List findByPassword(Object password) { return findByProperty(PASSWORD, password); } public List findAll() { log.debug( " finding all User instances " ); try { String queryString = " from User " ; return getHibernateTemplate().find(queryString); } catch (RuntimeException re) { log.error( " find all failed " , re); throw re; } } public User merge(User detachedInstance) { log.debug( " merging User instance " ); try { User result = (User) getHibernateTemplate().merge(detachedInstance); log.debug( " merge successful " ); return result; } catch (RuntimeException re) { log.error( " merge failed " , re); throw re; } } public void attachDirty(User instance) { log.debug( " attaching dirty User instance " ); try { getHibernateTemplate().saveOrUpdate(instance); log.debug( " attach successful " ); } catch (RuntimeException re) { log.error( " attach failed " , re); throw re; } } public void attachClean(User instance) { log.debug( " attaching clean User instance " ); try { getHibernateTemplate().lock(instance, LockMode.NONE); log.debug( " attach successful " ); } catch (RuntimeException re) { log.error( " attach failed " , re); throw re; } } public static UserDAO getFromApplicationContext(ApplicationContext ctx) { return (UserDAO) ctx.getBean( " UserDAO " ); } }