Struts+Hibernate+Spring實現用戶登陸功能

      經過登陸案例實現三大框架之間的整合,登陸功能是任何系統和軟件必不可少的一個模塊,然而經過這個模塊來認識這些複雜的框架技術,理解數據流向和整個設計思路是至關容易的。只有在掌握了這些小模塊的應用後,才能輕鬆的去研究和設計出更有創意的,更加嚴密的系統。java

      本人經過學習,實現了這個小功能,如今將實現思想和過程總結以下。但願各位大神朋友多多審查,有什麼不到位的地方,請經過郵件告訴我(it_red@sina.com),在此表示感謝;新手朋友,我相信這個例子會是你進入框架領域的第一個完整的DEMO。當你部署成功後,你必定會至關自豪的,同時也有了學習更深知識的信心,若是你還有什麼不明白的或者須要該DEMO的源碼,請留言或者發郵件告訴我,咱們共同進步。mysql

    注意搭建這個案例的框架版本:struts 2.3.4     Hibernate 3.0      Spring 3.1.1 web

    數據庫設計:id int;username varchar(11);password varchar(11)spring

一.首先爲這個demo添加spring核心容器:sql

  1. 鼠標右擊項目,[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>
View Code

 

 

二.添加Hibernate並並持久化User表:apache

  1. 鼠標右擊項目,[MyEclipse]---[Add Hibernate Capabilities…],版本選擇Hibernate3.3,方框選擇前兩個,而後就是下一步,選擇用Spring的配置文件進行SessionFactory的配置;這樣生成的文件中就沒有了hibernate.cfg.xml,而是直接將配置寫入了applicationContext.xml這個文件中;

     2.根據提示填寫數據庫驅動的相關數據:Driver,url,class,Username,Password等信息;session

     3. 提示是否建立SessionFactory類,因爲這個程序Spring注入sessionFactory,因此不用建立,取消方框中的對勾選項;app

     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;
    }
    
    
}
View Code
<?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>
View Code

 

 

三.加載並配置Struts框架:

  1. 加載Struts的jar包,添加Struts開發所必須的9個包就好了,另外加一個數據庫的驅動包,爲了配置要將Struts2 與Spring 集成的須要,添加一個struts2-spring-plugin-2.3.4.1.jar包;
  2. 配置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>
View Code

     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>
View Code

四.實現整合:

  1. 編寫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;
    }
    
}
View Code
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);
}
View Code
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;
    }
}
View Code

 

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;
    }
        
    }
    
View Code

 

 

    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

相關文章
相關標籤/搜索