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

}

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

(0)

相关推荐

  • 详解Struts2中对未登录jsp页面实现拦截功能

    Struts2中拦截器大家都很经常使用,但是拦截器只能拦截action不能拦截jsp页面.这个时候就有点尴尬了,按道理来说没登录的用户只能看login界面不能够通过输入URL进行界面跳转,这显然是不合理的.这里介绍Struts2中Filter实现jsp页面拦截的功能.(有兴趣的人可以去研究Filter过滤器的其它用法,因为利用过滤器也可以实现action拦截的功能) 下面直接上代码,边看边分析实现步骤和原理. 1.web.xml中的配置信息: <filter> <filter-name&

  • Java struts2 validate用户登录校验功能实现

    首先贴一下搭配的环境: 配置: Eclipse4.3.2 jdk1.7_45 Mysql 5.0+ 然后切入正题: 1.login.jsp 主要是使用OGNL 标签 也可使用html form表单,调用LoginAction.action,以post 方式传输. 在LoginaAction 经过判断,然后会有提示信息,需要用到 <s:fielderror/>来显示. <%@ taglib uri="/struts-tags" prefix="s"%

  • Struts2拦截器登录验证实例

    Struts2拦截器 Struts2拦截器的概念和Spring Mvc拦截器一样. 1.Struts2拦截器是在访问某个Action或Action的某个方法,字段之前或之后实施拦截,并且Struts2拦截器是可插拔的,拦截器是AOP的一种实现. 2.拦截器栈(Interceptor Stack).Struts2拦截器栈就是将拦截器按一定的顺序联结成一条链.在访问被拦截的方法或字段时,Struts2拦截器链中的拦截器就会按其之前定义的顺序被调用. 使用拦截器的第一步: 自定义我的权限拦截器Chec

  • Struts2开发环境搭建 附简单登录功能实例

    首先是搭建Struts2环境. 第一步 下载Struts2 去Struts官网 http://struts.apache.org/ 下载Struts2组件. 截至目前,struts2最新版本为2.3.1.3,下载struts-2.3.16.3-all.zip,解压,放着. 第二步 新建Web Project并导入jar包 在MyEclispe中新建Web Project,然后找到解压的Struts2包,在里面apps文件夹下找到struts2-blank.war,解压这个WAR文件,将里面WEB

  • struts2+jquery组合验证注册用户是否存在

    注册界面 register.jsp 复制代码 代码如下: <%@ page language="java" contentType="text/html; charset=UTF-8"%> <html> <head> <title>注册界面</title> <script type="text/javascript" src="js/jquery-1.6.js"

  • 防止未登录用户操作—基于struts2拦截器的简单实现

    一般,我们的web应用都是只有在用户登录之后才允许操作的,也就是说我们不允许非登录认证的用户直接访问某些页面或功能菜单项.我还记得很久以前我的做法:在某个jsp页面中查看session中是否有值(当然,在用户登录逻辑中会将用户名或者用户对象存入session中),如果session中用户信息为空,那么redirect 到登录页面.然后在除了登录页面外的其它所有需要验证用户已登录的页面引入这个jsp . 比如,我们将检查用户是否登录的代码放入一个jsp页面中,如 checkUser.jsp <%@

  • Struts2拦截器 关于解决登录的问题

    拦截器的工作原理如图 拦截器是由每一个action请求(request)都包装在一系列的拦截器的内部,通过redirectAction再一次发送请求. 拦截器可以在Action执行直线做相似的操作也可以在Action执行直后做回收操作. 我们可以让每一个Action既可以将操作转交给下面的拦截器,Action也可以直接退出操作返回客户既定的画面. 接下来我们该如何定义一个拦截器: 自定义一个拦截器如下: 1.实现Interceptor接口或者继承AbstractInterceptor抽象类. 2

  • JQuery+Ajax+Struts2+Hibernate框架整合实现完整的登录注册

    最近在仿造一个书城的网站: http://www.yousuu.com ,UI直接拿来用,前端后端自己写,目前大部分功能已经实现, 就把具体的 登录注册功能 拿来分享一下.PS:又写登录注册会不会被人喷啊=.= 一.开发环境的部署 程序结构: BootStrap+Ajax+Struts2+Hibernate+MySql 仅供参考:能实现相关功能即可 操作系统:ubuntu 14.10 前端框架:BootStrap   注:此框架只是为了实现用户界面,和具体功能无关 数据库:mysql-5.5 数

  • struts2与cookie 实现自动登录和验证码验证实现代码

    主要介绍struts2与cookie结合实现自动登录 struts2与cookie结合时要注意采用.action 动作的方式实现cookie的读取 struts2的jar包  链接数据库文件 db.properties dbDriver = oracle.jdbc.driver.OracleDriver url = jdbc:oracle:thin:@localhost:1521:orcl userName=test password=password dao层类代码,通过登录名获取用户信息 p

  • 使用MyEclipse 开发struts2框架实现登录功能(结构教程)

    1.首先建立Web Project,名称为:struts2 ,然后选择Java EE6.0,点击Finish. 2.右击"struts"选择MyEclipse->Add Struts Capabilities,然后弹出如下弹窗,再选择Struts 2.1.选择完成即可点击Finish. 3.建完后项目目录如下图所示: 4.建立一个Login类,继承ActionSupport类(点击Superclass的Browse,选择搜索ActionSupport) 5.定义username,

随机推荐