struts2+hibernate实现简单登录与注册

最近在自学ssh,以前开发一直用的普通的MVC模式进行开发的,接触了这几个框架后感触很多,学着做了一个简单的登录注册的模块,运用的是struts2和hibernate来实现的。
1.(1)首先,运用了struts2提供的标签,struts2总共提供的标签大体有三类,一种是逻辑控制类标签:if elseif等,一种是表单的标签,这类事最常用的,最后就是非表单的标签如div等等。
(2)创建需要的jsp页面:
1>index.jsp

<%@ page contentType="text/html;charset=GB2312"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
<title>登录</title>
</head>

<body>
<s:actionerror/>
<s:property value="message"/>
<a href="register.jsp">注册</a>
<hr/>
请您登录:
<s:form validate="true" action="Login" >
<s:textfield name="username" label="用户名"/>
<s:password name="password" label="密码"/>
<s:submit value="提交"/>
</s:form>
<hr/>
</body>
</html>

其中,action指向了对应action的定义,而在以前的项目当中,我们会将此定义为所要post或get的servlet上,这个表单在提交的时候是可以进行验证的,并且如果验证不通过,还可以显示出相应的message信息。
2>register.jsp注册页面:

<%@ page contentType="text/html;charset=GB2312"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
<title>
注册
</title>
</head>
<body>
<s:property value="message"/>
<a href="index.jsp">返回登录</a>
<hr/>
请您注册:
<div style="color:red;">
<s:fielderror/>
<s:actionerror/>
</div>
<s:form action="Register" validate="true">
<s:textfield name="username" label="用户名"/>
<s:password name="password" label="密码"/>
<s:submit value="提交"/>
</s:form>
<hr/>
</body>
</html>



3>success.jsp成功页面

<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<s:property value="message"/>
欢迎

2.(1)创建模型组件
因为需要通过hibernate连接数据库持久层。引入DAO(Data Access Object数据访问对象),是一种抽象了数据源,并提供对数据源的透明访问的设计。下面定义UserDAO接口,使用Hibernate访问数据库用户数据的连接访问实现。
IUserDAO.java

package dao;
import dao.hibernate.User;
public interface IUserDAO{
boolean isValidUser(String username,String password);
User save(User transientInstance);
}

(2)User.java

package dao.hibernate;

public class User {
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;
}

}


(3)对接口的实做UserDAOHibernate.java

package dao.hibernate;

import java.io.File;
import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hibernate.*;
import org.hibernate.cfg.*;
import dao.IUserDAO;
import dao.hibernate.User;

public class UserDAOHibernate implements IUserDAO {
private static final Log log = LogFactory.getLog(UserDAOHibernate.class);
SessionFactory sf = new Configuration().configure(
new File("E:\\web\\struts_login\\src\\hibernate.cfg.xml"))
.buildSessionFactory();

public boolean isValidUser(String name, String password) {
log.debug("in UserDAO IsValid");
try {

Session session = sf.openSession();
String hql = "from User as u where u.username=? and u.password=?";
Query query = session.createQuery(hql);
query.setString(0, name);
query.setString(1, password);
List userList = query.list();
if (userList.size() > 0) {

session.close();
return true;
}

session.close();
return false;

} catch (RuntimeException e) {
log.error("isValidUser failed", e);
throw e;
}
}

public User save(User transientInstance) {
log.debug("saving user instance");
Session session = sf.openSession();
Transaction tran = session.beginTransaction();
try {
if (findByName(transientInstance.getUsername()) > 0) {

return null;
}
session.save(transientInstance);
session.flush();
tran.commit();
log.debug("save successful");
session.close();
return transientInstance;
} catch (RuntimeException e) {
tran.rollback();
log.error("save failed", e);
throw e;
}
}

public int findByName(String name) {
Session session = sf.openSession();
String hql = "from User as u where u.username=?";
Query query = session.createQuery(hql);
query.setParameter(0, name);
List userlist = query.list();
if (userlist.size() > 0) {
return 1;
}
return 0;
}

}


(4)User.hbm.xml
<?xml version="1.0" encoding="GB2312"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"Http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="dao.hibernate.User" table="myusertable">
<id name="id" type="integer">
<column name="id"/>
<generator class="native">
</generator>
</id>
<property name="username" type="string">
<column name="username" length="50" not-null="false"/>
</property>
<property name="password" type="string">
<column name="password" length="50" not-null="false"/>
</property>
</class>
</hibernate-mapping>

(5)Hibernate.cfg.xml

<?xml version="1.0" encoding="GB2312"?>
<!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.microsoft.jdbc.sqlserver.SQLServerDriver</property>
<property name="connection.url">jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=mypro</property>
<property name="connection.username">sa</property>
<property name="connection.password">sa</property>
<property name="connection.pool_size">1</property>
<property name="dialect">org.hibernate.dialect.SQLServerDialect </property>
<property name="current_session_context_class">thread</property>
<property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
<mapping resource="dao/hibernate/User.hbm.xml"/>
</session-factory>
</hibernate-configuration>

3.创建控制器的组件
(1)首先配置struts.xml中的Action映射

<?xml version="1.0" encoding="GB2312"?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>

<include file="struts-default.xml"/>
<package name="struts2" extends="struts-default">

<global-results>
<result name="login" type="redirect">index.jsp</result>
</global-results>
<action name="Login" class="struts2.LoginAction">
<result name="input">index.jsp</result>
<result name="success">success.jsp</result>
</action>
<action name="Register" class="struts2.RegisterAction">
<result name="input">register.jsp</result>
<result name="success">index.jsp</result>
</action>

</package>
</struts>

(2)控制类LoginAction.java

package struts2;

import dao.IUserDAO;
import dao.hibernate.UserDAOHibernate;

public class LoginAction {

private String username;
private String password;
IUserDAO userDAO=new UserDAOHibernate();
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 String execute()throws Exception{
if(isInvalid(username,password)){
return "success";
}else{
return "input";
}
}
private boolean isInvalid(String username,String password){
return userDAO.isValidUser(username, password);
}

}


(3)控制类RegisterAction.java

package struts2;
import dao.IUserDAO;
import dao.hibernate.User;
import dao.hibernate.UserDAOHibernate;
public class RegisterAction {
private String username;
private String password;
private String confirmpassword;
private String message;
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
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 String getConfirmpassword() {
return confirmpassword;
}
public void setConfirmpassword(String confirmpassword) {
this.confirmpassword = confirmpassword;
}
IUserDAO userDAO=new UserDAOHibernate();
public String execute() throws Exception{
User user=new User();
user.setUsername(username);
user.setPassword(password);
if(userDAO.save(user)==null){
message="你好,用户名:"+username+"已经注册,请重新选择用户名!";
return "input";
}
message="注册成功!";
return "success";
}

}


(4)对登录以及注册的验证:
1>LoginAction-validation.xml

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">

<validators>
<field name="username">
<field-validator type="requiredstring">
<message>请输入用户名!</message>
</field-validator>
</field>
<field name="password">
<field-validator type="requiredstring">
<message>请输入密码!</message>
</field-validator>
<!--限制字符串长短验证-->
<field-validator type="stringlength">
<param name="trim">true</param>
<param name="minLength">4</param>
<param name="maxLength">10</param>
<message>请设置4-10位长度的密码!</message>
</field-validator>
</field>
</validators>



2>RegisterAction-validation.xml

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">

<validators>
<field name="username">
<field-validator type="requiredstring">
<message>请输入用户名!</message><!--出错提示信息-->
</field-validator>
</field>
<field name="password">
<field-validator type="requiredstring">
<message>请输入密码!</message><!--出错提示信息-->
</field-validator>
<!--限制字符串长短验证-->
<field-validator type="stringlength">
<param name="trim">true</param><!--是否去除空格-->
<param name="minLength">4</param><!--最小长度-->
<param name="maxLength">10</param><!--最大长度-->
<message>请设置4-10位长度的密码!</message><!--出错提示信息-->
</field-validator>
</field>
<validators>

4.做到这里,下一步应该是引入拦截器。struts2提供了AOP的实现,拦截器在调用Action前后调用,拦截器有很多的好处和功能,比较常见的有计算action的运行时间、禁止用户将表单重复提交,还有就是如果知道了一个URL,在没有登录(也就是httpsession为空的时候不能让其进入页面,直接跳转到登录页面等等),在以后,我会将这个功能加上,使登录的模块更加的完整!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值