博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
struts2和hibernate整合的小Demo
阅读量:6312 次
发布时间:2019-06-22

本文共 10627 字,大约阅读时间需要 35 分钟。

 


 

创建一个web项目。


 

导入jar包


配置web.xml

<-- Struts的核心过滤器配置-->
struts
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
struts
*.action
struts
*.jsp

 

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


com.mysql.jdbc.Driver
jdbc:mysql://localhost:3306/demo
root
123
org.hibernate.dialect.MySQLDialect
true
true
update
thread

 

创建一个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, 数据映射文件,对应的分别是数据字段。

 

创建一个包存放专门用来工具类,获取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" %>    登陆页面        
username:
password:

 

在web目录下创建users-->目录存放-->fails.jsp作为登陆失败后返回的页面。
<%@ page contentType="text/html;charset=UTF-8" language="java" %>    Title你失败了。

 

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

<%@ page contentType="text/html;charset=UTF-8" language="java" %>    Title你成功了。
在src目录下创建一个struts.xml配置文件。
/users/success.jsp
/users/fails.jsp

 

在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
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对象 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的配置:(红色标注)

/users/success.jsp
/users/fails.jsp
/users/login.jsp

 

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

 

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

 

 

测试注销方法:

 

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

 

 

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

 struts.xml

 

 
/users/success.jsp
/users/fails.jsp
/users/login.jsp

转载于:https://www.cnblogs.com/wdnnccey/p/5994809.html

你可能感兴趣的文章
分享10款漂亮实用的CSS3按钮
查看>>
安装nginx 常见错误及 解决方法
查看>>
在之前链表的基础上改良的链表
查看>>
android编译系统makefile(Android.mk)写法
查看>>
MD5源代码C++
查看>>
Eclipse 添加 Ibator
查看>>
Linux中变量$#,$@,$0,$1,$2,$*,$$,$?的含义
查看>>
Python编程语言
查看>>
十四、转到 linux
查看>>
Got error 241 'Invalid schema
查看>>
ReferenceError: event is not defined
查看>>
男人要内在美,更要外在美
查看>>
为什么要跟别人比?
查看>>
app启动白屏
查看>>
Oracle 提高查询性能(基础)
查看>>
学习知识应该像织网一样去学习——“网状学习法”
查看>>
Hadoop集群完全分布式安装
查看>>
QString,char,string之间赋值
查看>>
我的友情链接
查看>>
Nginx+mysql+php-fpm负载均衡配置实例
查看>>