博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
第二章:用户登录管理模块
阅读量:4310 次
发布时间:2019-06-06

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

本章简介

1.项目分层

2.创建MyHibernateSessionFactory

3.设计用户接口和实现类

4.设计所有Action父类

5.设计用户Action类

6.页面调用

7.完成显示登录成功用户名和注销功能

8.显示报错信息

 

1.项目分层

  • 实体层(模型层):entity包 学生类、用户类
  • 数据库层(模型层):db包
  • 接口层(模型层):service包
  • 接口实现层(模型层):service.impl包      
  • 动作层(控制层):action包    
  • Jsp页面(视图层):整个项目所有的JSP页面      

2.创建MyHibernateSessionFactory(会话工厂工具类)

  • 创建自定义的session工厂类

  将来我们可以调用工具类getSessionFactory()静态方法,返回会话工厂的一个实例

  会话工厂工具类MyHibernateSessionFactory.java

package db;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 serviceRegistry=new ServiceRegistryBuilder().applySettings(config.getProperties()).buildServiceRegistry();			sessionFactory=config.buildSessionFactory(serviceRegistry);			return sessionFactory;		}		else		{			return sessionFactory;		}	}}

 

3.设计用户接口和实现类

  • 用户业务逻辑接口:包含跟用户相关的所有一些方法,比方说用户的登录、注销等
  • 用户业务逻辑实现类:接口当中的方法都是抽象的,没有实现,我们还要实现它具体的接口实现类

用户业务逻辑接口

package service;import entity.Users;//用户业务逻辑接口public interface UsersDAO {		//用户登录方法	public boolean usersLogin(Users u);}

 

用户业务逻辑实现类

package service.impl;import java.util.List;import org.hibernate.Query;import org.hibernate.Session;import org.hibernate.Transaction;import db.MyHibernateSessionFactory;import entity.Users;import service.UsersDAO;public class UsersDAOImpl implements UsersDAO{	public boolean usersLogin(Users u) {		// TODO Auto-generated method stub		//事务对象		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);//传入hql语句			query.setParameter(0, u.getUsername());//传递参数(由于上面的hql语句用了两个占位符表示要传入两个参数)			query.setParameter(1, u.getPassword());			List list=query.list();//查询,返回结果集			tx.commit();//提交事务			//判断是否查到用户			if(list.size()>0)			{				return true;			}			else			{				return false;			}		}		catch(Exception ex)		{			ex.printStackTrace();//打印异常堆栈			return false;		}		finally		{			if(tx!=null)			{				//tx.commit();//不能重复提交事务				tx=null;			}		}	}}

 

测试方法是否正确

package service.impl;import junit.framework.Assert;import org.junit.Test;import service.UsersDAO;import entity.Users;public class TestUsersDAOImpl {		@Test	public void testUsersLogin()	{		Users u= new Users(1,"zhangsan","123456");		UsersDAO udao=new UsersDAOImpl();		Assert.assertEquals(true, udao.usersLogin(u));//断言	}}

 

4.设计所有Action父类

  • 设计action父类
  • 继承ActionSupport(ActionSupport内置了很多拦截器,方便我们以后的使用)
  • 为了获得常用的内置对象采用耦合IOC方式注入属性。

  需要实现以下三个接口:

  ServletRequestAware

  ServletResponseAware

  ServletContextAware

package 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动作的父类public class SuperAction extends ActionSupport implements ServletRequestAware,ServletResponseAware,ServletContextAware{	/**	 * 	 */	private static final long serialVersionUID = 1L;	protected HttpServletRequest request;//请求对象	protected HttpServletResponse response;//响应对象	protected HttpSession session;//会话对象	protected ServletContext application;//全局对象		public void setServletContext(ServletContext application) {		// TODO Auto-generated method stub		this.application=application;	}	public void setServletResponse(HttpServletResponse response) {		// TODO Auto-generated method stub		this.response=response;	}	public void setServletRequest(HttpServletRequest request) {		// TODO Auto-generated method stub		this.request=request;		this.session=this.request.getSession();	}}

 

5.设计用户Action类

  • 设计用户Action类,采用模型驱动接收表单数据。

  struts2接收表单数据的方式:普通属性、领域对象、模型驱动

设计用户Action类

package action;import service.UsersDAO;import service.impl.UsersDAOImpl;import com.opensymphony.xwork2.ModelDriven;import entity.Users;public class UsersAction extends SuperAction implements ModelDriven
{ /** * */ private static final long serialVersionUID = 1L; private Users user=new Users(); //用户登录动作 public String login() { UsersDAO udao = new UsersDAOImpl(); if(udao.usersLogin(user)) { return "login_success";//返回一个结果集 } else { return "login_failure"; } } public Users getModel() { // TODO Auto-generated method stub return this.user; } }

需要在struts.xml配置文档当中来注册

/users/Users_login_success.jsp
/users/Users_login.jsp

 

6.页面调用

  • 登录页面调用用户登录动作。

User_login.jsp

<%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8" %><%@ taglib prefix="s" uri="/struts-tags"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%>
用户登录

 

7.完成显示登录成功用户名和注销功能

8.显示报错信息

  • 在登录表单上显示表单验证出错信息

 

转载于:https://www.cnblogs.com/songsongblue/p/9532318.html

你可能感兴趣的文章
Lock重入锁
查看>>
docker安装 rabbitMq
查看>>
git 常用命令 入门
查看>>
关闭selinx nginx无法使用代理
查看>>
shell 脚本部署项目
查看>>
spring cloud zuul网关上传大文件
查看>>
springboot+mybatis日志显示SQL
查看>>
工作流中文乱码问题解决
查看>>
java并行流
查看>>
mysql查询某一个字段是否包含中文字符
查看>>
Java中equals和==的区别
查看>>
阻塞队列
查看>>
linux的基础知识
查看>>
PCB设计技巧与注意事项
查看>>
main函数带参数
查看>>
关于PCB设计中过孔能否打在焊盘上的两种观点
查看>>
京东技术架构(一)构建亿级前端读服务
查看>>
php 解决json_encode中文UNICODE转码问题
查看>>
LNMP 安装 thinkcmf提示404not found
查看>>
PHP empty、isset、innull的区别
查看>>