jar包下载地址


创建一个web项目。


导入jar包


配置web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1"> <-- Struts的核心过滤器配置-->
<filter>
<filter-name>struts</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>struts</filter-name>
<url-pattern>*.jsp </url-pattern>
</filter-mapping>
</web-app>

在src 目录下创建 hibernate.cfg.xml,指定数据库“demo”


<?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">
<hibernate-configuration>
<session-factory>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://localhost:3306/demo</property>
<property name="connection.username">root</property>
<property name="connection.password">123</property>
<property name="dialect">org.hibernate.dialect.MySQLDialect</property> <property name="show_sql">true</property>
<property name="format_sql">true</property>
<property name="hbm2ddl.auto">update</property>
<property name="current_session_context_class">thread</property>
</session-factory>
</hibernate-configuration>

创建一个User实体类

package com.test.pojo;

/**
* Created by Wdnnccey on 2016/10/24.
*/
public class User {
private int uid;
private String username;
private String password; public User() {
} public User(int uid, String username, String password) {
this.uid = uid;
this.username = username;
this.password = password;
} @Override
public String toString() {
return "User{" +
"uid=" + uid +
", username='" + username + '\'' +
", password='" + password + '\'' +
'}';
} public int getUid() {
return uid;
} public void setUid(int uid) {
this.uid = uid;
} 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;
}
}

创建 :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>
<class name="com.test.pojo.User" table="user">
<id name="uid" column="uid">
<generator class="native"/>
</id>
<property name="username" column="username" type="java.lang.String" length="20" />
<property name="password" column="password" type="java.lang.String" length="20"/> </class>
</hibernate-mapping>

创建一个包存放专门用来工具类,获取session操作等等。

HibernateUtils.java

package com.test.utils;

import org.hibernate.Hibernate;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder; /**
* Created by Wdnnccey on 2016/10/24.
*/
public class HibernateUtils { private static SessionFactory sessionFactory; //保证单例模式
private HibernateUtils(){ } //公有的静态方法
public static SessionFactory getSessionFactory(){ if(sessionFactory ==null){
Configuration configuration =new Configuration().configure();
ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();
sessionFactory = configuration.buildSessionFactory(serviceRegistry);
return sessionFactory;
}else {
return sessionFactory;
}
} }

在创建一个源码包,作为测试类使用,来创建表。 TestDemo.java

package com.test;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.metamodel.relational.Schema;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;
import org.hibernate.tool.hbm2ddl.SchemaExport;
import org.junit.Test; /**
* Created by Wdnnccey on 2016/10/24.
*/
public class TestDemo { @Test
public void TestAll(){
Configuration configuration = new Configuration().configure();
ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();
SessionFactory sessionFactory =configuration.buildSessionFactory(serviceRegistry);
Session session = sessionFactory.getCurrentSession();
Transaction transaction = session.beginTransaction();
SchemaExport export =new SchemaExport(configuration);
export.create(true,true);
}
}

成功创建user表。

在web目录下创建users-->目录存放-->login.jsp作为登陆页面。

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>登陆页面</title>
</head>
<body>
<form action="" method="post">
username:<input type="text" name="username"/><br>
password:<input type="password" name="password"/><br>
<input type="submit" value="tijiao"/>
</form>
</body>
</html>
在web目录下创建users-->目录存放-->fails.jsp作为登陆失败后返回的页面。
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
你失败了。
</body>
</html>

在web目录下创建users-->目录存放-->success.jsp作为登陆成功后返回的页面。

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
你成功了。
</body>
</html>
在src目录下创建一个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="default" extends="struts-default" namespace="/">
</package> <package name="users" namespace="/users" extends="default">
<!--http://www.cnblogs.com/wdnnccey/p/5982988.html有介绍-->
<action name="*_*" class="com.test.action.{1}Action" method="{2}">
<!--如果登陆成功返回的页面-->
<result name="login_success">/users/success.jsp</result>
<!--如果登陆失败返回的页面-->
<result name="login_fails">/users/fails.jsp</result>
</action>
</package>
</struts>

在src下创建一个dao层。 接口:userDao.java

import com.test.pojo.User;

/**
* Created by Wdnnccey on 2016/10/24.
*/
public interface UserDao { //用户登陆
public boolean userLogin(User user);
}

在src下创建一个dao层的实现层。 userDaoImpl.java

;

import com.test.pojo.User;
import com.test.utils.HibernateUtils;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction; import java.util.List; /**
* Created by Wdnnccey on 2016/10/24.
*/
public class UserDaoImpl implements UserDao{
@Override
public boolean userLogin(User user) {
//初始化事务
Transaction transaction =null;
//创建一个hql语句,先初始化。
String hql =""; try {
//用之前创建的utils工具来获取session
Session session = HibernateUtils.getSessionFactory().getCurrentSession();
//创建事务并开启事务
transaction =session.beginTransaction();
//编写hql语句
hql = "from User where username=? and password =?";
//通过query去创建语句
Query query = session.createQuery(hql);
//为hql语句中的?(问号),设置参数。(通过user实体类获取来user用户名和密码的信息)
query.setParameter(0,user.getUsername());
query.setParameter(1,user.getPassword());
//HQL语句返回的是一个QUery对象,将Query对象query转换成集合,并且把该集合赋值给一个新的集合。
List<User> list =query.list();
//执行之前要提交事务
transaction.commit();
//判断是否验证到有用户存在
if(list.size()>0){
return true;
}else {
return false;
}
}catch (Exception e){ }finally {
//将事务置为空
if(transaction!=null){
transaction=null;
}
}
return false;
}
}

在src下创建一个action的包,用于存放action, 我们先写一个 SuperAction.java

关于为什么继承ActionSupport,请参考:http://www.cnblogs.com/wdnnccey/p/5994693.html

关于为什么要时间那些接口,请参考:http://www.cnblogs.com/wdnnccey/p/5994713.html

package com.test.action;

import com.opensymphony.xwork2.ActionSupport;
import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.interceptor.ServletResponseAware;
import org.apache.struts2.util.ServletContextAware; import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import javax.xml.ws.spi.http.HttpContext; /**
* 所有action的父类
* Created by Wdnnccey on 2016/10/24.
*/
public class SuperAction extends ActionSupport implements ServletRequestAware,ServletResponseAware,ServletContextAware{ protected HttpServletResponse response;
protected HttpServletRequest request;
protected ServletContext application;
protected HttpSession session; @Override
public void setServletRequest(HttpServletRequest request) {
this.request = request;
this.session = this.request.getSession();
} @Override
public void setServletResponse(HttpServletResponse response) {
this.response =response;
} @Override
public void setServletContext(ServletContext application) {
this.application=application;
}
}

在action包下创建 userAction.java

package com.test.action;

import com.opensymphony.xwork2.ModelDriven;
import com.test.pojo.User;
import com.test.serivce.impl.UserDao;
import com.test.serivce.impl.UserDaoImpl; /**
* Created by Wdnnccey on 2016/10/24.
*/
public class UserAction extends SuperAction implements ModelDriven<User> { //初始化一个user对象
private User user = new User(); //这里使用模型驱动
//所谓ModelDriven ,意思是直接把实体类当成页面数据的收集对象。
@Override
public User getModel() {
return this.user;
} /**
* 登陆方法
* @return
*/
public String login() {
UserDao dao = new UserDaoImpl();
//如果匹配的话
if (dao.userLogin(user)) {
//返回正确页面,(session是通SuperAction得到的!
 session.setAttribute("LoginUsername", user.getUsername());
      //如果正确跳转到success页面,在struts.xml中有体现配置
return "login_success";
} else {
//返回错页面
return "login_fails";
}
}
}

我们在登陆之前要插入一条用户数据,以便登陆的时候去验证!

部署web项目,启动tomcat :

在这输入用户名以及密码 验证。

我先输入一个错误的信息,点击提交按钮:

这次我们输入一个正确的数据, 在数据库中存在的!

写到这里,我们完成了一个简单的登陆的功能,以及页面跳转。


我们想在登陆页面知道这个用户是谁:

在session域中取得,我们在登陆时候setattribute的值(session.setAttribute("LoginUsername", user.getUsername());)

在success.jsp页面添加如下:

欢迎你:(${sessionScope.LoginUsername})登陆!

再次登陆验证:

http://localhost:8081/users/login.jsp


如果我们想实现对这个用户的退出呢? 也很简单,把这个用户在session中移除即可,代码如下:

在userAction中编写注销方法:

    /**
* 注销方法
*/
public String loginout() {
//先去session中去获取值,查看当前用户是否为空
if (session.getAttribute("LoginUsername") != null) {
//如果不等于空的话我们将他移出session
session.removeAttribute("LoginUsername");
}
//返回到登陆页面(这个return的值是通过struts.xml文件配置的)
return "loginout_success";
}

在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="default" extends="struts-default" namespace="/">
</package> <package name="users" namespace="/users" extends="default">
<!--http://www.cnblogs.com/wdnnccey/p/5982988.html有介绍-->
<action name="*_*" class="com.test.action.{1}Action" method="{2}">
<!--如果登陆成功返回的页面-->
<result name="login_success">/users/success.jsp</result>
<!--如果登陆失败返回的页面-->
<result name="login_fails">/users/fails.jsp</result>
<!--退出用户的返回页面-->
<result name="loginout_success">/users/login.jsp</result>
</action>
</package> </struts>

我们需要在登陆成功的success.jsp写上安全注销的链接(红色标注):

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
你成功了。
<br><br><br>
欢迎你:(${sessionScope.LoginUsername})登陆! <br><br><br>
<a href="/users/User_loginout.action">安全退出!</a>
</body>
</html>

测试注销方法:

看地址栏,能看出来 我们已经成功的退出当前用户!

不知道为什么 代码的格式没有复制上去,我就贴在这里啦:

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="default" extends="struts-default" namespace="/">
</package> <package name="users" namespace="/users" extends="default">
<!--http://www.cnblogs.com/wdnnccey/p/5982988.html有介绍-->
<action name="*_*" class="com.test.action.{1}Action" method="{2}">
<!--如果登陆成功返回的页面-->
<result name="login_success">/users/success.jsp</result>
<!--如果登陆失败返回的页面-->
<result name="login_fails">/users/fails.jsp</result>
<!--退出用户的返回页面-->
<result name="loginout_success">/users/login.jsp</result>
</action>
</package> </struts>

struts2和hibernate整合的小Demo的更多相关文章

  1. Struts2+Spring+Hibernate整合开发(Maven多模块搭建)

    Struts2+Spring+Hibernate整合开发(Maven多模块搭建) 0.项目结构 Struts2:web层 Spring:对象的容器 Hibernate:数据库持久化操作 1.父模块导入 ...

  2. Spring、Struts2+Spring+Hibernate整合步骤

    所使用的Jar包: Hibernate: Spring(使用MyEclipse自动导入框架功能) Struts2: 注解包和MySql驱动包: 1.配置Hibernate和Spring: <be ...

  3. 三大框架SSH(struts2+spring+hibernate)整合时相关配置文件的模板

    最近在学SSH三大框架的整合,在此对他们整合时相关配置文件做一简单的模板总结,方便以后复用! 首先是web.xml配置文件,这里面就配置一些简单的监听器.过滤器,包括spring核心配置文件appli ...

  4. Struts2 Spring hibernate 整合示例 .

    示例工具:MyEclipse 8.5.Tomcat 6.0.MySql 步骤: 1.创建一个WEB工程,命名为BookShop(名字自己取,此处为示例工程名): 2.导入struts2的核心jar包, ...

  5. 模拟Hibernate框架的小demo

    该程序为尚学堂马士兵老师讲解,模拟了hibernate的原理,主要应用了字符串拼接,反射知识. step1,新建数据库 use jd; create table _student( _id int(1 ...

  6. Struts2与Hibernate整合

    时间:2017-1-26 02:00 1.创建一个Web项目2.导入jar包    3.引入配置文件    struts.xml    hibernate.cfg.xml    log4j.prope ...

  7. Struts2 + Spring + Hibernate

    Struts2 + Spring + Hibernate整合. 使用的是无配置方法进行SSH的整合,struts-convertion plugin + spring annotation + hib ...

  8. struts2+hibernate整合-实现登录功能

    最近一直学习struts2+hibernate框架,于是想把两个框架整合到一起,做一个小的登录项目.其他不多说,直接看例子. 1).Struts2 和hibernate的环境配置 包括jar包.web ...

  9. 整合struts2+spring+hibernate

     一.准备struts2+spring+hibernate所须要的jar包:        新建web项目并将jar包引入到project项目中. 二.搭建struts2环境        a.在 ...

随机推荐

  1. win7或win2008 R2 被远程登录日志记录 系统日志

    事件查看器 → Windows 日志 → 安全 (win7 事件查看器 打开方式 :计算机 右键   → 管理  → 计算机管理 → 系统工具 → 事件查看器 windows server 2008 ...

  2. Shared Library Search Paths

    在使用CodeLite编译动态库的时候,可以通过在Linker > Linker Options中添加: -install_name @executable_path/libXXX.so 的方式 ...

  3. git add

    一.前言git add命令主要用于把我们要提交的文件的信息添加到索引库中.当我们使用git commit时,git将依据索引库中的内容来进行文件的提交. 二.基本git add <path> ...

  4. MySQL出错:ERROR 1045 (28000)的解决方法

    MySQL突然不能用了,症状如下: [root@bogon ok]# mysql ERROR (): Access denied for user 'root'@'localhost' (using ...

  5. MongoVUE

    MongoVUE运行界面如下:

  6. IE禁用Cookie后的session处理

    IE禁用Cookie后解决方案:URL重写 购物车案例<IE禁用Cookie后> 购物界面ShowBook.servlet public void doGet(HttpServletReq ...

  7. rabbitmq的web管理界面无法使用guest用户登录

    安装最新版本的rabbitmq(3.3.1),并启用management plugin后,使用默认的账号guest登陆管理控制台,却提示登陆失败. 翻看官方的release文档后,得知由于账号gues ...

  8. Yii2-Redis使用小记 - Cache(转)

    前些天简单学习了下 Redis,现在准备在项目上使用它了.我们目前用的是 Yii2 框架,在官网搜索了下 Redis,就发现了yii2-redis这扩展. 安装后使用超简单,打开 common/con ...

  9. Hibernate 查询MatchMode的四种模式

    Hibernate 查询MatchMode的四种模式 MatchMode.START:字符串在最前面的位置.相当于"like 'key%'" MatchMode.END:字符串在最 ...

  10. 新浪微博客户端(63)-使用block进行链式编程

    Person.h #import <Foundation/Foundation.h> @interface Person : NSObject - (Person *(^)())study ...