开发环境:

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. Http字段含义

    转载自:http://blog.csdn.net/sand_ant/article/details/10503579 一.request请求Header简介 Accept:--客户机支持的类型 Acc ...

  2. 使用 html2canvas 实现浏览器截图

    基于上一篇<h5 本地上传图片预览 源码下载>,今天分享一个图片上传后, 根据所上传的图片颜值随机生成一个答案, 并且可以生成一张专属于自己的名片. 首先上传预览我们已经实现了, 所以接下 ...

  3. 【Foreign】Uria [欧拉函数]

    Uria Time Limit: 20 Sec  Memory Limit: 512 MB Description 从前有个正整数 n. 对于一个正整数对 (a,b),如果满足 a + b ≤ n 且 ...

  4. Angular2.0 基础:双向数据绑定 [(ngModel)]

    在属性绑定中,值从模型到屏幕上的目标属性 (property). 通过把属性名括在方括号中来标记出目标属性,[]. 这是从模型到视图的单向数据绑定. 而在事件绑定中,值是从屏幕上的目标属性 到 mod ...

  5. bootstrap-table组合表头

    1.效果图 2.html代码 <table id="table"></table> 3.javascript代码 $("#table") ...

  6. linux系统下git使用

    转载:http://www.cnblogs.com/bear2flymoon/p/4335364.html?ADUIN=563508762&ADSESSION=1430887070&A ...

  7. 基于ARM 构架(带MMU)的copy_from_user与copy_to_user详细分析

      [转自:http://blog.chinaunix.net/uid-20543672-id-3195249.html]   在学习Linux内核驱动的时候,一开始就会碰到copy_from_use ...

  8. Linux 入门记录:三、Linux 文件基本操作管理

    一.复制文件.目录 使用 cp 命令复制文件或目录: $ cp 源文件(夹)目标文件(夹) 常用参数: -r 递归复制整个目录树 -v 显示复制过程的详细信息 二.移动.重命名文件或目录 通过 mv  ...

  9. 安全测试===sqlmap

    本文转自:https://www.secpulse.com/archives/4213.html   鉴于很多新手对sqlmap的用法不是很熟悉 很多常用sqlmap的也不一定完全会用sqlmap 特 ...

  10. sublime Text3 === 无法输入input的问题解决办法

    sublimetext无法对input或者raw_input执行.因此搜了很多方法后,解决了这个问题: 1.先下载插件sublimerepl ,如果无法下载,请点击https://github.com ...