• 热门专题

Struts+Hibernate+Spring实现用户登录功能

作者:itRed  发布日期:2014-04-21 20:37:58
Tag标签:功能  用户  
  •       通过登录案例实现三大框架之间的整合,登录功能是任何系统和软件必不可少的一个模块,然而通过这个模块来认识这些复杂的框架技术,理解数据流向和整个设计思路是相当容易的。只有在掌握了这些小模块的应用后,才能轻松的去研究和设计出更有创意的,更加严密的系统。

          本人通过学习,实现了这个小功能,现在将实现思想和过程总结如下。希望各位大神朋友多多审查,有什么不到位的地方,请通过邮件告诉我(it_red@sina.com),在此表示感谢;新手朋友,我相信这个例子会是你进入框架领域的第一个完整的DEMO。当你部署成功后,你一定会相当自豪的,同时也有了学习更深知识的信心,如果你还有什么不明白的或者需要该DEMO的源码,请留言或者发邮件告诉我,我们共同进步。

        注意搭建这个案例的框架版本:struts 2.3.4     Hibernate 3.0      Spring 3.1.1 

        数据库设计:id int;username varchar(11);password varchar(11)

    一.首先为这个demo添加spring核心容器:

    鼠标右击项目,[MyEclipse]-----[Add Spring Capabilities…],在弹出的框中选择前3个,然后就是下一步,finish。

         2.  完成后,会在项目工程目录src下出现一个applicationContext.xml文件,这就是spring的配置文件,而且我们可以通过这个配置文件将Hibernate的配置加载到applicationContext.xml这个配置文件中。(附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'
        xmlns:p='http://www.springframework.org/schema/p'
        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'>
            <property name='driverClassName'
                value='com.mysql.jdbc.Driver'>
            </property>
            <property name='url' value='jdbc:mysql://localhost:3306/test'></property>
            <property name='username' value='root'></property>
            <property name='password' value='123456'></property>
        </bean>
        <bean id='sessionFactory'
            class='org.springframework.orm.hibernate3.LocalSessionFactoryBean'>
            <property name='dataSource'>
                <ref bean='dataSource' />
            </property>
            
        <!-- 需要自己添加的映射文件 -->    
            <property name='mappingResources'>
              <list>
                 <value>com/red/login/vo/User.hbm.xml</value>
              </list>
            </property>
            
            <property name='hibernateProperties'>
                <props>
                    <prop key='hibernate.dialect'>
                        org.hibernate.dialect.MySQLDialect
                    </prop>
                </props>
            </property>
        </bean>
        <!-- 自己需要配置 -->
        <bean id='baseDAO' class='com.red.login.dao.BaseDAO'>
           <property name='sessionFactory' ref='sessionFactory'></property>
        </bean>
        <bean id='userDAO' class='com.red.login.impl.UserDAO' parent='baseDAO'></bean>
        <bean id='login' class='com.red.login.action.LoginAction'></bean>
        </beans>

    二.添加Hibernate并并持久化User表:

    鼠标右击项目,[MyEclipse]---[Add Hibernate Capabilities…],版本选择Hibernate3.3,方框选择前两个,然后就是下一步,选择用Spring的配置文件进行SessionFactory的配置;这样生成的文件中就没有了hibernate.cfg.xml,而是直接将配置写入了applicationContext.xml这个文件中;

         2.根据提示填写数据库驱动的相关数据:Driver,url,class,Username,Password等信息;

         3. 提示是否创建SessionFactory类,由于这个程序Spring注入sessionFactory,所以不用创建,取消方框中的对勾选项;

         4.finish完成。

         5.添加User对象和映射文件:(附User.java,User.hbm.xml的源码)


    package com.red.login.vo;
    
    /**
     * 定义实体bean
     * @author Red
     * Email:it_red@sina.com
     */
    public class User {
    
        private int id;
        private String username;
        private String password;
        public User(String username, String password) {
            this.username = username;
            this.password = password;
        }
        public User() {
            // TODO Auto-generated constructor stub
        }
        public int getId() {
            return id;
        }
        public void setId(int id) {
            this.id = id;
        }
        public String getUsername() {
            return username;
        }
        public void setUsername(String username) {
            this.username = username;
        }
        public String getPassword() {
            return password;
        }
        public void setPassword(String password) {
            this.password = password;
        }
        
        
    }

    <?xml version='1.0' encoding='UTF-8'?>
    <!DOCTYPE hibernate-mapping PUBLIC 
        '-//Hibernate/Hibernate Mapping DTD 3.0//EN'
        'http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd'>
        
        <hibernate-mapping>
           <class name='com.red.login.vo.User' table='user' catalog='test'>
             <id name='id' type='int'>
               <column name='id'></column>
               <generator class='native'></generator>
             </id>
             <property name='username' type='string'>
               <column name='username' not-null='true'></column>
             </property>
             <property name='password' type='string'>
               <column name='password' not-null='true'></column>
             </property>
           </class>
        
        </hibernate-mapping>

    三.加载并配置Struts框架:

    加载Struts的jar包,添加Struts开发所必须的9个包就行了,另外加一个数据库的驱动包,为了配置要将Struts2 与Spring 集成的需要,添加一个struts2-spring-plugin-2.3.4.1.jar包; 配置web.xml文件:(附源码) 
    <?xml version='1.0' encoding='UTF-8'?>
    <web-app version='2.5' 
        xmlns='http://java.sun.com/xml/ns/javaee' 
        xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' 
        xsi:schemaLocation='http://java.sun.com/xml/ns/javaee 
        http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd'>
        
        <filter>
           <filter-name>struts2</filter-name>
           <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
        </filter>
        
        <filter-mapping>
           <filter-name>struts2</filter-name>
           <url-pattern>/*</url-pattern>
        </filter-mapping>
        
        <listener>
           <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
        </listener>
        
        <context-param>
           <param-name>contextConfigLocation</param-name>
           <param-value>/WEB-INF/classes/applicationContext.xml</param-value>
        </context-param>
        
      <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
      </welcome-file-list>
    </web-app>

         3.  创建struts.properties:

              在项目工程目录src下,新建一个文本文件,在其中添加一条代码:

                  Struts.objectFactory=spring

              并将该文件重命名为struts.properties,建立这个文件的目的是使struts2的类的生成交给Spring完成。

         4.  创建struts.xml:在src目录下直接建立一个xml文件,名为:struts.xml; (附struts.xml的源码)


    <?xml version='1.0' encoding='UTF-8'?>
    <!DOCTYPE struts PUBLIC
        '-//Apache Software Foundation//DTD Struts Configuration 2.0//EN'
        'http://struts.apache.org/dtds/struts-2.0.dtd'>
        
     <struts>
       <package name='struts' extends='struts-default'>
         <action name='login' class='com.red.login.action.LoginAction'>
           <result name='error'>/error.jsp</result>
           <result name='success'>/welcome.jsp</result>
         </action>
       
       </package>
     
     </struts>

    四.实现整合:

    编写Action和DAO的代码,分别实现DAO层(即:BaseDAO.java和接口IUserDAO.java),UserDAO类(UserDAO.java),控制器Action(LoginAction.java),详细解释见源码注释;(附源码)
    package com.red.login.dao;
    
    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    /**
     * 基类:通过session工厂来打开session
     * @author Red
     * Email:it_red@sina.com
     */
    public class BaseDAO {
    
        private SessionFactory sessionFactory;
    
        public SessionFactory getSessionFactory() {
            return sessionFactory;//返回session工厂
        }
    
        public void setSessionFactory(SessionFactory sessionFactory) {
            this.sessionFactory = sessionFactory;
        }
        public Session getSession(){
            Session session=sessionFactory.openSession();//打开session
            return session;
        }
        
    }

    package com.red.login.dao;
    
    import com.red.login.vo.User;
    /**
     * 定义接口
     * @author Red
     * Email:it_red@sina.com
     */
    public interface IUserDAO {
    
        public User validateUser(String username,String password);
    }

    package com.red.login.impl;
    
    import java.util.List;
    
    import org.hibernate.Query;
    import org.hibernate.classic.Session;
    
    import com.red.login.dao.BaseDAO;
    import com.red.login.dao.IUserDAO;
    import com.red.login.vo.User;
    
    /**
     * 具体操作类
     * @author Red
     * Email:it_red@sina.com
     */
    public class UserDAO extends BaseDAO implements IUserDAO{
    
        public User validateUser(String username,String password){//实现接口中的方法
            String sql='from User u where u.username=? and u.password=?';//HQL语句
            Session session=(Session) getSession();
            Query query=session.createQuery(sql);
            query.setParameter(0, username);
            query.setParameter(1, password);
            List users=query.list();
            if(users.size()!=0)
            {
                User user=(User) users.get(0);
                return user;
            }
            session.close();
            return null;
        }
    }

    package com.red.login.action;
    
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.FileSystemXmlApplicationContext;
    
    import com.opensymphony.xwork2.ActionSupport;
    import com.red.login.dao.IUserDAO;
    import com.red.login.vo.User;
    import org.springframework.context.support.*;
    import org.springframework.context.*;
    import com.red.login.impl.*;
    
    /**
     *登录Action 
     * @author Red
     * Email:it_red@sina.com
     */
    
    public class LoginAction extends ActionSupport{
    
        private User user;
    
        @Override
        public String execute() throws Exception {
            // TODO Auto-generated method stub
            boolean validated=false;
            //指明applicationContext的位置
            ApplicationContext context=new FileSystemXmlApplicationContext('file:H:/EB/20140420_SSH_login/src/applicationContext.xml');
            
            IUserDAO userDAO=(IUserDAO)context.getBean('userDAO');
            User u=userDAO.validateUser(user.getUsername(), user.getPassword());
            if(u!=null)
            {
                validated=true;    //登录验证        
            }
            if(validated){
                return SUCCESS;
            }else{
                return ERROR;
            }
        }
    
        public User getUser() {
            return user;
        }
    
        public void setUser(User user) {
            this.user = user;
        }
            
        }
        

        2.  注册组件:在applicationContext.xml中注册以上编写的各个组件:

           <bean id='baseDAO' class='com.red.login.dao.BaseDAO'>

               <property name='sessionFactory' ref='sessionFactory'></property>

           </bean>

           <bean id='userDAO' class='com.red.login.impl.UserDAO' parent='baseDAO'></bean>

           <bean id='login'class='com.red.login.action.LoginAction'></bean>

         <!-- 在bean,id='sessionFactory中'需要自己添加的源码,将User的映射文件添加到配置中--> 

           <property name='mappingResources'>

             <list>

                <value>com/red/login/vo/User.hbm.xml</value>

             </list>

           </property>

          

       3.编写几个测试的JSP就可以直接运行了。

                                                                       ----------------EMAIL:it_red@sina.com

About IT165 - 广告服务 - 隐私声明 - 版权申明 - 免责条款 - 网站地图 - 网友投稿 - 联系方式
本站内容来自于互联网,仅供用于网络技术学习,学习中请遵循相关法律法规