开发环境:

IDE:Myeclipse10.0

数据库:Oracle(SQL Developer)

Web容器:Tomcat 7.0

JDK:1.6

Struts:2.0

Hibernate:3.3

数据库:(ID为主键,设置了序列以及触发器SEQUENCE_ID,使得ID自增)

注意事项:

创建项目以后,为项目添加Sturts和Hibernate能力

连接数据库并生成POJO类:Hibernate框架连接SQL sever 2016完整详细步骤

还有一个一定会出错的地方,因为Hibernate和Struts 2 中有相同的包(版本不同)会引起冲突,所以要把Struts 2 中的antlr-2.7.2.jar移除,具体操作可以看这篇:java.lang.NoSuchMethodError: antlr.collections.AST.getLine()I最终解决方案

编码步骤:

  1. 使用hibernate框架生成数据实体POJO类,即该项目中的Userinfo类
  2. 编写逻辑层UserDAO类
  3. 编写控制层Action类,分为登录Action和注册Action
  4. 编写视图层JSP,分为登录界面和注册页面,以及登录、注册成功后通通跳转到成功界面
  5. 编写struts.xml,分为两个action,因为有两张form表单要填写以对应跳转不同的视图

POJO类:Userinfo.java

package com.ov;

/**
* Userinfo entity. @author MyEclipse Persistence Tools
*/ public class Userinfo implements java.io.Serializable { // Fields private Integer id;
private String username;
private String password;
private String repassword; // Constructors /** default constructor */
public Userinfo() {
} /** full constructor */
public Userinfo(String username, String password, String repassword) {
this.username = username;
this.password = password;
this.repassword = repassword;
} // 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 getRepassword() {
return this.repassword;
} public void setRepassword(String repassword) {
this.repassword = repassword;
} }

自动生成的Userinfo.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">
<!--
Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
<class name="com.ov.Userinfo" table="USERINFO" schema="SYSTEM">
<id name="id" type="java.lang.Integer">
<column name="ID" precision="9" scale="0" />
<generator class="sequence">
<param name="sequence">SEQUENCE_ID</param>
</generator>
</id>
<property name="username" type="java.lang.String">
<column name="USERNAME" length="50" />
</property>
<property name="password" type="java.lang.String">
<column name="PASSWORD" length="50" />
</property>
<property name="repassword" type="java.lang.String">
<column name="REPASSWORD" length="50" />
</property>
</class>
</hibernate-mapping>

UserDAO.java

package com.dao;

import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction; import com.ov.Userinfo;
import com.util.HibernateSessionFactory; public class UserDAO {
private Session session;
private Transaction t;
//获取session连接
public void getCurrentSession() {
session = HibernateSessionFactory.getSession();
}
//关闭session连接
public void closeSession() {
if(session != null){
HibernateSessionFactory.closeSession();
}
} /**
* 登录:验证用户名和密码
* @param user
* @return true 存在
* @return false 不存在
*/
public boolean loginByUser(String username,String password){
getCurrentSession();
t = session.beginTransaction();
Query query = session.createQuery("from Userinfo where username='"+username+"' and password='"+password+"'");
List list = query.list();
closeSession();
if(list!=null && list.size()>0) { //存在用户名和密码
return true;
}
return false;
} /**
* 注册:先查询表中是否存在相同用户名,若无则增加,有则提示
* @param userinfo
* @return true 成功
* @return false 失败
*/
public boolean registByUser(Userinfo userinfo) {
try{
getCurrentSession();
t = session.beginTransaction();
String username = userinfo.getUsername();
String password = userinfo.getPassword();
String repassword = userinfo.getRepassword();
Query query = session.createQuery("from Userinfo where username='"+username+"'");
//query.setString(0, username);
List list = query.list();
if(list.size()>0){ //如果表中已经有相同的用户名
return false;
}
else{
session.save(userinfo);
t.commit();
return true;
}
}catch (Exception e) {
e.printStackTrace();
}
finally{
closeSession();
}
return false;
}
}

LoginAction.java

package com.action;

import java.util.Map;

import org.hibernate.Session;

import com.dao.UserDAO;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.ov.Userinfo; public class LoginAction extends ActionSupport {
private String username;
private String password;
private String msg;//用于显示错误信息
/**
* 处理用户请求的execute方法
*/
public String execute() throws Exception {
//获得会话,用来保存当前登录用户的信息!
Map<String,Object> session = ActionContext.getContext().getSession();
Userinfo userinfo = new Userinfo();
userinfo.setUsername(username);
userinfo.setPassword(password);
session.put("userinfo", userinfo);
return SUCCESS;
} public void validate() {
if(username==null || username.equals("")){
this.addFieldError("username", "用户名不能为空!");
}
else if(password==null || password.equals("")){
this.addFieldError("password", "密码不能为空!");
}
else{
UserDAO dao = new UserDAO();
if(dao.loginByUser(username,password) == false){
this.addFieldError("username", "用户名或密码错误!");
}
}
} 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 getMsg() {
return msg;
} public void setMsg(String msg) {
this.msg = msg;
} }

RegistAction.java

package com.action;

import java.util.Map;

import org.hibernate.Session;

import com.dao.UserDAO;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.ov.Userinfo; public class LoginAction extends ActionSupport {
private String username;
private String password;
private String msg;//用于显示错误信息
/**
* 处理用户请求的execute方法
*/
public String execute() throws Exception {
//获得会话,用来保存当前登录用户的信息!
Map<String,Object> session = ActionContext.getContext().getSession();
Userinfo userinfo = new Userinfo();
userinfo.setUsername(username);
userinfo.setPassword(password);
session.put("userinfo", userinfo);
return SUCCESS;
} public void validate() {
if(username==null || username.equals("")){
this.addFieldError("username", "用户名不能为空!");
}
else if(password==null || password.equals("")){
this.addFieldError("password", "密码不能为空!");
}
else{
UserDAO dao = new UserDAO();
if(dao.loginByUser(username,password) == false){
this.addFieldError("username", "用户名或密码错误!");
}
}
} 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 getMsg() {
return msg;
} public void setMsg(String msg) {
this.msg = msg;
} }

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="default" extends="struts-default">
<!-- 登录 -->
<action name="loginAction" class="com.action.LoginAction">
<result name="success">/success.jsp</result>
<result name="input">/index.jsp</result>
</action>
<!-- 注册 -->
<action name="registAction" class="com.action.RegistAction">
<result name="success">/success.jsp</result>
<result name="input">/register.jsp</result>
</action>
</package>
</struts>

index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>主页</title>
</head> <body>
<s:form action="loginAction" method="post">
<s:fielderror><s:property value="msg"/></s:fielderror>
<s:textfield label="用户名" name="username"/>
<s:password label="密码" name="password"/>
<s:a href="register.jsp">注册</s:a>
<s:submit value="登录"/>
</s:form>
</body>
</html>

register.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>主页</title>
</head> <body>
<s:form action="registAction" method="post">
<s:fielderror><s:property value="msg"/></s:fielderror><br>
<s:textfield label="用户名" name="username"/>
<s:password label="密码" name="password"/>
<s:password label="确认密码" name="repassword"/>
<s:submit value="提交"/> <s:reset value="重置"/>
</s:form>
</body>
</html>

success.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>主页</title>
</head> <body>
<s:set name="userinfo" value="#session['userinfo']"></s:set>
<s:property value="#userinfo.username"/>,您好!
</body>
</html>

Struts2 + Hibernate3.3 开发简单的登录注册功能【J2EE】的更多相关文章

  1. WEB简单的登录注册功能(分层)

    登录: 前端页面: <body> <form action="/webtext/LogingServlet" method="post"> ...

  2. SSM 实现登录注册功能

    1.上一篇SSM框架搭建好了之后就要开始写功能了,现在来写一个简单的登录注册功能 这几个包是自己手动创建的,然后往里面写代码 2.代码详情 package com.maike.controller; ...

  3. Android高效率编码-第三方SDK详解系列(二)——Bmob后端云开发,实现登录注册,更改资料,修改密码,邮箱验证,上传,下载,推送消息,缩略图加载等功能

    Android高效率编码-第三方SDK详解系列(二)--Bmob后端云开发,实现登录注册,更改资料,修改密码,邮箱验证,上传,下载,推送消息,缩略图加载等功能 我的本意是第二篇写Mob的shareSD ...

  4. Angular之简单的登录注册

    使用Angular实现了一个简单的登录注册的功能........ 涉及到的Angular知识点很少 主要是这个功能的实现...(*^__^*) 嘻嘻…… 里面涉及到的知识点记录: 1.本地存储的操作 ...

  5. Python 实现简单的登录注册界面

    Python 实现简单的登录注册界面 注意:编写代码之前需要导入很重要的包 import tkinter as tk import pickle from tkinter import message ...

  6. flask 开发用户登录注册功能

    flask 开发用户登录注册功能 flask开发过程议案需要四个模块:html页面模板.form表单.db数据库操作.app视图函数 1.主程序 # app.py # Auther: hhh5460 ...

  7. Java Spring+Mysql+Mybatis 实现用户登录注册功能

    前言: 最近在学习Java的编程,前辈让我写一个包含数据库和前端的用户登录功能,通过看博客等我先是写了一个最基础的servlet+jsp,再到后来开始用maven进行编程,最终的完成版是一个 Spri ...

  8. vue koa2 mongodb 从零开始做个人博客(一) 登录注册功能前端部分

    0.效果演示 插入视频插不进来,就很烦.可以出门右拐去优酷看下(点我!). 1.准备工作 1.1前端框架 前端使用了基于vue.js的nuxt.js.为什么使用nuxt.js? 首先我做的是博客的项目 ...

  9. Node.js实现登录注册功能

    使用Node.js + Navicat for mysql实现的登录注册功能 数据库中存在有”user_id,user_name,password,user_img,user_number“字段,其中 ...

随机推荐

  1. [USACO06NOV] Roadblocks

    https://www.luogu.org/problem/show?pid=2865 题目描述 Bessie has moved to a small farm and sometimes enjo ...

  2. Ubuntu12.04 安装nginx和mongo过程

    1.安装php和php-cgi apt-get install php5 php5-cgi 2.安装 nginx apt-get install nginx 3.安装 MongoDB apt-get ...

  3. [uva11997]k个最小和

    一个k*k的矩阵,每行选取一个数相加则得到一个和,求最小的前k个和. k<=750 已知前m行最小的前k个和d[1]…d[k],则前m+1行最小的前k个和都必定是d[i](i<=k)+a[ ...

  4. Vuejs - 深入浅出响应式系统

    Vue 最独特的特性之一,是其非侵入性的响应式系统.数据模型仅仅是普通的 Javascript 对象.而当你修改它们时,视图会进行更新.这使得状态管理非常简单直接,不过理解其工作原理同样非常重要,这样 ...

  5. js jq插件 显示中文时间戳 刚刚 N分钟前 N小时前 今天 上午 下午 日期格式化

    注:页面需提前引用JQ ; $.fn.extend({ /* ** notes: 获取13位时间戳的简单操作 ** new Date('2018-02-01 15:10:00').getTime() ...

  6. 任务调度框架kunka

    kunka kunka是一个任务调度框架.用户只需要在Task接口中实现自己要执行的功能,并且选择合适的执行器,放入TaskManager中,就可以了完成整个任务了. 实现细节 整个任务信息存放在内存 ...

  7. [Leetcode Week15]Populating Next Right Pointers in Each Node

    Populating Next Right Pointers in Each Node 题解 原创文章,拒绝转载 题目来源:https://leetcode.com/problems/populati ...

  8. HDU 5627 Clarke and MST &意义下最大生成树 贪心

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5627 题意:Bestcoder的一道题,让你求&意义下的最大生成树. 解法: 贪心,我们从高位 ...

  9. win10出现"win10系统即将过期,请激活"的处理办法

    当打开电脑时,出现"你的win10系统即将过期,请前往激活”的提示.上网查了解决方案,避免以后在出现这样的情况,现将解决步骤整理如下: 1.下载KMSpico激活软件,百度网盘下载链接如下: ...

  10. Redis错误:jedis.exceptions.JedisDataException: ERR Client sent AUTH, but no password is set

    原文链接:http://blog.csdn.net/rchm8519/article/details/48347797 redis.clients.util.Pool.getResource(Pool ...