【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

        

        点击登录之后:


        我们输入一个错的用户或密码:

        

        这个用户登录模块就做到这里。



1 0
原创粉丝点击