所用技术:struts2 ,hibernate,jsp,mysql

本DEMO仅仅实现用户登录功能,采用MVC思想,自己也觉得相对是比较简单,比较容易理解数据流向的一个例子,通过整合这个过程,能够清晰的看出整个项目工程的数据流向和设计思想,是新手对于整合struts2和hibernate的最好的例子。

现将整合思想,过程,代码整理如下,如果新手看了还是有不明白或者需要源码,本人乐意效劳和分享源码。

JSP作为视图层V,显示登录,登录成功,失败页面;Struts2作为控制层C处理页面跳转;Hibernate用作数据模型M,它与前台程序的接口以DAO形式提供。

一.数据库设计:

1.创建数据库test   表名为:user

id  int  not null 自增

username   varchar(11) not null

password   varchar(11 not null)

二.M层开发:

2.Hibernate基本配置:

为Web项目添加Hibernate的相关jar包,hibernate.cfg.xml,并应用右击项目文件,myeclise,add hibernate …将建立sessionfacotry.这样就不用再自己去写了,实现了高效开发。下为hibernate.cfg.xml:

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <!-- Generated by MyEclipse Hibernate Tools. -->
<hibernate-configuration> <session-factory>
<property name="connection.username">root</property>
<property name="connection.url">jdbc:mysql:///test</property>
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="connection.password">123456</property>
<property name="connection.driver_class">org.gjt.mm.mysql.Driver</property> <!-- 在控制台显示SQL语句 -->
<property name="show_sql">true</property> <mapping resource="com/red/vo/User.hbm.xml" /> </session-factory> </hibernate-configuration>

3.生成POJO(Plain Old Java Object,简单的Java对象,通常也称为VO[ Value  Object ]对象,值对象)对象类 ,POJO是一种特殊的Java类,其中有一些属性及其对应的getter/setter方法,不允许有业务方法。将User.hbm.xml配置文件一定要放在和User实体bean相同的文件目录下。(附User.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 package="com.red.vo"> <class name="User" table="user">
<id name="id" column="id" type="integer">
<generator class="identity"/>
</id> <property name="username" column="username" type="string" />
<property name="password" column="password" type="string" />
</class> </hibernate-mapping>

4.在src中另外建立两个包,分别放DAO接口IUserDAO及其实现类UserDAO。(附IUserDAO ,UserDAO  源码)

UserDAO.java

package com.red.dao.impl;

import java.util.List;

import javax.persistence.Query;

import com.red.dao.IUserDAO;
import com.red.factory.HibernateSessionFactory;
import com.red.vo.User; /**
* 实现接口
* @author Red
*
*/
public class UserDAO implements IUserDAO{
public User validateUser(String username,String password){
String sql="from User u where u.username=? and u.password=?";
org.hibernate.Query query=HibernateSessionFactory.getSession().createQuery(sql);
query.setParameter(0, username);
query.setParameter(1, password);
List users=query.list();
if(users.size()!=0){
User user=(User)users.get(0);
return user;
}
HibernateSessionFactory.closeSession();
return null;
}
}

IUserDAO.java

package com.red.dao;
import com.red.vo.User; /**
* 接口
* @author Red
*
*/
public interface IUserDAO { public User validateUser(String username,String password);
}

三.C层开发: 

5.加载,配置Struts2:

将jar包复制到lib目录下,并且将mysql的驱动包也放进去,修改web.xml的代码。(附web.xml代码)

<?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.FilterDispatcher</filter-class>
</filter> <filter-mapping><filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<display-name></display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>

6.实现Action:

在src中新建包action,创建类LoginAction类:(附代码LoginAction.java)

package com.red.action;

import com.opensymphony.xwork2.ActionSupport;
import com.red.dao.IUserDAO;
import com.red.dao.impl.UserDAO;
import com.red.vo.User; /**
* 用户登录action
* @author Red
*
*/
public class LoginAction extends ActionSupport{
private String username;
private String password;
//处理用户请求的execute方法
public String execute() throws Exception{
boolean validated=false;//验证成功标识
IUserDAO userDAO=new UserDAO();
User user=userDAO.validateUser(getUsername(),getPassword()); if(user!=null)
{
validated=true;
}
if(validated)
{
//验证成功返回字符串“success”
return SUCCESS;
}
else
{
//验证失败返回字符串“error”
return ERROR;
}
}
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;
} }

7.在struts.xml 中配置action:(附代码:struts.xml)

<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="struts" extends="struts-default">
<action name="login" class="com.red.action.LoginAction">
<result name="success">/welcome.jsp</result>
<result name="error">/error.jsp</result>
</action>
</package>
</struts>

四.V层开发:

就是写当个JSP文件。源码序列分别是:index.jsp;welcome.jsp;error.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
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>login</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head> <body>
<form action="login.action" method="post">
用户名:<input type="text" name="username"/><br/>
密码:<input type="password" name="password"/><br/>
<input type="submit" value="登 录">
</form>
</body>
</html>
<%@ 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>welcome</title> <meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
--> </head> <body>
<s:property value="username"/>,您好!欢迎光临RED‘S HOME.
</body>
</html>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
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>error</title> <meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
--> </head> <body>
登录失败! <br>
</body>
</html>

欢迎大神拍砖,新手朋友:我们可以一起学习学习呃。

Struts2整合Hibernate3实现用户登录功能的更多相关文章

  1. 使用Struts1完成用户登录功能

    1.Struts框架 框架(framework):就是一系列代码和开发模式的整合,使用框架后,所有开发人员都会按照框架提供的规范进行开发,使代码更容易维护和扩展. 使用框架的优点: 1)   易于维护 ...

  2. JavaWeb学习记录(六)——用户登录功能

    使用JDBC.spring框架.servlet实现一个简单的用户登录功能. 一.mySql数据库 SET FOREIGN_KEY_CHECKS=0; -- ---------------------- ...

  3. 实现Web上的用户登录功能

    关于如何实现web上的自动登录功能 文章来源http://coolshell.cn/articles/5353.html Web上的用户登录功能应该是最基本的功能了,可是在我看过一些站点的用户登录功能 ...

  4. 你会做Web上的用户登录功能吗?

    Web上的用户登录功能应该是最基本的功能了,可是在我看过一些站点的用户登录功能后,我觉得很有必要写一篇文章教大家怎么来做用户登录功能.下面的文章告诉大家这个功能可能并没有你所想像的那么简单,这是一个关 ...

  5. 利用MYSQL的函数实现用户登录功能,进出都是JSON(第二版)

    利用MYSQL的函数实现用户登录功能,进出都是JSON(第二版) CREATE DEFINER=`root`@`%` FUNCTION `uc_session_login`( `reqjson` JS ...

  6. 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(五)——实现注册功能

    使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(一)——创建应用 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(二)——使用蓝图功能进行模块化 使用 Flask 框架写用 ...

  7. 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(四)——对 run.py 的调整

    使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(一)——创建应用 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(二)——使用蓝图功能进行模块化 使用 Flask 框架写用 ...

  8. 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(一)——创建应用

    使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(一)——创建应用 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(二)——使用蓝图功能进行模块化 使用 Flask 框架写用 ...

  9. 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(二)——使用蓝图功能进行模块化

    使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(一)——创建应用 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(二)——使用蓝图功能进行模块化 使用 Flask 框架写用 ...

随机推荐

  1. 如何让MVC6在IIS上面跑

    asp.net5的MVC6发布出来的结果和MVC5之前版本的相差太远了,直接在本地的IIS服务器上面是不可能运行的. 看了汤姆大叔的MVC6项目发布与部署,讲了很多丰富的知识点.但是对于立即要解决问题 ...

  2. 如何快速清空项目中的session值

    /清空session //第一种:按照指定的名称清空session //request.getSession().removeAttribute("globle_user"); / ...

  3. 使用扩展方法简化RadAjaxManager设置

    相对于RadAjaxPanel,RadAjaxManager提供了更精确控制更新目标的设置,特别是在某些场景下,使用RadAjaxManager能够获得更好的性能. 但是,由于要明确设置目标,配置的代 ...

  4. MySQL 5.6.17 rpm 文件安装顺序

     Linux系统安装MySQL时,将MySQL-5.6.17-1.el6.x86_64.rpm-bundle.tar包打开,有7个rpm文件,如下: MySQL-client-5.6.17-1.el6 ...

  5. SQL Server 常用分页SQL

    今天无聊和朋友讨论分页,发现网上好多都是错的.网上经常查到的那个Top Not in 或者Max 大部分都不实用,很多都忽略了Order和性能问题.为此上网查了查,顺带把2000和2012版本的也补上 ...

  6. 用nifi executescript 生成3小时间隔字符串

    import java.io from datetime import datetime from org.apache.commons.io import IOUtils from java.nio ...

  7. ASP.NET 开发必备知识点(1):如何让Asp.net网站运行在自定义的Web服务器上

    一.前言 大家都知道,在之前,我们Asp.net 的网站都只能部署在IIS上,并且IIS也只存在于Windows上,这样Asp.net开发的网站就难以做到跨平台.由于微软的各项技术的开源,所以微软自然 ...

  8. 【C语言学习】《C Primer Plus》第10章 数组和指针

    学习总结 1.数组初始化方式: int a[]={1,2,3} int a[SIZE]={1,2,3} //SIZE是宏定义,数组初始化个数不能大于SIZE,否则报错:当个数小 //SIZE,自动补0 ...

  9. Ubuntu Desktop开发生产环境搭建

    Ubuntu Desktop开发生产环境搭建 1   开发生产环境搭建 在本节内容开始前,先定义一下使用场合,没有哪种系统或者设备是万能的,都有它的优点和缺点,能够在具体的使用场景,根据自身的需求来取 ...

  10. EF 外键问题

    在做一个评论功能的时候,发现用户的id不对,打开数据库一看,莫名其妙的新增了几个用户.明显是将外键中的用户新增到用户表中了. 评论表: public class CourseComment : Bas ...