您的位置:首页 > 编程语言 > Java开发

Struts2和hibernate框架整合实现简单的注册登陆功能

2016-11-30 22:18 826 查看

Struts2和hibernate框架整合实现简单的注册登陆功能

项目结构:



LoginAction.java

package action;
import vo.User;
import vo.UserDAO;
import com.opensymphony.xwork2.ActionSupport;

public class LoginAction extends ActionSupport {
/**
*
*/
private static final long serialVersionUID = 1L;
private User user;
public User getUser() {
return user;}
public void setUser(User user) {
this.user = user;}
public String execute()throws Exception{
if((user=new UserDAO().LoginCheck(user.getUsername(), user.getPassword(),user.getRole()))==null){
return ERROR;
}
if(user.getRole()=="1"){
return "admin";
}else{
return SUCCESS;}
}
}


RegistAction.java

package action;

import vo.User;
import vo.UserDAO;

import com.opensymphony.xwork2.ActionSupport;

public class RegistAction extends ActionSupport {

/**
*
*/
private static final long serialVersionUID = 1L;
private User user=null;
private String repassword;
public String getRepassword() {
return repassword;
}
public void setRepassword(String repassword) {
this.repassword = repassword;
}
//UserDAO userDao=new UserDAO();
@Override
public String execute() throws Exception {
User selectUser=new User();
if((selectUser=new UserDAO().selectRegist(user.getUsername()))==null){
User u=new User();
u.setUsername(user.getUsername());
u.setPassword(user.getPassword());
new UserDAO().saveRegist(u);
return "success";
}else{
return "error";
}

}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}


LoginAction-validation.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.2//EN" "http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd">
<validators>
<field name="user.username">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>用户名不能为空</message>
</field-validator>
</field>
<field name="user.password">
<field-validator type="regex">
<param name="expression"><![CDATA[(\w{4,8})]]></param>
<message>密码长度必须在4~8之间</message>
</field-validator>
</field>
</validators>


RegistAction-validation.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.2//EN" "http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd">
<validators>
<field name="user.username">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>用户名不能为空</message>
</field-validator>
</field>
<field name="user.password">
<field-validator type="regex">
<param name="expression"><![CDATA[(\w{4,8})]]></param>
<message>密码长度必须在4~8之间</message>
</field-validator>
</field>
<field name="repassword">
<field-validator type="fieldexpression">
<param name="expression"><![CDATA[(repassword==user.password)]]></param>
<message>两次输入的密码要一致!</message>
</field-validator>
</field>
</validators>


HibernateSessionFactory.java

package util;

import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;

/**
* Configures and provides access to Hibernate sessions, tied to the
* current thread of execution.  Follows the Thread Local Session
* pattern, see {@link http://hibernate.org/42.html }.
*/
public class HibernateSessionFactory {

/**
* Location of hibernate.cfg.xml file.
* Location should be on the classpath as Hibernate uses
* #resourceAsStream style lookup for its configuration file.
* The default classpath location of the hibernate config file is
* in the default package. Use #setConfigFile() to update
* the location of the configuration file for the current session.
*/
private static final ThreadLocal<Session> threadLocal = new ThreadLocal<Session>();
private static org.hibernate.SessionFactory sessionFactory;

private static Configuration configuration = new Configuration();
private static ServiceRegistry serviceRegistry;

static {
try {
configuration.configure();
serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();
sessionFactory = configuration.buildSessionFactory(serviceRegistry);
} catch (Exception e) {
System.err.println("%%%% Error Creating SessionFactory %%%%");
e.printStackTrace();
}
}
private HibernateSessionFactory() {
}

/**
* Returns the ThreadLocal Session instance.  Lazy initialize
* the <code>SessionFactory</code> if needed.
*
*  @return Session
*  @throws HibernateException
*/
public static Session getSession() throws HibernateException {
Session session = (Session) threadLocal.get();

if (session == null || !session.isOpen()) {
if (sessionFactory == null) {
rebuildSessionFactory();
}
session = (sessionFactory != null) ? sessionFactory.openSession()
: null;
threadLocal.set(session);
}

return session;
}

/**
*  Rebuild hibernate session factory
*
*/
public static void rebuildSessionFactory() {
try {
configuration.configure();
serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();
sessionFactory = configuration.buildSessionFactory(serviceRegistry);
} catch (Exception e) {
System.err.println("%%%% Error Creating SessionFactory %%%%");
e.printStackTrace();
}
}

/**
*  Close the single hibernate session instance.
*
*  @throws HibernateException
*/
public static void closeSession() throws HibernateException {
Session session = (Session) threadLocal.get();
threadLocal.set(null);

if (session != null) {
session.close();
}
}

/**
*  return session factory
*
*/
public static org.hibernate.SessionFactory getSessionFactory() {
return sessionFactory;
}
/**
*  return hibernate configuration
*
*/
public static Configuration getConfiguration() {
return configuration;
}

}


AbstractUser.java

package vo;

/**
* AbstractUser entity provides the base persistence definition of the User
* entity. @author MyEclipse Persistence Tools
*/

public abstract class AbstractUser implements java.io.Serializable {

// Fields

private Integer id;
private String username;
private String password;
private String role;

// Constructors

/** default constructor */
public AbstractUser() {
}

/** full constructor */
public AbstractUser(String username, String password,String role) {
this.username = username;
this.password = password;
this.role=role;
}

// Property accessors

public Integer getId() {
return this.id;
}

public void setId(Integer id) {
this.id = id;
}

public String getUsername() {
return this.username;
}

public void setUsername(String username) {
this.username = username;
}

public String getPassword() {
return this.password;
}

public void setPassword(String password) {
this.password = password;
}
public String getRole() {
return role;
}

public void setRole(String role) {
this.role = role;
}
}


BaseHibernateDAO.java

package vo;

import org.hibernate.Session;
import util.HibernateSessionFactory;

/**
* Data access object (DAO) for domain model
* @author MyEclipse Persistence Tools
*/
public class BaseHibernateDAO implements IBaseHibernateDAO {

public Session getSession() {
return HibernateSessionFactory.getSession();
}

}


IBaseHibernateDAO.java

package vo;

import org.hibernate.Session;

/**
* Data access interface for domain model
* @author MyEclipse Persistence Tools
*/
public interface IBaseHibernateDAO {
public Session getSession();
}


User.java

package vo;

/**
* User entity. @author MyEclipse Persistence Tools
*/
public class User extends AbstractUser implements java.io.Serializable {

// Constructors

/** default constructor */
public User() {
}

/** full constructor */
public User(String username, String password,String role) {
super(username, password,role);
}

}


UserDAO.java

package vo;

import java.util.Iterator;
import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import util.HibernateSessionFactory;

/**
* A data access object (DAO) providing persistence and search support for User
* entities. Transaction control of the save(), update() and delete() operations
* can directly support Spring container-managed transactions or they can be
* augmented to handle user-managed Spring transactions. Each of these methods
* provides additional information for how to configure it for the desired type
* of transaction control.
*
* @see vo.User
* @author MyEclipse Persistence Tools
*/
public class UserDAO extends BaseHibernateDAO {
private static final Logger log = LoggerFactory.getLogger(UserDAO.class);
// property constants
public static final String USERNAME = "username";
public static final String PASSWORD = "password";

/**
* @param username
* @return 检查用户名是否存在
*/
public User selectRegist(String username){
try{
Session session=getSession();
Query query=session.createQuery("from User where username=?");
query.setParameter(1, username);
List list=query.list();
User user = null;

Iterator it=list.iterator();

while(it.hasNext()){

user=(User)it.next();
System.out.println(user.getUsername());

}
return user;
}catch(Exception e){
e.printStackTrace();
return null;
}
}
/**
* @param username
* @param password
* @return 登陆检查用户名和密码,确认身份
*/
public User LoginCheck(String username,String password,String role){
System.out.println("this is LoginCheck method !");
log.debug("LoginChecking User instance");
try {
Session session = getSession();
/*Transaction tran = session.beginTransaction();*/
Query queryObject = session.createQuery("from User where username=? and password=? and role=?");
System.out.println("pass1");
queryObject.setString(0, username);
queryObject.setString(1,password);
queryObject.setString(2, role);
List list=queryObject.list();
/*tran.commit();*/
System.out.println("pass2");
User user = null;

Iterator it=list.iterator();

while(it.hasNext()){

user=(User)it.next();
//System.out.println(user.getUsername());

}

return user;

} catch (RuntimeException re) {
log.error("find by property name failed", re);
throw re;

}

}
/**
* @param user
* 进行注册,向数据库插入数据
*/
public void saveRegist(User user){
Session session = null ;
Transaction tx=null;
try{
session = getSession();
tx=session.beginTransaction();
session.save(user);
tx.commit();
}catch(Exception e){
e.printStackTrace();
System.out.println("提交数据出错了");
if(tx!=null)tx.rollback();
}finally{
session.close();
}

}
}


User.hbm.xml

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<!--
Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
<class name="vo.User" table="user" catalog="bookmanage">
<id name="id" type="java.lang.Integer">
<column name="Id" />
<generator class="identity" />
</id>
<property name="username" type="java.lang.String">
<column name="username" not-null="true" />
</property>
<property name="password" type="java.lang.String">
<column name="password" not-null="true" />
</property>
<property name="role" type="java.lang.String">
<column name="role" not-null="true" />
</property>
</class>
</hibernate-mapping>


hibernate.cfg.xml

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<!-- Generated by MyEclipse Hibernate Tools.                   -->
<hibernate-configuration>

<session-factory>
<property name="dialect">
org.hibernate.dialect.MySQLDialect
</property>
<property name="connection.url">
jdbc:mysql://localhost:3306/bookManage
</property>
<property name="connection.username">root</property>
<property name="connection.password">1011</property>
<property name="connection.driver_class">
com.mysql.jdbc.Driver
</property>
<property name="myeclipse.connection.profile">
bookDriver
</property>
<mapping resource="vo/User.hbm.xml" />

</session-factory>

</hibernate-configuration>


struts.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<package name="mypackage" extends="struts-default" namespace="/">
<action name="login" class="action.LoginAction">
<result name="success">/success.jsp</result>
<result name="error">/error.jsp</result>
<result name="admin">/admin.jsp</result>
<result name="input">/index.jsp</result>
</action>
<action name="regist" class="action.RegistAction">
<result name="success">/success.jsp</result>
<result name="error">/error.jsp</result>
<result name="input">/regist.jsp</result>
</action>
</package>
</struts>


index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>login</title>
</head>

<body>
<s:form action="login" method="post">
<s:radio list="#{'1':'admin','0':'user' }" name="user.role" label="role" value="0" />
<s:textfield name="user.username" label="用户名"/>
<s:password name="user.password" label="密码"/>
<s:submit value="登陆"/>
<a name="regist" id="loginRegist" href="regist.jsp">regist</a>
</s:form>
</body>
</html>


regist.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
<title>regist</title>
</head>

<body>
<s:form action="regist">
<s:textfield name="user.username" label="用户名"/>
<s:password name="user.password" label="密码"/>
<s:password name="repassword" label="确认密码"/>
<s:submit value="注册"/>
</s:form>
</body>
</html>


需要注意的是引入myeclipse自带的struts2和hibernate时,antlr-2.7.7.jar包重复,运行时会报错,本例的用法是直接将struts2的类库导出去,将struts用到的几个jar包铐入工程,放置在/linda/WebRoot/WEB-INF/lib目录下。(如果没有不清楚如何配置struts和hibernate,可以看一下这篇博客:http://blog.csdn.net/weixin_36380516/article/details/53822344
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息