软件编程
位置:首页>> 软件编程>> java编程>> 基于struts2和hibernate实现登录和注册功能

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

作者:王晓东1号  发布时间:2022-03-23 00:27:43 

标签:struts2,hibernate,登录,注册

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

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

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

 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);
 }

}

来源:http://www.cnblogs.com/Donnnnnn/p/5692182.html

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com