struts+Spring+Hibernate整合(2)

 

我们以把三个框架都导进来了,接上来我把JAR包给出来,如下图:

 

大家把多余的jar文件删除(在WEB-INF/lib下)。然后我们开始创建实体类和映射文件,我们找到“DB Browser”选项卡,如下

 

在我们前面建的数据库连接"mysql"上右键--Open connection...开始连接数据库。如下图:

 

点击那个小三角找到我们要找的库“test”,然后在库中找到我们要创建映射的表,我这里是user表,表中字段有三个,id intege他是主键,username varchar(45) 用户名,password varchar(45)密码。

然后我们在要创建映射的表上点右键,选择“Hibernate Reverse Engineering...”弹出对话框,如下图:

按照上图配置:先选择映射文件要存放的路径(点java package 后面的那个“Browser”按钮,选择MySSH项目下的一个包,我建的包叫:com.zgh.hibernate.vo,大家也可在上图中看一下我的目录结构),然后按图钩选即可,说明上面图片中有。最后点“Next”进入下一步,如图:

在上图中选择主键生成方式,按图选择即可。点“Finish”完成。

生成两个文件在com.zgh.hibernate.vo中,如下图(包括我项目的路径情况,大家可参考):

这样实体类和其映射文件就创建完成了。我们要修改一个User.hbm.xml文件,把catalog="test"删除,否则Hibernate生成的SQL会出错。下面给出User.hbm.xml的代码,如下:

<? xml version = " 1.0 " ?>
<! DOCTYPE hibernate - mapping PUBLIC  " -//Hibernate/Hibernate Mapping DTD 3.0//EN "
" http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd " >
<!--  
    Mapping file autogenerated by MyEclipse  -  Hibernate Tools
-->
< hibernate - mapping >
     < class  name = " com.zgh.hibernate.vo.User "  table = " user " >
         < id name = " id "  type = " java.lang.Integer " >
             < column name = " id "   />
             < generator  class = " increment "   />
         </ id >
         < property name = " username "  type = " java.lang.String " >
             < column name = " username "  length = " 45 "  not - null = " true "   />
         </ property >
         < property name = " password "  type = " java.lang.String " >
             < column name = " password "  length = " 45 "  not - null = " true "   />
         </ property >
     </ class >
</ hibernate - mapping >

User.java代码:

 

/** */ /**
 * @author zhu国辉
 */
package  com.zgh.hibernate.vo;



/** */ /**
 * User generated by MyEclipse - Hibernate Tools
 */
public   class  User   implements  java.io.Serializable  ... {


    // Fields    

     private Integer id;
     private String username;
     private String password;


    // Constructors

    /** *//** default constructor */
    public User() ...{
    }

    
    /** *//** full constructor */
    public User(String username, String password) ...{
        this.username = username;
        this.password = password;
    }

   
    // Property accessors

    public Integer getId() ...{
        return this.id;
    }
    
    public void setId(Integer id) ...{
        this.id = id;
    }

    public String getUsername() ...{
        return this.username;
    }
    
    public void setUsername(String username) ...{
        this.username = username;
    }

    public String getPassword() ...{
        return this.password;
    }
    
    public void setPassword(String password) ...{
        this.password = password;
    }
   








}

接下来我们创建Dao层,我们在com.zgh.spring.dao中创建一个接口和一类实现类:

IUserLoginDao.java代码:

 

/** */ /**
 * @author zhu国辉
 */
package  com.zgh.spring.dao;

import  java.util.List;

public   interface  IUserLoginDao  ... {
    List getUser(String username,String password);

}

UserLoginDao.java代码:

 

/** */ /**
 * @author zhu国辉
 */
package  com.zgh.spring.dao;

import  java.util.List;

import  org.springframework.orm.hibernate3.support.HibernateDaoSupport;
/** */ /**
 * 记住一定要引入org.springframework.orm.(hibernate3).support.HibernateDaoSupport
 * 也就是此类的父类.
 * @author zhu国辉
 *
 */
public   class  UserLoginDao  extends  HibernateDaoSupport  implements  IUserLoginDao  ... {

    public List getUser(String username, String password) ...{
        List users=getHibernateTemplate().find("from User u where username=? and password=?",new Object[]...{username,password});
        return users;
    }

}

以上是Dao层,通过Spring提供的Hibernate模板,实现持久层的操作。比单用Hibernate代码少多了,不用开启和关闭事务和session。

接下来是service层,我们会把事务添加到这层里,这一层一般会把Action中Form的数据转换成实体类给Dao层用,但本例只做登陆,没有体现出来。

我们在com.zgh.spring.service包中创建一个接口和一个实现类。IUserLoginService.java接口代码:

 

/** */ /**
 * @author zhu国辉
 */
package  com.zgh.spring.service;

import  java.util.List;

public   interface  IUserLoginService  ... {
    List getUser(String username,String password);

}

UserLoginService.java代码:

 

/** */ /**
 * @author zhu国辉
 */
package  com.zgh.spring.service;

import  java.util.List;
import  com.zgh.spring.dao.IUserLoginDao;;

public   class  UserLoginService  implements  IUserLoginService  ... {
    private IUserLoginDao userLoginDao;
    
    public void setUserLoginDao(IUserLoginDao userLoginDao) ...{
        this.userLoginDao = userLoginDao;
    }

    public List getUser(String username, String password) ...{
        
        return userLoginDao.getUser(username, password);
    }

}

接下来我们开始写Struts的程序,下一页吧,太多了。

下面我们开始创建Struts的程序,我们在WEB-INF下双击打开struts-config.xml文件,在视图中的空白处右键--New--"Form,Action and JSP":

弹出一对话框,如下图:

此步是创建Form,在User case中输入user,在下面添加Form的属性(点"Add"按钮添加),然后我们我们选择“JSP”选项卡,如下图:

按图中配置即可,创建的jsp文件会出现在WebRoot/jsp文件夹中(应该在WebRoot下创建个jsp文件夹),

然后点击"Next"进入下一步,如下图:

此步是创建Action,在上面输入Path,因为是登陆,这里我们输入"/login",然后确定Type中是com.zgh.struts.action.LoginAction然后点击“Forwards”选项卡,如下图:

按图中的步骤一步一步输入(或选择),先点击“Add” (第2步)在弹出框中的“Name”中输入“success”(第4步),然后点"Browser"按钮(第5步),选择一个登陆成的的页面(第6步,这个页面应该先建好,后面会给出代码),然后点OK(第7步),然后点"Add"按钮(第8步),然后点“Close”关闭(第9步),然后点"Finish"完成(第10步)。完成。在struts-config.xml中生成视图如下:

以下是struts-config.xml的代码,如下:

 

<? xml version="1.0" encoding="gbk" ?>
<! 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 ="userForm"  type ="com.zgh.struts.form.UserForm"   />

   </ form-beans >

   < global-exceptions  />
   < global-forwards  />
赛尔号 提亚斯技能 赛尔号 提亚斯技能表_如何购买笔记本电脑 - lianhuangyoqo49 - lianhuangyoqo49的博客   < action-mappings  >
    <!--  把type="com.zgh.struts.action.LoginAction" 改成:type="org.springframework.web.struts.DelegatingActionProxy"   -->
    <!--  这样才能合Spring整合,把控制权交给Spring  -->
     < action
       attribute ="userForm"
      input ="/jsp/login.jsp"
      name ="userForm"
      path ="/login"
      scope ="request"
     
      type ="org.springframework.web.struts.DelegatingActionProxy" >
       < forward  name ="success"  path ="/jsp/loginSuccess.jsp"   />
     </ action >

   </ action-mappings >

   < message-resources  parameter ="com.zgh.struts.ApplicationResources"   />
   <!--  添加Spring的插件  -->
  < plug-in  className ="org.springframework.web.struts.ContextLoaderPlugIn" >
       < set-property  property ="contextConfigLocation"  value ="/WEB-INF/applicationContext.xml" />
   </ plug-in >
  
</ struts-config >

注意下上面的action元素的type属性,这是与Spring整合的一种方法,还有后面的plug-in是必须的,而且一定要写到最后,Struts的配置文件必须按先后顺序。

下面是LoginAction.java代码:

 

/**/ /*
 * Generated by MyEclipse Struts
 * Template path: templates/java/JavaClass.vtl
 */
/** */ /**
 * @author zhu国辉
 */
package  com.zgh.struts.action;

import  java.util.List;

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.zgh.spring.service.IUserLoginService;
import  com.zgh.struts.form.UserForm;

/** */ /** 
 * MyEclipse Struts
 * Creation date: 01-07-2008
 * 
 * XDoclet definition:
 * @struts.action path="/login" name="userForm" input="/jsp/login.jsp" scope="request" validate="true"
 * @struts.action-forward name="success" path="/jsp/loginSuccess.jsp"
 */
public   class  LoginAction  extends  Action  ... {
    /**//*
     * Generated Methods
     */

    private IUserLoginService userLoginService;
    
    public void setUserLoginService(IUserLoginService userLoginService) ...{
        this.userLoginService = userLoginService;
    }

    /** *//** 
     * Method execute
     * @param mapping
     * @param form
     * @param request
     * @param response
     * @return ActionForward
     */
    public ActionForward execute(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response) ...{
        UserForm userForm = (UserForm) form;// TODO Auto-generated method stub
        List users=userLoginService.getUser(userForm.getUsername(), userForm.getPassword());
        if(users!=null && users.size()>0)...{
            return mapping.findForward("success");
        }
        return mapping.getInputForward();
    }
}

下面是login.jsp的代码:

 

<% ... @ page language="java" %>
<% ... @ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean" %>  
<% ... @ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html" %>
 
< html >  
     < head >
         < title > JSP for UserForm form </ title >
     </ head >
     < body >
         < html:form  action ="/login" >
            
            username :  < html:text  property ="username" />< html:errors  property ="username" />< br />
            password :  < html:password  property ="password" />< html:errors  property ="password" />< br />
             < html:submit />< html:cancel />
         </ html:form >
     </ body >
</ html >

以下是loginSuccess.jsp代码:

 

<% ... @ page language="java" contentType="text/html; charset=GBK"
    pageEncoding="GBK" %>
<% ... @ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean" %>  
<% ... @ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html" %>
    
<! DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" >
< html >
< head >
< meta  http-equiv ="Content-Type"  content ="text/html; charset=GBK" >
< title > Insert title here </ title >
</ head >
< body >
    亲爱的 < bean:write  name ="userForm"  property ="username" /> :
     < br />
    欢迎您!
</ body >
</ html >

好,接下来的在下一页继续。

接下来是UserForm的代码:

 

 

/**/ /*
 * Generated by MyEclipse Struts
 * Template path: templates/java/JavaClass.vtl
 */
/** */ /**
 * @author zhu国辉
 */
package  com.zgh.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;

/** */ /** 
 * MyEclipse Struts
 * Creation date: 01-07-2008
 * 
 * XDoclet definition:
 * @struts.form name="userForm"
 */
public   class  UserForm  extends  ActionForm  ... {
    /**//*
     * Generated fields
     */

    /** *//** id property */
    private String id;

    /** *//** username property */
    private String username;

    /** *//** password property */
    private String password;

    /**//*
     * Generated Methods
     */

    /** *//** 
     * Method validate
     * @param mapping
     * @param request
     * @return ActionErrors
     */
    public ActionErrors validate(ActionMapping mapping,
            HttpServletRequest request) ...{
        // TODO Auto-generated method stub
        return null;
    }

    /** *//** 
     * Method reset
     * @param mapping
     * @param request
     */
    public void reset(ActionMapping mapping, HttpServletRequest request) ...{
        // TODO Auto-generated method stub
    }

    /** *//** 
     * Returns the id.
     * @return String
     */
    public String getId() ...{
        return id;
    }

    /** *//** 
     * Set the id.
     * @param id The id to set
     */
    public void setId(String id) ...{
        this.id = id;
    }

    /** *//** 
     * 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;
    }

    /** *//** 
     * 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;
    }
}

 以下是applicationContext.xml的代码:

 

<? xml version="1.0" encoding="UTF-8" ?>
<! DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd" >

< beans >

    
     <!-- ==================== 数据源=======================  -->
     < bean  id ="myDataSource"
        class ="org.apache.commons.dbcp.BasicDataSource" >
         < property  name ="driverClassName" >
             < value > com.mysql.jdbc.Driver </ value >
         </ property >
         < property  name ="url" >
             < value > jdbc:mysql://localhost:3306/test </ value >
         </ property >
         < property  name ="username" >
             < value > root </ value >
         </ property >
何为 抽签 何为八字命宫的神杀_QQ个性哲理签名_选萚不対,努力白费 - youshenvoaa8322 - youshenvoaa8322的博客         < property  name ="password" >
             < value > root </ value >
         </ property >
     </ bean >

     <!-- ==================== 连接工厂=======================  -->
     < bean  id ="mySessionFactory"  class ="org.springframework.orm.hibernate3.LocalSessionFactoryBean" >
         < property  name ="mappingResources" >
             < list >
                 < value > com/zgh/hibernate/vo/User.hbm.xml </ value ></ list >
         </ property >
         < property  name ="dataSource" >
             < ref  bean ="myDataSource"   />
         </ property >
         < property  name ="hibernateProperties" >
             < props >
                 < prop  key ="hibernate.dialect" > org.hibernate.dialect.MySQLDialect </ prop >
                 < prop  key ="hibernate.show_sql" > true </ prop >
             </ props >
         </ property >
     </ bean >
    
     <!-- ==================== DAO=======================  -->
     < bean  id ="userLoginDao"  class ="com.zgh.spring.dao.UserLoginDao" >
         < property  name ="sessionFactory" >
             < ref  local ="mySessionFactory" />
         </ property >
     </ bean >
    
     <!-- ====================Service=======================  -->
     < bean  id ="userLoginService"  class ="com.zgh.spring.service.UserLoginService" >
         < property  name ="userLoginDao" >
             < ref  local ="userLoginDao" />
         </ property >
     </ bean >
    
      <!-- ====================hibernate事务管理器=======================  -->
     < bean  id ="hibernateTransactionManager"  class ="org.springframework.orm.hibernate3.HibernateTransactionManager" >
         < property  name ="sessionFactory" >
             < ref  local ="mySessionFactory" />
         </ property >
     </ bean >
    
      <!-- ====================事务代理=======================  -->
      <!--  第一个属性:transactionManager是设置事务管理器  -->
      <!--  第二个属性:target是设置要代理的对象  -->
      <!--  第三个属性:transactionAttributes是设置代理对象的方法的事务属性.这里设置的是:开启一个事务,并且是只读的(因为是查询)  -->
     < bean  id ="proxyUserLoginService"  class ="org.springframework.transaction.interceptor.TransactionProxyFactoryBean" >
         < property  name ="transactionManager" >
             < ref  local ="hibernateTransactionManager" />
         </ property >
         < property  name ="target" >
             < ref  local ="userLoginService" />
         </ property >
         < property  name ="transactionAttributes" >
             < props >
                 < prop  key ="getUser*" > PROPAGATION_REQUIRED,readOnly </ prop >
             </ props >
         </ property >
     </ bean >
    
     <!-- ====================Action=======================  -->     
     <!--  此时要用bean的name属性,不要用id属性  -->
     < bean  name ="/login"  class ="com.zgh.struts.action.LoginAction" >
         < property  name ="userLoginService" >
             < ref  bean ="proxyUserLoginService" />
         </ property >
     </ bean >     
</ beans >

上面的xml中,大部分得自己写,如有哪处不明白,留言吧,

数据源和SessionFactory是配置时创建的。下面是Web.xml:

<? xml version="1.0" encoding="UTF-8" ?>
< web-app  xmlns ="http://java.sun.com/xml/ns/j2ee"  xmlns:xsi ="http://www.w3.org/2001/XMLSchema-instance"  version ="2.4"  xsi:schemaLocation ="http://java.sun.com/xml/ns/j2ee   http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" >
   < servlet >
     < servlet-name > action </ servlet-name >
     < servlet-class > org.apache.struts.action.ActionServlet </ servlet-class >
     < init-param >
       < param-name > config </ param-name >
       < param-value > /WEB-INF/struts-config.xml </ param-value >
     </ init-param >
     < init-param >
       < param-name > debug </ param-name >
       < param-value > 3 </ param-value >
     </ init-param >
     < init-param >
       < param-name > detail </ param-name >
       < param-value > 3 </ param-value >
     </ init-param >
     < load-on-startup > 0 </ load-on-startup >
   </ servlet >
   < servlet-mapping >
     < servlet-name > action </ servlet-name >
     < url-pattern > *.do </ url-pattern >
   </ servlet-mapping >
</ web-app >

下面是我的项目的结构:

最后总结:在这个项目中,通过Struts建立视图,并担任控制器角色,Spring则把整个项目的耦合度减到最小,通过Spring的aop实现声明式事务(只需在配置文件中配置),通过Spring提供的Hibernate模板,我们甚至都不用关心Session的创建与关闭.还要说明一点登陆时不要输入中文,这里面没进行转码,我会在以后补充的.

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值