Struts2整合Hibernate3实现用户登录功能

         所用技术:struts2 ,hibernate,jsp,mysql

     本DEMO仅仅实现用户登录功能,采用MVC思想,自己也觉得相对是比较简单,比较容易理解数据流向的一个例子,通过整合这个过程,能够清晰的看出整个项目工程的数据流向和设计思想,是新手对于整合struts2和hibernate的最好的例子。

     现将整合思想,过程,代码整理如下,如果新手看了还是有不明白或者需要源码,本人乐意效劳和分享源码。

     JSP作为视图层V,显示登录,登录成功,失败页面;Struts2作为控制层C处理页面跳转;Hibernate用作数据模型M,它与前台程序的接口以DAO形式提供。

一.数据库设计:

  1.创建数据库test   表名为:user

          id  int  not null 自增

          username   varchar(11) not null

          password   varchar(11 not null)

二.M层开发:   

  2.Hibernate基本配置:

     为Web项目添加Hibernate的相关jar包,hibernate.cfg.xml,并应用右击项目文件,myeclise,add hibernate …将建立sessionfacotry.这样就不用再自己去写了,实现了高效开发。下为hibernate.cfg.xml:

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
          "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
          "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<!-- Generated by MyEclipse Hibernate Tools.                   -->
<hibernate-configuration>

    <session-factory>
        <property name="connection.username">root</property>
        <property name="connection.url">jdbc:mysql:///test</property>
        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
        <property name="connection.password">123456</property>
        <property name="connection.driver_class">org.gjt.mm.mysql.Driver</property>
        
        <!-- 在控制台显示SQL语句 -->    
        <property name="show_sql">true</property>

        <mapping resource="com/red/vo/User.hbm.xml" />
    
    </session-factory>

</hibernate-configuration>
View Code

 

  3.生成POJO(Plain Old Java Object,简单的Java对象,通常也称为VO[ Value  Object ]对象,值对象)对象类 ,POJO是一种特殊的Java类,其中有一些属性及其对应的getter/setter方法,不允许有业务方法。将User.hbm.xml配置文件一定要放在和User实体bean相同的文件目录下。(附User.hbm.xml代码)

<?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 package="com.red.vo">

    <class name="User" table="user">
        <id name="id" column="id" type="integer">
            <generator class="identity"/>
        </id>
 
        <property name="username" column="username" type="string" />
        <property name="password" column="password" type="string" />
    </class>
    
</hibernate-mapping>
View Code

 4.在src中另外建立两个包,分别放DAO接口IUserDAO及其实现类UserDAO。(附IUserDAO ,UserDAO  源码)

UserDAO.java

package com.red.dao.impl;

import java.util.List;

import javax.persistence.Query;

import com.red.dao.IUserDAO;
import com.red.factory.HibernateSessionFactory;
import com.red.vo.User;

/**
 * 实现接口
 * @author Red
 *
 */
public class UserDAO  implements IUserDAO{
    public User validateUser(String username,String password){
        String sql="from User u where u.username=? and u.password=?";
        org.hibernate.Query query=HibernateSessionFactory.getSession().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;
        }
        HibernateSessionFactory.closeSession();
        return null;
    }
}
View Code

IUserDAO.java

package com.red.dao;
import com.red.vo.User;

/**
 * 接口
 * @author Red
 *
 */
public interface IUserDAO {

    public User validateUser(String username,String password);
}
View Code

三.C层开发: 

  5.加载,配置Struts2:

     将jar包复制到lib目录下,并且将mysql的驱动包也放进去,修改web.xml的代码。(附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>
    <display-name></display-name>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>
View Code

  6.实现Action:

     在src中新建包action,创建类LoginAction类:(附代码LoginAction.java)

package com.red.action;

import com.opensymphony.xwork2.ActionSupport;
import com.red.dao.IUserDAO;
import com.red.dao.impl.UserDAO;
import com.red.vo.User;

/**
 * 用户登录action
 * @author Red
 *
 */
public class LoginAction extends ActionSupport{
    private String username;
    private String password;
    //处理用户请求的execute方法
    public String execute() throws Exception{
        boolean validated=false;//验证成功标识
        IUserDAO userDAO=new UserDAO();
        User user=userDAO.validateUser(getUsername(),getPassword());
        
        if(user!=null)
        {
          validated=true;        
        }
        if(validated)
        {
           //验证成功返回字符串“success”
            return SUCCESS;
        }
        else
        {
            //验证失败返回字符串“error”
            return ERROR;
        }
    }
    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

 7.在struts.xml 中配置action:(附代码:struts.xml)

<!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.action.LoginAction">
         <result name="success">/welcome.jsp</result>
         <result name="error">/error.jsp</result>
       </action>
     </package>
   </struts>
View Code

四.V层开发:

      就是写当个JSP文件。源码序列分别是:index.jsp;welcome.jsp;error.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>login</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>
    <form action="login.action" method="post">
      用户名:<input type="text" name="username"/><br/>
      密码:<input type="password" name="password"/><br/>
      <input type="submit" value="登 录">
    </form>
  </body>
</html>
View Code

 

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>welcome</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>
   <s:property value="username"/>,您好!欢迎光临RED‘S HOME.
  </body>
</html>
View Code

 

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>error</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>
    登录失败! <br>
  </body>
</html>
View Code

 

    欢迎大神拍砖,新手朋友:我们可以一起学习学习呃。

 

posted on 2014-04-17 21:19  itRed  阅读(4014)  评论(18编辑  收藏  举报

导航