zoukankan      html  css  js  c++  java
  • Eclipse建筑物SSH(struts-2.2.3 + spring-2.5.6 + hibernate-3.6.8)相框-随着源代码


    一直想自己搭建一个ssh框架,这次因为编写demo的须要,就亲手搭建了一下,并逐步測试!以下进入正题:



    创建Struts项目

     

    整合步骤:

     

    1,在Eclipse中创建一个DynamicWeb Project,本文项目名称为SSH

    2。加入对应的jar包,放到SSH项目下的WEB-INF/lib

          

    3,建立struts配置文件。


    编写对应的測试代码:


    1,在src文件夹下创建对应package

    2。在WebContent下创建Register.jsp文件,并分别创建注冊成功和注冊失败的Success.jspFail.jsp

     

    操作完毕后的结构图:(因为自己在做这一步的时候没有记录,就直接拿来别人的图来用,差点儿全然相似)





    Struts代码(切记:加入namespace属性,假设不加入,可能会报错,找不到返回页面)


    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
    <struts>
    
    <!-- 问题一:无 namespace="/" 报错。找不到返回值 hejingyuan-->
    
    	<include file="struts-default.xml" />  
        <package name="hjy" extends="struts-default"  namespace="/">  
            <action name="register" class="regAction"> 
             	<result name="input">/Register.jsp</result>             
                <result name="success">/Success.jsp</result>  
                <result name="error">/Fail.jsp</result>          
            </action>  
        </package> 
    </struts>
    

    效果图:





    在struts基础上整合Hibernate


    整合Hibernate


    整合步骤:


    1,引入对应的jar包。放到SSH项目下的WEB-INF/lib

            

    2,建立Hibernate配置文件。

    3。创建user表的Hibernate映射文件。

       说明:由于这里要创建user表相应的POJO类,所以我这里把之前com.ynwi.ssh.beans包改成com.ynwi.ssh.forms包,用来存放页面传过来的表单数据。新创建com.ynwi.ssh.beans包,用来创建POJO对象来相应数据库中的表




    改动測试代码:


    1,创建BaseDao接口和UserDao类

    2,编写Session工厂类。

       说明:整合Spring后,数据源的创建和SessionFactory的创建都交给Spring去管理,就无需这个工厂类了。所以这里我们暂时创建在daoImpl包里面。

    3,改动业务逻辑实现类。


    操作完毕后的结构如图所看到的:



    Hibernate配置文件Hibernate.cfg.xml的内容


    <?

    xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <!-- Database connection settings --> <property name="connection.driver_class">com.mysql.jdbc.Driver</property> <property name="connection.url">jdbc:mysql://127.0.0.1/ssh</property> <property name="connection.username">root</property> <property name="connection.password">hejingyuan</property> <!-- JDBC connection pool (use the built-in) --> <!-- <property name="connection.pool_size">1</property> --> <!-- SQL dialect --> <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> <!-- Enable Hibernate's automatic session context management --> <!-- <property name="current_session_context_class">thread</property> --> <!-- Echo all executed SQL to stdout --> <property name="show_sql">true</property> <!-- Drop and re-create the database schema on startup --> <!-- <property name="hbm2ddl.auto">update</property> --> <property name="hibernate.hbm2ddl.auto">create</property> <mapping resource="com/hjy/ssh/beans/User.hbm.xml"/> </session-factory> </hibernate-configuration>


    工厂类SessionFactory的内容。

    (这是使用Hibernate3时候的SessionFactory,Hibernate4时候sessionFactory的创建预计会不一样。请自行查阅。參考资料给的是Hibernate4这里进行了改动


    package com.hjy.ssh.action;
    
    import com.opensymphony.xwork2.ActionSupport;  
    import com.hjy.ssh.forms.UserForm;
    import com.hjy.ssh.service.UserManager;  
    import com.hjy.ssh.serviceImpl.UserManagerImpl;  
    	  
    	public class RegisterAction extends ActionSupport {  
    	  
    	    private static final long serialVersionUID = 1L;  
    	  
    	    private UserForm user;  
    	  
    	    private UserManager userManager;  
    	  
    	    public UserForm getUser() {  
    	        return user;  
    	    }  
    	  
    	    public void setUser(UserForm user) {  
    	        this.user = user;  
    	    }  
    	  
    	    public UserManager getUserManager() {  
    	        return userManager;  
    	    }  
    	  
    	    public void setUserManager(UserManager userManager) {  
    	        this.userManager = userManager;  
    	    }  
    	  
    	    public String execute() {  
    	        try {  
    	            this.setUserManager(new UserManagerImpl()); 
    	            userManager.regUser(user);  
    	            return SUCCESS;  
    	  
    	        } catch (Exception e) {  
    	            e.printStackTrace();  
    	            return ERROR;  
    	        }  
    	    }
    }
    

    执行效果:





    Struts + Hibernate项目中整合Spring

     

    整合Spring


    整合步骤:


    1。将Spring内libs文件夹下包括全部的jar包

        

    2。编写Spring的配置文件applicationContext.xml。

    3,删除Hibernate的配置文件Hibernate.cfg.xml和工厂类HibernateSesseionFactory类。

    4,改动web.xml,载入Spring。改动Struts的配置文件struts.xml

         说明:想启动时载入Spring的配置文件。须要在web.xml中配置相应的监听器(listenser),并制定Spring的配置文件。

         说明:原来指定的名为register的action的class由原来的路径变为applicationContext.xml文件里该Action的id。



    改动对应的測试代码:


    1。改动BaseDao和UserDao。

       说明:在引入Spring后,须要用Spring进行统一的事务管理。数据源和sessionFactory都交给Spring去生成。因此接口类和实现类BaseDao和UserDao都须要做对应的改动。

    Spring提供了HibernateDaoSupport类来完毕对数据的操作,因此UserDao在实现BaseDao的同一时候还须要继承HibernateDaoSupport类。并将先前session的操作改动成HibernateTemplate(可通过getHibernateTemplate()方法来获得)的操作。

    2,改动业务逻辑实现类。

       说明:在没有增加Spring之前,业务逻辑实现类的Session的获得。dao的实例化。以及事务的管理都是该类运行管理的。增加Spring后,这些都交给Spring去管理。该类的dao的实例化由Spring注入。

    改动用户注冊的RegisterAction类。相同,RegisterAction类中的userManager的实例化也由Spring注入。


    Spring的配置文件applicationContext.xml的内容


    <?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-3.0.xsd">  
      
        <!-- 定义数据源的信息 -->  
        
        <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    		<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
    		<property name="url" value="jdbc:mysql://127.0.0.1/ssh"></property>
    		<property name="username" value="root"></property>
    		<property name="password" value="hejingyuan"></property>
    	</bean>
      
        <!--定义Hibernate的SessionFactory -->  
        <!-- SessionFactory使用的数据源为上面的数据源 -->  
        <!-- 指定了Hibernate的映射文件和配置信息 -->  
        <bean id="sessionFactory"  
            class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">  
            <property name="dataSource">  
                <ref local="dataSource" />  
            </property>  
            <property name="mappingResources">  
                <list>  
                    <value>com/hjy/ssh/beans/User.hbm.xml</value>  
                </list>  
            </property>  
            <property name="hibernateProperties">  
                <props>  
                    <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>  
                    <prop key="show_sql">true</prop>  
                    <prop key="hibernate.jdbc.batch_size">20</prop>  
                </props>  
            </property>  
        </bean>  
      
        <bean id="transactionManager"  
            class="org.springframework.orm.hibernate3.HibernateTransactionManager">  
            <property name="sessionFactory" ref="sessionFactory" />  
        </bean>  
      
        <bean id="baseDao" class="com.hjy.ssh.daoImpl.UserDao">  
            <property name="sessionFactory">  
                <ref bean="sessionFactory" />  
            </property>  
        </bean>  
      
        <!--用户注冊业务逻辑类 -->  
        <bean id="userManager" class="com.hjy.ssh.serviceImpl.UserManagerImpl">  
            <property name="baseDao" ref="baseDao">              
            </property>  
        </bean>  
       
        
        <!-- 用户注冊的Action -->  
        <bean id="regAction" class="com.hjy.ssh.action.RegisterAction">  
            <property name="userManager" ref="userManager">          
            </property>  
        </bean>  
      
        <!-- more bean definitions go here -->  
      
    </beans>  
    


    改动后的业务逻辑实现类UserManagerImpl的内容


    package com.hjy.ssh.serviceImpl;
    
    import org.hibernate.Session;
    
    import com.hjy.ssh.beans.User;
    import com.hjy.ssh.dao.BaseDao;
    import com.hjy.ssh.daoImpl.HibernateSessionFactory;
    import com.hjy.ssh.daoImpl.UserDao;
    import com.hjy.ssh.forms.UserForm;
    import com.hjy.ssh.service.UserManager;
    
    import org.hibernate.HibernateException;   
    import org.hibernate.Transaction;  
    import org.springframework.beans.BeanUtils;
      
    
    
    public class UserManagerImpl implements UserManager {
    
    	 	private BaseDao baseDao;  
    	  
    	    /*private Session session;  */
    	  
    	    public BaseDao getBaseDao() {
    			return baseDao;
    		}
    
    		public void setBaseDao(BaseDao baseDao) {
    			this.baseDao = baseDao;
    		}
    
    		public UserManagerImpl() {  
    	    	baseDao = new UserDao();  
    	    }  
    	  
    	    @Override  
    	    public void regUser(UserForm userForm) throws HibernateException {  
    	        /*session = HibernateSessionFactory.getSession();  
    	        dao.setSession(session);  
    	        // 获取事务  
    	        Transaction ts = session.beginTransaction();  
    	        // 构造User对象  
    	        User user = new User();  
    	        user.setUsername(userForm.getUsername());  
    	        user.setPassword(userForm.getPassword());  
    	        user.setGender(userForm.getGender());  
    	        // 保存User对象  
    	        dao.saveObject(user);  
    	        // 提交事务  
    	        ts.commit();  
    	        // 关闭Session  
    	        HibernateSessionFactory.closeSession(session);  */
    	    	
    	    	 User user = new User();  
    		     BeanUtils.copyProperties(userForm, user);  
    		     baseDao.saveObject(user); 
    	    }  
    	  
    	   
    }
    

    执行结果:




    參考资料:參考博客

     

    总结:

       

       在搭建的过程中,可能会遇到非常多问题,但仅仅要我们懂得原理,其余的问题大部分还是我们不够细心,慢慢的调试就可以。并且对于ssh框架的整合基本的工作还是引入对应的jar包,编写配置文件。然后用例进行对应的改动.


    源代码下载




    版权声明:本文博主原创文章。博客,未经同意不得转载。

  • 相关阅读:
    s 中日期 转换成时间戳 例如2013-08-30 转换为时间戳
    php解析html类库simple_html_dom
    c++关于字符串的读入和截取
    八皇后问题
    激活函数matlab代码
    转:ubuntu添加用户adduser,并给予sudo权限
    shell遍历多个文件夹并进行批量修改文件名
    【转】用win7(64位)远程桌面连接linux(Ubuntu14.04)详细教程
    机器学习-线性回归
    编译gpu集群版caffe
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/4852285.html
Copyright © 2011-2022 走看看