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

本文实例为大家分享了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);

}

}

以上是 基于struts2和hibernate实现登录和注册功能 的全部内容, 来源链接: utcz.com/p/215389.html

回到顶部