struts+hibernate+spring入门例子

环境 :eclipse3.2+myeclipse5.0m2, tomcat 上顺利运行 , 为了简便开发 , 这一个例子我没有写业务逻辑层 , 而且包名的设置也不太合理,各位可以自行修改 . 构造好开发环境 , 把需要的 jar 导入 web project .

1、创建一个名叫demo数据库,这里用mysql
   
再创建一个表
:
    create table user (
         id  int(15) not null auto_increment,
         username varchar(50)  not null,
        password  varchar(50)  not null,
        primary  key(id)
    )type=INNODB;

记得 type 要设为 innodb bdb 类型的,不然的话不支持数据库事务 .
自行插入几条数据;
2domain层和DAO .
使用MyEclipse的数据Database Explorer工具创建User.hmb.xml、AbstractUser.java、User.java映射文件。具体文件如下:
AbstractUser.java文件:
package com.test;
public abstract class AbstractUser  implements java.io.Serializable {

    // Fields   
     private Integer id;
     private String username;
     private String password;

    // Constructors
    /** default constructor */
    public AbstractUser() {
    }
   
    /** full constructor */
    public AbstractUser(Integer id, String username, String password) {
        this.id = id;
        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;
    }
}

User.java文件
package com.test;
// Generated by MyEclipse - Hibernate Tools
/**
 * User generated by MyEclipse - Hibernate Tools
 */
public class User extends AbstractUser implements java.io.Serializable {
    // Constructors
    /** default constructor */
    public User() {
    }
   
    /** full constructor */
    public User(Integer id, String username, String password) {
        super(id, username, password);       
    }
}

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.test.User" table="user">
        <id name="id" type="java.lang.Integer">
            <column name="id" />
            <generator class="native" />
        </id>
        <property name="username" type="java.lang.String">
            <column name="username" length="50" not-null="true" />
        </property>
        <property name="password" type="java.lang.String">
            <column name="password" length="50" not-null="true" />
        </property>
    </class>
</hibernate-mapping>

  提示:User.java,和User.hbm.xm两个文件放在同一个包文件夹里面。
接下来是创建UserDAO接口,和UserDAO接口的实现UserDAOImp.

UserDAO文件:

package com.test;">
publicinterface UserDAO {
    publicabstractboolean isValidUser(String username,String password);
}
 
UserDAOImp文件,主要是用来验证用户名和密码正确不:
package com.test;
 
import org.hibernate.Query;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
 
public class UserDAOImp extends HibernateDaoSupport implements UserDAO{
 
               private static String hql = "from User as u where u.username=:userName"+" and u.password=:passWord";
               
               public boolean isValidUser(String username, String password) {
               
                Query query= this.getHibernateTemplate().getSessionFactory().getCurrentSession().createQuery(hql);
                query.setString("userName", username);
                query.setString("passWord", password);
                return (query.list().size()>0);                 
       }
}
我把配置文件放在最后才说,即是spring的的配置文件,这里利用spring来管理hibernate的dataSource和事务管理.

3、 创建strutsMVC的框架的一些具体实现内容,把struts中的action控制放在spring中去配置,因为可以利用spring中DI或IoC的功能.
新建一个index.jsp文件,如下所示:
<%@ page language = "java" pageEncoding = "UTF-8" %>
 
<%@ taglib uri = "http://struts.apache.org/tags-bean" prefix = "bean" %>
<%@ taglib uri = "http://struts.apache.org/tags-html" prefix = "html" %>
<%@ taglib uri = "http://struts.apache.org/tags-logic" prefix = "logic" %>
<%@ taglib uri = "http://struts.apache.org/tags-tiles" prefix = "tiles" %>
 
 
<! DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" >
< html >
  < head >
    < title > My JSP 'index.jsp' starting page </ title >
  </ head >
 
  < body >
  < a href = "login.jsp" > 进入登录系统 </ a >
  </ body >
</ html >
 
再创建一个login.jsp文件
<%@ page language = "java" pageEncoding = "utf-8" %>
<%@ taglib uri = "http://struts.apache.org/tags-bean" prefix = "bean" %>
<%@ taglib uri = "http://struts.apache.org/tags-html" prefix = "html" %>
<%@ taglib uri = "http://struts.apache.org/tags-logic" prefix = "logic" %>
<%@ taglib uri = "http://struts.apache.org/tags-tiles" prefix = "tiles" %>
<! DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" >
< html:html lang = "true" >
  < head >
    < html:base />
    < title > login.jsp </ 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:html >
 
登录成功后的success.jsp
<%@ page language = "java" pageEncoding = "UTF-8" %>
<%@ taglib uri = "http://struts.apache.org/tags-bean" prefix = "bean" %>
<%@ taglib uri = "http://struts.apache.org/tags-html" prefix = "html" %>
<%@ taglib uri = "http://struts.apache.org/tags-logic" prefix = "logic" %>
<%@ taglib uri = "http://struts.apache.org/tags-tiles" prefix = "tiles" %>
<! DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" >
< html:html lang = "true" >
  < head >
    < html:base />  
    < title > success.jsp </ title >
    < meta http-equiv = "pragma" content = "no-cache" >
    < meta http-equiv = "cache-control" content = "no-cache" >
    < meta http-equiv = "expires" content = "0" >    
    < meta http-equiv = "keywords" content = "keyword1,keyword2,keyword3" >
    < meta http-equiv = "description" content = "This is my page" >
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    --> 
  </ head >  
  < body >
      Welcome! < br />
      < logic:present name = "loginForm" >
            欢迎你 , < bean:write name = "loginForm" property = "username" />
      </ logic:present >
  </ body >
</ html:html >
 
创建struts框架的action文件,LoginAction.java文件,这里没有创建form文件,在struts-config.xml中配置.
/*
 * Generated by MyEclipse Struts
 * Template path: templates/java/JavaClass.vtl
 */
package com.test.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 org.apache.struts.validator.DynaValidatorForm;
import com.test.UserDAO;
 
/**
 * MyEclipse Struts
 * Creation date: 08-08-2006
 *
 * XDoclet definition:
 * @struts.action path="/login" name="loginForm" input="/login.jsp" scope="request" validate="true"
 */
public class LoginAction extends Action {
    
    private UserDAO userDAO;
        
    public ActionForward execute(ActionMapping mapping, ActionForm form,
           HttpServletRequest request, HttpServletResponse response) {
       DynaValidatorForm loginForm = (DynaValidatorForm) form;// TODO Auto-generated method stub
       String username = (String)loginForm.get("username");
       String password = (String)loginForm.get("password");
        if (userDAO.isValidUser(username,password)) {
              return mapping.findForward("success");
            } else {
              return mapping.getInputForward();
            }
 
    }
    public UserDAO getUserDAO() {
       return userDAO;
    }
    public void setUserDAO(UserDAO userDAO) {
       this.userDAO = userDAO;
    }
}

struts的配置文件struts-config.xml配置如下,<action>里面type元素的设置,还有设置两个<plug-in/>,第一个用来验证的,第二个是spring和struts结合的一个配置,可以用spring来控制struts的action:
<? 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 = "org.apache.struts.validator.DynaValidatorForm" >
       < form-property name = "password" type = "java.lang.String" ></ form-property >
       < form-property name = "username" type = "java.lang.String" ></ form-property >
      </ form-bean >
  </ form-beans >
  < global-exceptions />
  < global-forwards >
    < forward name = "success" path = "/success.jsp" />
  </ global-forwards >
 
  < action-mappings >
    < action
      attribute = "loginForm"
      input = "/login.jsp"
      name = "loginForm"
      path = "/login"
      scope = "request"
      validate = "true"
      type = "org.springframework.web.struts.DelegatingActionProxy" />
 
  </ action-mappings >
  < message-resources parameter = "com.test.struts.ApplicationResources" />
 
  < plug-in className = "org.apache.struts.validator.ValidatorPlugIn" >
    < set-property property = "pathnames" value = "/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml" />
  </ plug-in >
  < plug-in className = "org.springframework.web.struts.ContextLoaderPlugIn" >
       < set-property property = "contextConfigLocation" value = "/WEB-INF/applicationContext.xml" />  
  </ plug-in >
</ struts-config >
 
WEB-INF/ 创建 validation.xml 文件 , 用来验证密码和用户名的
文件如下所示 :
<? xml version = "1.0" encoding = "UTF-8" ?>
< form-validation >
  < formset >
  < form name = "loginForm" >
   < field property = "username" depends = "required" >
    < arg0 key = "prompt.username" />
   </ field >
   < field property = "password" depends = "required" >
    < arg0 key = "prompt.password" />
   </ field >
  </ form >
  </ formset >
</ form-validation >
同时在 ApplicationResources.properties 文件里添加如下内容:
prompt.username = 用户名称
prompt.password = 登录密码
errors.required = {0} 是必须的 .
 
4最关键的一步,也是最后一步,酷暑 spring的配置文件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 = "dataSource"
       class = "org.apache.commons.dbcp.BasicDataSource" >
       < property name = "driverClassName" >
           < value > com.mysql.jdbc.Driver </ value >
       </ property >
       < property name = "url" >
           < value > jdbc:mysql://localhost:3306/demo </ value >
       </ property >
       < property name = "username" >
           < value > root </ value >
       </ property >
       < property name = "password" >
           < value > 12345 </ value >
       </ property >
    </ bean >
    < bean id = "sessionFactory"
       class = "org.springframework.orm.hibernate3.LocalSessionFactoryBean" >
       < property name = "dataSource" >
           < ref bean = "dataSource" />
       </ property >
      
       < property name = "mappingResources" >
            < list >
                < value > com/test/User.hbm.xml </ value >
            </ list >
         </ property >
           
       < property name = "hibernateProperties" >
           < props >
              < prop key = "hibernate.dialect" >
                  org.hibernate.dialect.MySQLDialect
              </ prop >
              < prop key = "hibernate.show_sql" > true </ prop >
           </ props >
       </ property >
    </ bean >
   
    < bean id = "userDAO" class = "com.test.UserDAOImp" >
       < property name = "sessionFactory" >
          < ref local = "sessionFactory" />
       </ property >
    </ bean >
   
    < bean id = "transactionManager" class = "org.springframework.orm.hibernate3.HibernateTransactionManager" >
        < property name = "sessionFactory" >
          < ref local = "sessionFactory" />
       </ property >
    </ bean >
   
    < bean id = "userDAOProxy" class = "org.springframework.transaction.interceptor.TransactionProxyFactoryBean" >
         < property name = "transactionManager" >
           < ref local = "transactionManager" />
         </ property >
         < property name = "target" >
           < ref local = "userDAO" />
         </ property >
         < property name = "transactionAttributes" >
           < props >
              < prop key = "is*" > PROPAGATION_REQUIRED,readOnly </ prop >
           </ props >
         </ property >
    </ bean >
   
    < bean name = "/login" class = "com.test.struts.action.LoginAction" singleton = "false" >
      < property name = "userDAO" >
        < ref local = "userDAOProxy" />
      </ property >
    </ bean >
</ beans >
 
注意: < bean name = "/login" class = "com.test.struts.action.LoginAction" singleton = "false" > 中name的值要和struts配置文件的<action>里面的path子元素一样,还有建议把singleton设置为false,解决了 Struts中有时会发生错误的线程安全问题.
 
5、在tomcat发布运行, 体验一下动手带来的乐趣
转载请标明出处,谢谢你的合作.http://blog.csdn.net/lightersky/archive/2006/08/11/1050374.aspx
上面这个例子是我转的,我前几天也配置成功了,不过是struts+hibernate和这个基本上一样,签于本人的语文水平有限,所以就直接转过来了,不过我用的是eclipse3.1.1+myeclipse4.1+tomcat5.0.28不过这个都没什么关系,只要基本思路清晰就成了。。呵呵。。。。。。

 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值