【Struts2+Hibernate4】开发学生信息管理功能(二)
来源:互联网 发布:php 面向对象 标准 编辑:程序博客网 时间:2024/05/17 22:36
用户登录页模块的实现
创建SessionFactory工具类
我们使用HIbernate框架,必然会使用的SessionFactory来创建Session,因此最好先建立一个
MyHIbernateSessionFactory类,来获取SessionFactory对象。
具体代码如下:
package com.demo.util;import org.hibernate.SessionFactory;import org.hibernate.cfg.Configuration;import org.hibernate.service.ServiceRegistry;import org.hibernate.service.ServiceRegistryBuilder;public class MyHIbernateSessionFactory {private static SessionFactory sessionFactory;//构造方法私有化,保证单例模式private MyHIbernateSessionFactory(){}//公有静态方法,获得会话工厂对象public static SessionFactory getSessionFactory(){if (sessionFactory == null) { Configuration config =new Configuration().configure(); ServiceRegistry ServiceRegitry=new ServiceRegistryBuilder().applySettings(config.getProperties()).buildServiceRegistry(); sessionFactory =config.buildSessionFactory(ServiceRegitry); return sessionFactory;} else {return sessionFactory;}} }
既然要实现用户登录,那么就需要一些用户,我们先添加一个,添加的话我们可以使用如下的方法:
建立TestUsers测试类:
package com.demo.entity;import org.hibernate.Session;import org.hibernate.Transaction;import org.junit.Test;import com.demo.util.MyHIbernateSessionFactory;public class TestUsers {@Testpublic void testSave(){Session session = MyHIbernateSessionFactory.getSessionFactory().getCurrentSession();Transaction tx = session.beginTransaction();Users users = new Users();users.setUsername("Jack");users.setPassword("123456");session.save(users);tx.commit();MyHIbernateSessionFactory.getSessionFactory().close();}}
控制台显示:
数据库显示:
用户登录模块持久层
由于项目比较小,就不再业务逻辑层,直接使用持久层和控制层进行交互,也就是控制层依赖持久层,要实现面
向接口编程,因此首先建立的是UsersDao接口,其次就是UsersDao的具体实现类UsersDaoImpl类。
UsersDao接口:
package com.demo.dao;import com.demo.entity.Users;public interface UsersDAO {public boolean usersLogin(Users users);}
UsersDaoImpl类:
package com.demo.dao.impl;import java.util.List;import org.hibernate.Query;import org.hibernate.Session;import org.hibernate.Transaction;import com.demo.dao.UsersDAO;import com.demo.entity.Users;import com.demo.util.MyHIbernateSessionFactory;public class UsersDAOImpl implements UsersDAO {@SuppressWarnings("rawtypes")@Overridepublic boolean usersLogin(Users users) {Transaction tx = null;String hql = "";try {Session session = MyHIbernateSessionFactory.getSessionFactory().getCurrentSession();tx = session.beginTransaction();hql = "from Users where username = ? and password = ?";Query query = session.createQuery(hql);query.setParameter(0, users.getUsername());query.setParameter(1, users.getPassword());List list = query.list();tx.commit();if (list.size() > 0) {return true;} else {return false;}} catch (Exception e) {e.printStackTrace();return false;} finally {if(tx != null){tx = null;}}}}
我们来测试一下我们写的dao层:
package com.demo.dao;import org.junit.Test;import com.demo.dao.impl.UsersDAOImpl;import com.demo.entity.Users;import junit.framework.Assert;public class TestUsersDAO {@Testpublic void testUsersLogin(){UsersDAO usersDAO = new UsersDAOImpl();Users users = new Users(1,"Jack","123456");Assert.assertEquals(true, usersDAO.usersLogin(users));}}
JUnit测试成功表示逻辑是正确的。
用户登录模块控制层
控制层具体和表示才层,也即是JSP页面进行交互以及调用,我们也需要设计一个所有Action的父类,也就是
SuperAction,而且这个类还必须继承ActionSupport,以免获得较好的应用,为了获得常用的内置对象采用耦合
IOC方式注入属性,需要实现下面的三个接口ServletRequestAware、ServletResponseAware和
ServletContextAware接口。
SuperAction类:
package com.demo.action;import javax.servlet.ServletContext;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;import org.apache.struts2.interceptor.ServletRequestAware;import org.apache.struts2.interceptor.ServletResponseAware;import org.apache.struts2.util.ServletContextAware;import com.opensymphony.xwork2.ActionSupport;/** * 所有Action动作的父类 * @author Administrator * @date 2016年12月16日 */@SuppressWarnings("serial")public class SuperAction extends ActionSupport implements ServletRequestAware,ServletResponseAware,ServletContextAware {protected HttpServletRequest request;protected HttpServletResponse response;protected ServletContext context;protected HttpSession session;@Overridepublic void setServletContext(ServletContext context) {this.context = context;}@Overridepublic void setServletResponse(HttpServletResponse response) {this.response = response;}@Overridepublic void setServletRequest(HttpServletRequest request) {this.request = request;this.session = this.request.getSession();}}
UsersAction类需要实现继承SuperAction类,实现ModelDriven<T>接口,采用模型驱动接收表单数据。
UsersAction类:
package com.demo.action;import org.apache.struts2.interceptor.validation.SkipValidation;import com.demo.dao.UsersDAO;import com.demo.dao.impl.UsersDAOImpl;import com.demo.entity.Users;import com.opensymphony.xwork2.ModelDriven;@SuppressWarnings("serial")public class UsersAction extends SuperAction implements ModelDriven<Users> {private Users users = new Users();@Overridepublic Users getModel() {return this.users;}//用户登录方法public String login(){UsersDAO usersDAO = new UsersDAOImpl();if (usersDAO.usersLogin(users)) {session.setAttribute("loginUserName",users.getUsername());return "login_success";} else {return "login_failure";}}@SkipValidation//用户退出方法public String logout(){if(session.getAttribute("loginUserName") != null){session.removeAttribute("loginUserName");}return "logout_success";}@Overridepublic void validate() {if ("".equals(users.getUsername().trim())) {this.addFieldError("usernameError", "用户名不能为空!");} if (users.getPassword().length() < 6) {this.addFieldError("passwordError", "密码长度不少于六位!");} }}
接下里就是配置Action:
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN""http://struts.apache.org/dtds/struts-2.3.dtd"><struts> <package name="default" namespace="/" extends="struts-default" /> <package name="users" namespace="/users" extends="default"> <action name="*_*" class="com.demo.action.{1}Action" method="{2}"> <result name="login_success">/users/Users_login_success.jsp</result> <result name="login_failure">/users/Users_login.jsp</result> <result name="logout_success">/users/Users_login.jsp</result> <result name="input">/users/Users_login.jsp</result> </action> </package></struts>
页面调用
和用户登录相关的页面有这几处:
我们启动Tomcat服务器进行测试的效果:
输入先前我们添加的唯一一个用户Jack和密码123456
点击登录之后:
我们输入一个错的用户或密码:
这个用户登录模块就做到这里。
- 【Struts2+Hibernate4】开发学生信息管理功能(二)
- 【Struts2+Hibernate4】开发学生信息管理功能(一)
- 【Struts2+Hibernate4】开发学生信息管理功能(三)
- 使用Struts2+Hibernate开发学生信息管理功能
- 慕课网 使用Struts2+Hibernate开发学生信息管理功能
- 使用Struts2+Hibernate开发学生信息管理系统
- 基于struts2开发的学生信息管理系统
- 学生信息管理系统(二)
- 学生信息管理系(二)
- 用java开发学生信息管理系统(SIMS,二)
- 学生信息管理系统(struts2+Hibernate)(1)
- Struts2+Hibernate4整合(二)
- 学生信息管理系统(二)----错误处理
- 学生信息管理系统问题(二)
- 学生信息管理系统问题集锦(二)
- 学生信息管理系统 那些事儿(二)
- 学生信息管理系统问题(二)
- 学生信息管理系统总结(二)
- 【ife】任务七:实现常见的技术产品官网的页面架构及样式布局
- Oracle数据库学习1之简单的理论知识
- 软件开发“人才荒”高级人才最吃香
- Android 2016新技术
- zookeeper深入学习(2)---客户端监控服务器端的上下线
- 【Struts2+Hibernate4】开发学生信息管理功能(二)
- JQurey拖拽
- 解决ubuntu下gedit插件无法勾选的问题
- Zigee协议栈之基础
- NSDateFormatter setDateFormat 自定义日期/时间格式
- Android之---获取手机屏幕、应用的宽和高
- MAC连接安卓手机通过adb指令安装apk
- Linux 下的Bluetooth 架构
- SQL中GROUP BY的理解