struts+hibernate+spring入门例子

来源:互联网 发布:微信淘宝头像图片大全 编辑:程序博客网 时间:2024/04/30 21:06
环境: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要设为innodbbdb类型的,不然的话不支持数据库事务.
自行插入几条数据;
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不过这个都没什么关系,只要基本思路清晰就成了。。呵呵。。。。。。

 
原创粉丝点击