• 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

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

  • 相关阅读:
    HDU4372 Count the Buildings
    Luogu4292 WC2010重建计划
    「学习笔记」二项式反演
    微软Power BI 每月功能更新系列——10月Power BI 新功能学习
    用Synoptic Panel自定义基于图形的可视化控件--制作一张剧场售票统计报表
    Power BI十大视觉效果,知多少?
    微软Power BI 每月功能更新系列——3月Power BI 新功能学习
    微软Power BI 每月功能更新系列——4月Power BI 新功能学习
    如何使用DAX函数解决动态图表标题
    如何用DAX实现查看每个月中不同类别排名前一位,以及一个简单的svg案例
  • 原文地址:https://www.cnblogs.com/itred/p/3671948.html
Copyright © 2020-2023  润新知