且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

SSH框架整合

更新时间:2022-10-02 23:01:26

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

 


  1. 代码  
  2.  
  3. <?xml version="1.0" encoding="UTF-8"?>  
  4. <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd">  
  5.  
  6. <struts-config>  
  7.     <data-sources />  
  8.     <form-beans>  
  9.         <form-bean name="loginForm" 
  10.             type="com.qdu.sun.struts.form.LoginForm" />  
  11.  
  12.     </form-beans>  
  13.  
  14.     <global-exceptions />  
  15.     <global-forwards />  
  16.     <action-mappings>  
  17.         <action attribute="loginForm" input="/login.jsp" 
  18.             name="loginForm" path="/login" scope="request" 
  19.             type="org.springframework.web.struts.DelegatingActionProxy">  
  20.             <forward name="success" path="/success.jsp" />  
  21.             <forward name="fail" path="/fail.jsp" />  
  22.         </action>  
  23.  
  24.     </action-mappings>  
  25.  
  26.     <message-resources  
  27.         parameter="com.qdu.sun.struts.ApplicationResources" />  
  28.     <plug-in  
  29.         className="org.springframework.web.struts.ContextLoaderPlugIn">  
  30.         <set-property property="contextConfigLocation" 
  31.             value="/WEB-INF/classes/applicationContext.xml" />  
  32.     </plug-in>  
  33.  
  34. </struts-config> 

/SSHLoginDemo/src/applicationContext.xml

 

 


  1. 代码  
  2.  
  3. <?xml version="1.0" encoding="UTF-8"?> 
  4. <beans xmlns="http://www.springframework.org/schema/beans" 
  5.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  6.     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd"> 
  7.     <bean id="login" class="com.qdu.sun.BO.LoginBO" /> 
  8.     <bean name="/login" class="com.qdu.sun.struts.action.LoginAction"> 
  9.         <property name="loginBean"> 
  10.             <ref bean="login" /> 
  11.         </property> 
  12.     </bean> 
  13.  
  14.     <bean id="sessionFactory" 
  15.         class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> 
  16.         <property name="configLocation" 
  17.             value="classpath:hibernate.cfg.xml"> 
  18.         </property> 
  19.     </bean> 
  20.     <bean id="UserDAO" class="com.qdu.sun.hibernate.UserDAO"> 
  21.         <property name="sessionFactory"> 
  22.             <ref bean="sessionFactory" /> 
  23.         </property> 
  24.     </bean> 
  25.       
  26. </beans> 

前端页面

/SSHLoginDemo/WebRoot/login.jsp

 


  1. 代码  
  2.  
  3. <%@ page language="java" pageEncoding="ISO-8859-1"%> 
  4. <%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%>   
  5. <%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%> 
  6.    
  7. <html>   
  8.     <head> 
  9.         <title>JSP for LoginForm form</title> 
  10.     </head> 
  11.     <body> 
  12.         <html:form action="/login"> 
  13.             password : <html:password property="password"/><html:errors property="password"/><br/> 
  14.             username : <html:text property="username"/><html:errors property="username"/><br/> 
  15.             <html:submit/><html:cancel/> 
  16.         </html:form> 
  17.     </body> 
  18. </html> 

struts

/SSHLoginDemo/src/com/qdu/sun/struts/action/LoginAction.java

 

  1. 代码  
  2.  
  3. /*  
  4.  * Generated by MyEclipse Struts  
  5.  * Template path: templates/java/JavaClass.vtl  
  6.  */  
  7. package com.qdu.sun.struts.action;  
  8.  
  9. import javax.servlet.http.HttpServletRequest;  
  10. import javax.servlet.http.HttpServletResponse;  
  11. import org.apache.struts.action.Action;  
  12. import org.apache.struts.action.ActionForm;  
  13. import org.apache.struts.action.ActionForward;  
  14. import org.apache.struts.action.ActionMapping;  
  15.  
  16. import com.qdu.sun.BO.LoginBO;  
  17. import com.qdu.sun.struts.form.LoginForm;  
  18.  
  19. /**   
  20.  * MyEclipse Struts  
  21.  * Creation date: 08-26-2008  
  22.  *   
  23.  * XDoclet definition:  
  24.  * @struts.action path="/login" name="loginForm" input="/login.jsp" scope="request" validate="true" 
  25.  * @struts.action-forward name="success" path="welcome.jsp" 
  26.  * @struts.action-forward name="fail" path="fail.jsp" 
  27.  */  
  28. public class LoginAction extends Action {  
  29.     /*  
  30.      * Generated Methods  
  31.      */  
  32.  
  33.     /**   
  34.      * Method execute  
  35.      * @param mapping  
  36.      * @param form  
  37.      * @param request  
  38.      * @param response  
  39.      * @return ActionForward  
  40.      */  
  41.     private LoginBO loginBean;   
  42.     public LoginBO getLoginBean() {  
  43.         return loginBean;  
  44.       }  
  45.       public void setLoginBean(LoginBO loginBean) {     
  46.         this.loginBean=loginBean;  
  47.       }   
  48.     public ActionForward execute(ActionMapping mapping, ActionForm form,  
  49.             HttpServletRequest request, HttpServletResponse response) {  
  50.         LoginForm loginForm = (LoginForm) form;// TODO Auto-generated method stub  
  51.         LoginBO login=getLoginBean();    
  52.         if(login.validate(loginForm.getUsername(), loginForm.getPassword()))  
  53.         {  
  54.             request.setAttribute("username", loginForm.getUsername());  
  55.         return mapping.findForward("success");  
  56.         }  
  57.         else  
  58.             return mapping.findForward("fail");  
  59.     }  

/SSHLoginDemo/src/com/qdu/sun/struts/form/LoginForm.java

 


  1. 代码  
  2.  
  3. /*  
  4.  * Generated by MyEclipse Struts  
  5.  * Template path: templates/java/JavaClass.vtl  
  6.  */ 
  7. package com.qdu.sun.struts.form;  
  8.  
  9. import javax.servlet.http.HttpServletRequest;  
  10. import org.apache.struts.action.ActionErrors;  
  11. import org.apache.struts.action.ActionForm;  
  12. import org.apache.struts.action.ActionMapping;  
  13. import org.apache.struts.action.ActionMessage;  
  14.  
  15. /**   
  16.  * MyEclipse Struts  
  17.  * Creation date: 08-26-2008  
  18.  *   
  19.  * XDoclet definition:  
  20.  * @struts.form name="loginForm"  
  21.  */ 
  22. public class LoginForm extends ActionForm {  
  23.     /*  
  24.      * Generated fields  
  25.      */ 
  26.  
  27.     /** password property */ 
  28.     private String password;  
  29.  
  30.     /** username property */ 
  31.     private String username;  
  32.  
  33.     /*  
  34.      * Generated Methods  
  35.      */ 
  36.  
  37.     /**   
  38.      * Method validate  
  39.      * @param mapping  
  40.      * @param request  
  41.      * @return ActionErrors  
  42.      */ 
  43.     public ActionErrors validate(ActionMapping mapping,  
  44.             HttpServletRequest request) {  
  45.         // TODO Auto-generated method stub  
  46.         ActionErrors errors=new ActionErrors();  
  47.         if(this.username==null||this.username.length()<1)  
  48.             errors.add("username"new ActionMessage("login.username"));  
  49.         if(this.password==null||this.password.length()<1)  
  50.             errors.add("password"new ActionMessage("login.password"));  
  51.             return errors;  
  52.     }  
  53.  
  54.     /**   
  55.      * Method reset  
  56.      * @param mapping  
  57.      * @param request  
  58.      */ 
  59.     public void reset(ActionMapping mapping, HttpServletRequest request) {  
  60.         // TODO Auto-generated method stub  
  61.         this.username=null;  
  62.         this.password=null;  
  63.     }  
  64.  
  65.     /**   
  66.      * Returns the password.  
  67.      * @return String  
  68.      */ 
  69.     public String getPassword() {  
  70.         return password;  
  71.     }  
  72.  
  73.     /**   
  74.      * Set the password.  
  75.      * @param password The password to set  
  76.      */ 
  77.     public void setPassword(String password) {  
  78.         this.password = password;  
  79.     }  
  80.  
  81.     /**   
  82.      * Returns the username.  
  83.      * @return String  
  84.      */ 
  85.     public String getUsername() {  
  86.         return username;  
  87.     }  
  88.  
  89.     /**   
  90.      * Set the username.  
  91.      * @param username The username to set  
  92.      */ 
  93.     public void setUsername(String username) {  
  94.         this.username = username;  
  95.     }  

spring

/SSHLoginDemo/src/com/qdu/sun/BO/LoginBO.java

 


  1. 代码  
  2.  
  3. package com.qdu.sun.BO;  
  4.  
  5. import java.util.List;  
  6.  
  7. import org.springframework.context.ApplicationContext;  
  8. import org.springframework.context.support.ClassPathXmlApplicationContext;  
  9.  
  10. import com.qdu.sun.hibernate.User;  
  11. import com.qdu.sun.hibernate.UserDAO;  
  12.  
  13. public class LoginBO {  
  14.     public boolean validate(String username, String password) {  
  15.         ApplicationContext ctx = new ClassPathXmlApplicationContext(  
  16.                 "applicationContext.xml");  
  17.         UserDAO dao = (UserDAO) ctx.getBean("UserDAO");  
  18.         User user = new User();  
  19.         user.setPassword(password);  
  20.         user.setUsername(username);  
  21.         List list = dao.findByExample(user);  
  22.         if (list.size() > 0) {  
  23.  
  24.             return true;  
  25.  
  26.         } else {  
  27.             return false;  
  28.  
  29.         }  
  30.     }  

hibernate

/SSHLoginDemo/src/com/qdu/sun/hibernate/UserDAO.java

 

  1. 代码  
  2.  
  3. package com.qdu.sun.hibernate;  
  4.  
  5. import java.util.List;  
  6. import org.apache.commons.logging.Log;  
  7. import org.apache.commons.logging.LogFactory;  
  8. import org.hibernate.LockMode;  
  9. import org.springframework.context.ApplicationContext;  
  10. import org.springframework.orm.hibernate3.support.HibernateDaoSupport;  
  11.  
  12. /**  
  13.  * A data access object (DAO) providing persistence and search support for User  
  14.  * entities. Transaction control of the save(), update() and delete() operations  
  15.  * can directly support Spring container-managed transactions or they can be  
  16.  * augmented to handle user-managed Spring transactions. Each of these methods  
  17.  * provides additional information for how to configure it for the desired type  
  18.  * of transaction control.  
  19.  *   
  20.  * @see com.qdu.sun.hibernate.User  
  21.  * @author MyEclipse Persistence Tools  
  22.  */ 
  23.  
  24. public class UserDAO extends HibernateDaoSupport {  
  25.     private static final Log log = LogFactory.getLog(UserDAO.class);  
  26.     // property constants  
  27.     public static final String USERNAME = "username";  
  28.     public static final String PASSWORD = "password";  
  29.  
  30.     protected void initDao() {  
  31.         // do nothing  
  32.     }  
  33.  
  34.     public void save(User transientInstance) {  
  35.         log.debug("saving User instance");  
  36.         try {  
  37.             getHibernateTemplate().save(transientInstance);  
  38.             log.debug("save successful");  
  39.         } catch (RuntimeException re) {  
  40.             log.error("save failed", re);  
  41.             throw re;  
  42.         }  
  43.     }  
  44.  
  45.     public void delete(User persistentInstance) {  
  46.         log.debug("deleting User instance");  
  47.         try {  
  48.             getHibernateTemplate().delete(persistentInstance);  
  49.             log.debug("delete successful");  
  50.         } catch (RuntimeException re) {  
  51.             log.error("delete failed", re);  
  52.             throw re;  
  53.         }  
  54.     }  
  55.  
  56.     public User findById(java.lang.Integer id) {  
  57.         log.debug("getting User instance with id: " + id);  
  58.         try {  
  59.             User instance = (User) getHibernateTemplate().get(  
  60.                     "com.qdu.sun.hibernate.User", id);  
  61.             return instance;  
  62.         } catch (RuntimeException re) {  
  63.             log.error("get failed", re);  
  64.             throw re;  
  65.         }  
  66.     }  
  67.  
  68.     public List findByExample(User instance) {  
  69.         log.debug("finding User instance by example");  
  70.         try {  
  71.             List results = getHibernateTemplate().findByExample(instance);  
  72.             log.debug("find by example successful, result size: " 
  73.                     + results.size());  
  74.             return results;  
  75.         } catch (RuntimeException re) {  
  76.             log.error("find by example failed", re);  
  77.             throw re;  
  78.         }  
  79.     }  
  80.  
  81.     public List findByProperty(String propertyName, Object value) {  
  82.         log.debug("finding User instance with property: " + propertyName  
  83.                 + ", value: " + value);  
  84.         try {  
  85.             String queryString = "from User as model where model." 
  86.                     + propertyName + "= ?";  
  87.             return getHibernateTemplate().find(queryString, value);  
  88.         } catch (RuntimeException re) {  
  89.             log.error("find by property name failed", re);  
  90.             throw re;  
  91.         }  
  92.     }  
  93.  
  94.     public List findByUsername(Object username) {  
  95.         return findByProperty(USERNAME, username);  
  96.     }  
  97.  
  98.     public List findByPassword(Object password) {  
  99.         return findByProperty(PASSWORD, password);  
  100.     }  
  101.  
  102.     public List findAll() {  
  103.         log.debug("finding all User instances");  
  104.         try {  
  105.             String queryString = "from User";  
  106.             return getHibernateTemplate().find(queryString);  
  107.         } catch (RuntimeException re) {  
  108.             log.error("find all failed", re);  
  109.             throw re;  
  110.         }  
  111.     }  
  112.  
  113.     public User merge(User detachedInstance) {  
  114.         log.debug("merging User instance");  
  115.         try {  
  116.             User result = (User) getHibernateTemplate().merge(detachedInstance);  
  117.             log.debug("merge successful");  
  118.             return result;  
  119.         } catch (RuntimeException re) {  
  120.             log.error("merge failed", re);  
  121.             throw re;  
  122.         }  
  123.     }  
  124.  
  125.     public void attachDirty(User instance) {  
  126.         log.debug("attaching dirty User instance");  
  127.         try {  
  128.             getHibernateTemplate().saveOrUpdate(instance);  
  129.             log.debug("attach successful");  
  130.         } catch (RuntimeException re) {  
  131.             log.error("attach failed", re);  
  132.             throw re;  
  133.         }  
  134.     }  
  135.  
  136.     public void attachClean(User instance) {  
  137.         log.debug("attaching clean User instance");  
  138.         try {  
  139.             getHibernateTemplate().lock(instance, LockMode.NONE);  
  140.             log.debug("attach successful");  
  141.         } catch (RuntimeException re) {  
  142.             log.error("attach failed", re);  
  143.             throw re;  
  144.         }  
  145.     }  
  146.  
  147.     public static UserDAO getFromApplicationContext(ApplicationContext ctx) {  
  148.         return (UserDAO) ctx.getBean("UserDAO");  
  149.     }  

 

本文转自linzheng 51CTO博客,原文链接:http://blog.51cto.com/linzheng/1080799