首页 > 编程 > Java > 正文

基于struts2和hibernate实现登录和注册功能

2019-11-26 11:04:14
字体:
来源:转载
供稿:网友

本文实例为大家分享了struts2和hibernate实现登录和注册功能,供大家参考,具体内容如下

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

 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="提交" />            <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&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);  }  }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持武林网。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表