hibernate+struts登录注册如何实现?hibernate+struts登录注册实现操作

Hibernate 框架具有良好的可移植性,它支持几乎所有主流的关系型数据库,开发人员合理使用的话,能够帮助其提高开发效率,那hibernate+struts登录注册如何实现?下面来我们就来给大家讲解一下hibernate+struts登录注册实现操作。

hibernate+struts登录注册.jpg

1、该项目使用MySQL数据库,数据库名为test,表名info,如图所示:

hibernate+struts登录注册如何实现?hibernate+struts登录注册实现操作.jpg

2、配置web.xml(Struts2使用)

<?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.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
  
  
 <welcome-file-list>
  <welcome-file>index.jsp</welcome-file>
 </welcome-file-list>
</web-app>

3、编写视图组件(JSP页面)

(1)登录页面login.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
  pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title><s:text name="基于SH的登录注册系统" /></title>
</head>
<body bgcolor="#CCCCFF">
  <s:form action="login" method="post">
    <br><br><br><br><br><br>
    <table border="1" align="center" bgcolor="AABBCCDD">
      <tr>
        <td>
          <s:textfield name="userName" label="用户名字" size="16" />
        </td>
      </tr>
      <tr>
        <td>
          <s:password name="password" label="用户密码" size="18" />
        </td>
      </tr>
      <tr>
        <td colspan="2" align="center">
          <s:submit value="登录" />
        </td>
      </tr>
      <tr>
        <td colspan="2" align="center">
          <s:a href="http://localhost:8080/hibernate01/register.jsp">注册</s:a>
        </td>
      </tr>
  
    </table>
  
  </s:form>
  
  
  
</body>
</html>

(2)登陆成功页面success.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
  pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body bgcolor="#CCCCFF">
  <hr>
  <table>
    <tr>
      <td>
        欢迎<s:property value="userName"/>,登陆成功!
      </td>
    </tr>
  
  </table>
  <hr>
  
</body>
</html>

(3)注册页面register.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
  pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body bgcolor="#CCCCFF">
  <s:form action="register" method="post">
    <br><br><br><br><br><br>
    <table border="1" align="center" bgcolor="AABBCCDD">
      <tr>
        <td>
          <s:textfield name="userName" label="用户名字" size="16" />
        </td>
      </tr>
      <tr>
        <td>
          <s:password name="password1" label="用户密码" size="18" />
        </td>
      </tr>
      <tr>
        <td>
          <s:password name="password2" label="再次输入密码" size="18" />
        </td>
      </tr>
      <tr>
        <td colspan="2" align="center">
          <input type="submit" value="提交" />&nbsp;&nbsp;
          <input type="reset" value="清空" />
        </td>
      </tr>
      <tr>
        <td colspan="2" align="center">
          <s:a href="http://localhost:8080/hibernate01/login.jsp">返回</s:a>
        </td>
      </tr>
  
    </table>
  
  </s:form>
  
</body>
</html>

4、业务控制器Action

(1)登录页面对应的业务控制器LoginAction.java

其中,重写valiadate()方法,进行手工验证

package loginRegisterAction;
import java.util.List;
import loginRegisterDao.LoginRegisterInfo;
import PO.UserInfoPO;
import com.opensymphony.xwork2.ActionSupport;
public class LoginAction extends ActionSupport
{
    private String userName;
    private String password;
    private String message = "error";
    private List list;
    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;
    }
    public void validate()
    {
        if (this.getUserName() == null || this.getUserName()
            .length() == 0)
        {
            addFieldError("userName", "用户名不能为空!");
        }
        else
        {
            LoginRegisterInfo info = new LoginRegisterInfo();
            list = info.queryInfo("userName", this.getUserName());
            if (list.size() == 0)
            {
                addFieldError("userName", "该用户尚未注册");
            }
            else
            {
                UserInfoPO ui = new UserInfoPO();
                for (int i = 0; i < list.size(); i++)
                {
                    ui = (UserInfoPO) list.get(i);
                    if (this.getUserName()
                        .equals(ui.getUserName()))
                    {
                        if (ui.getPassword()
                            .equals(this.getPassword()))
                        {
                            message = SUCCESS;
                        }
                        else
                        {
                            addFieldError("password", "登录密码不正确");
                        }
                    }
                }
            }
        }
    }
    public String execute() throws Exception
    {
        return message;
    }
}

(2)注册页面对应的业务控制器RegisterAction.java

package loginRegisterAction;
import java.util.List;
import loginRegisterDao.LoginRegisterInfo;
import PO.UserInfoPO;
import com.opensymphony.xwork2.ActionSupport;
public class RegisterAction extends ActionSupport
{
    private String userName;
    private String password1;
    private String password2;
    private String mess = ERROR; //ERROR等同于"error"
    private List list;
    public String getUserName()
    {
        return userName;
    }
    public void setUserName(String userName)
    {
        this.userName = userName;
    }
    public String getPassword1()
    {
        return password1;
    }
    public void setPassword1(String password1)
    {
        this.password1 = password1;
    }
    public String getPassword2()
    {
        return password2;
    }
    public void setPassword2(String password2)
    {
        this.password2 = password2;
    }
    public void validate()
    {
        if (this.getUserName() == null || this.getUserName()
            .length() == 0)
        {
            addFieldError("userName", "用户名不能为空!");
        }
        else
        {
            LoginRegisterInfo info = new LoginRegisterInfo();
            list = info.queryInfo("userName", this.getUserName());
            UserInfoPO ui = new UserInfoPO();
            for (int i = 0; i < list.size(); i++)
            {
                ui = (UserInfoPO) list.get(i);
                if (ui.getUserName()
                    .equals(this.getUserName()))
                {
                    addFieldError("userName", "用户名已存在!");
                }
            }
        }
        if (this.getPassword1() == null || this.getPassword1()
            .length() == 0)
        {
            addFieldError("password1", "登录密码不许为空!");
        }
        else if (this.getPassword2() == null || this.getPassword2()
            .length() == 0)
        {
            addFieldError("password2", "重复密码不许为空!");
        }
        else if (!this.getPassword1()
            .equals(this.getPassword2()))
        {
            addFieldError("password2", "两次密码不一致!");
        }
    }
    public UserInfoPO userInfo()
    {
        UserInfoPO info = new UserInfoPO();
        info.setUserName(this.getUserName());
        info.setPassword(this.getPassword1());
        return info;
    }
    public String execute() throws Exception
    {
        LoginRegisterInfo lr = new LoginRegisterInfo();
        String ri = lr.saveInfo(userInfo());
        if (ri.equals("success"))
        {
            mess = SUCCESS;
        }
        return mess;
    }
}

5、在struts.xml中配置Action

<!DOCTYPE struts PUBLIC
  "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
  "http://struts.apache.org/dtds/struts-2.0.dtd">
 
<struts>
  <package name="default" extends="struts-default">
    <action name="register" class="loginRegisterAction.RegisterAction">
      <result name="success">/login.jsp</result>
      <result name="input">/register.jsp</result>
      <result name="error">/register.jsp</result>
    </action>
    <action name="login" class="loginRegisterAction.LoginAction">
      <result name="success">/success.jsp</result>
      <result name="input">/login.jsp</result>
      <result name="error">/login.jsp</result>
    </action>
  </package>
</struts>

6、Hibernate的配置文件

使用Hibernate需要通过Hibernate的配置文件加载数据库驱动以及与数据建立连接,配置文件为hibernate.cfg.xml

<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
  <session-factory>
    <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
    <property name="connection.url">jdbc:mysql://localhost:3306/test?useUnicode=true&amp;characterEncoding=utf-8</property>
    <property name="connection.username">root</property>
    <property name="connection.password"></property>
    <!-- 指定数据库的方言 -->
    <property name="dialect">org.hibernate.dialect.MySQL5Dialect</property>
    <!-- 加入映射文件 -->
    <mapping resource="PO/UserInfoPO.hbm.xml"/>
    
  </session-factory>
</hibernate-configuration>

7、加载上面Hibernate配置文件的类(HIbernateSessionFactory.java)

package addHibernateFile;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class HibernateSessionFactory
{
    private SessionFactory sessionFactory;
    public HibernateSessionFactory()
    {}
    public SessionFactory config()
    {
        try
        {
            Configuration configuration = new Configuration();
            Configuration configure = configuration.configure("hibernate.cfg.xml");
            return configure.buildSessionFactory();
        }
        catch (Exception e)
        {
            e.getMessage();
            return null;
        }
    }
    public Session getSession()
    {
        sessionFactory = config();
        return sessionFactory.openSession();
    }
}

8、PO对象以及对应的映射文件(在同一个包下)

(1)PO对象的类UserInfoPO.Java

package PO;
/*
 * PO对象(持久化对象)的类,与数据库相对应
 */
public class UserInfoPO
{
    private int id;
    private String userName;
    private String password;
    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;
    }
}

(2) PO对应的映射文件UserInfoPO.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>
  <!-- 配置PO对象与数据库中表的对应关系使用class元素,name配置PO对象对应的类,
     table配置该PO对象在数据库中对应的表名,catalog配置表对应的数据库名 -->
  <class name="PO.UserInfoPO" table="info" catalog="test">
    <!-- id元素配置PO对象与数据库中表的对应id字段,name配置PO对象对应的属性,type指定类型
       generator元素将主键自动加入序列 -->
    <id name="id" type="int">
      <column name="id"/>
      <generator class="assigned" />
    </id>
    
    <property name="userName" type="string">
      <column name="userName" length="30" not-null="true" />
    </property>
    
    <property name="password" type="string">
      <column name="password" length="30" not-null="true" />
    </property>
  
  </class>
</hibernate-mapping>

9、完成登录和注册业务功能

将登录和注册业务功能封装到类LoginRegisterInfo(JavaBean)中

数据库操作类LoginRegisterInfo.java:

package loginRegisterDao;
/*
 * 登录和注册业务功能,封装到这个JavaBean
 */
import java.util.List;
import javax.swing.JOptionPane;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import PO.UserInfoPO;
import addHibernateFile.HibernateSessionFactory;
public class LoginRegisterInfo {
  private Session session;
  private Transaction transaction;
  private Query query;
  HibernateSessionFactory getSession;
  
  public LoginRegisterInfo(){
  }
  
  public String saveInfo(UserInfoPO info){
    String mess="error";
    getSession=new HibernateSessionFactory();
    session=getSession.getSession();
    try{
      transaction=session.beginTransaction();
      session.save(info);
      transaction.commit();
      mess="success";
      return mess;
    }catch(Exception e){
      message("RegisterInfo.error:"+e);
      e.printStackTrace();
      return null;
    }
  }
  
  public List queryInfo(String type,Object value){
    getSession=new HibernateSessionFactory();
    session=getSession.getSession();
    try{
      String hqlsql="from UserInfoPO as u where u.userName=?";
      query=session.createQuery(hqlsql);
      query.setParameter(0, value);
      List list=query.list();
      transaction=session.beginTransaction();
      transaction.commit();
      return list;
    }catch(Exception e){
      message("LoginRegisterInfo类中有异常,异常为::"+e);
      e.printStackTrace();
      return null;
      }
  }
  
  
  public void message(String mess){
    int type=JOptionPane.YES_NO_OPTION;
    String title="提示信息";
    JOptionPane.showMessageDialog(null, mess,title,type);
  }
  
}

这样我们就实现了hibernate+struts登录注册操作,大家有感兴趣的话,可以自己试着开发一下哦!最后大家如果想要了解更多java架构师知识,敬请关注奇Q工具网。

推荐阅读:

java自学书籍有哪些?java自学书籍推荐

qt乱码怎么设置?qt背景色如何修改?

java和python哪个好?哪个更容易学?