一、struts2和hibernate整合

1.整合

 StrutsPrepareAndExecuteFilter作用详解:  https://blog.csdn.net/clk_esunny/article/details/80293978

过滤器和拦截器

  • 拦截器是基于java的反射机制的,而过滤器是基于函数回调。
  • 在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次;
  • 拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用;
  • 拦截器可以访问action上下文、值栈里的对象,而过滤器不能访问。
  • 配置struts2.xml

  • 配置hibernate.cfg.xml 连接数据库的信息

2.创建实体类

3.生成实体类的对象关系映射文件

4.生成表结构

二、用户登录模块

1.

2.

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;}}}
  • 首先生成一个配置对象,调用configure()获得配置对象:

  • 需要一个服务注册对象,其中config.getProperties()读取属性文档,利用buildServiceRegistry()返回一个服务注册对象:
ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(config.getProperties()).buildServiceRegistry();

初始化sessionFactory

sessionFactory = config.buildSessionFactory(serviceRegistry);
  • 之后可以调用这个会话工具类的getSessionFactory()来返回一个会话工厂实例

Session工作原理

  • 1、客户首次访问服务器的一个页面时,服务器就会为该用户分配一个session对象,同时为这个session指定唯一的ID,并且将该ID发送到客户端并写入到cookie中,使得客户端与服务器的session建立一一对应的关系;
  • 2、当客户端继续访问服务器端的其它资源时,服务器不再为该客户分配新的session对象,直到客户端浏览器关闭、超时或调用session的invalidate()方法使其失效,客户端与服务器的会话结束。
  • 3、当客户重新打开浏览器访问网站时,服务器会重新为客户分配一个session对象,并重新分配sessionID。

session对象主要用于属性操作和会话管理,常用方法如下:

  • 1、public void setAttribute(String name,String value)设定指定名字的属性的值,并将它添加到session会话范围内,如果这个属性是会话范围内存在,则更改该属性的值。  比如在登录的时候调用该方法,保存登录成功的用户名:session.setAttribute("loginUserName", user.getUsername());
  • 2、public Object getAttribute(String name)在会话范围内获取指定名字的属性的值,返回值类型为object,如果该属性不存在,则返回null。
  • 3、public void removeAttribute(String name),删除指定名字的session属性,若该属性不存在,则出现异常。注销登录时,采用此方法删除对应的用户信息:session.removeAttribute("loginUserName");
  • 4、public void invalidate(),使session失效。可以立即使当前会话失效,原来会话中存储的所有对象都不能再被访问。
  • 5、public String getId( ),获取当前的会话ID。每个会话在服务器端都存在一个唯一的标示sessionID,session对象发送到浏览器的唯一数据就是sessionID,它一般存储在cookie中。
  • 6、public void setMaxInactiveInterval(int interval) 设置会话的最大持续时间,单位是秒,负数表明会话永不失效。
  • 7、public int getMaxInActiveInterval(),获取会话的最大持续时间。
  • 8、使用session对象的getCreationTime()和getLastAccessedTime()方法可以获取会话创建的时间和最后访问的时间,但其返回值是毫秒,一般需要使用下面的转换来获取具体日期和时间。
  • Date creationTime = new Date(session.getCreationTime());
  • Date accessedTime = new Date(session.getLastAccessedTime());

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

package service.impl;import java.util.List;import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import db.MyHibernateSessionFactory;
import service.UsersDAO;
import staffentity.Users;public class UsersDAOImpl implements UsersDAO{@Overridepublic 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=:username and password=:password ";Query query = session.createQuery(hql);query.setParameter("username", u.getUsername());query.setParameter("password", 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 = null;}}}}

4.设计所有action的父类

Struts2中通常直接使用Action来封装HTTP请求参数,因此,Action类里还应该包含与请求参数对应的属性,并且为属性提供对应的getter和setter方法。

ActionSupport类是一个工具类,它已经实现了Action接口。除此之外,它还实现了Validateable接口,提供了数据校验功能。通过继承该ActionSupport类,可以简化Struts 2的Action开发。
在Validatable接口中定义了一个validate()方法,重写该方法,如果校验表单输入域出现错误,则将错误添加到ActionSupport类的fieldErrors域中,然后通过OGNL表达式负责输出。
为了让Struts 2增加输入数据校验的功能,改写程序中的LoginAction,增加重写validate方法。

(数据校验:应用中,即使浏览者输入任何用户名、密码,系统也会处理用户请求。在我们整个应用中,这种空用户名、空密码的情况不会引起太大的问题。但如果数据需要保存到数据库,或者需要根据用户输入的用户名、密码查询数据,这些空输入可能引起异常。
为了避免用户的输入引起底层异常,通常我们会在进行业务逻辑操作之前,先执行基本的数据校验。)

  • 设计action父类
  • 继承ActionSupport:内置很多拦截器,方便以后使用
  • 为了获得常用的内置对象采用耦合IOC方式注入属性,比如request,respanse等,要实现以下接口,方便获得内置对象:

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;//全局对象@Overridepublic void setServletContext(ServletContext application) {// TODO Auto-generated method stubthis.application = application;}@Overridepublic void setServletResponse(HttpServletResponse response) {// TODO Auto-generated method stubthis.response = response;}@Overridepublic void setServletRequest(HttpServletRequest request) {// TODO Auto-generated method stubthis.request = request;this.session = this.request.getSession();}}

5.

package action;import org.apache.struts2.interceptor.validation.SkipValidation;import com.opensymphony.xwork2.ModelDriven;import service.UsersDAO;
import service.impl.UsersDAOImpl;
import staffentity.Users;public class UsersAction extends SuperAction implements ModelDriven<Users>{/*** */private static final long serialVersionUID = 1L;private Users user = new Users();//用户登录动作public String login() {UsersDAO udao = new UsersDAOImpl();if(udao.usersLogin(user)){//在session中保存登录成功的用户名session.setAttribute("loginUserName", user.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() {// TODO Auto-generated method stubsuper.validate();//用户名不能为空if("".equals(user.getUsername().trim())){this.addFieldError("usernameError", "用户名不能为空!");}if(user.getPassword().length()<6){this.addFieldError("passwordError", "密码长度不少于6位");}}@Overridepublic Users getModel() {// TODO Auto-generated method stubreturn this.user;}}

显示表单验证信息,配置:

企业人员信息管理(一)相关推荐

  1. 企业人员信息管理系统开发

    企业人员信息管理系统设计 一.需求分析: 某小型公司,主要有三类人员:经理.兼职技术人员和兼职推销员.这三类人员共同拥有的相关属性:姓名.编号:相关方法:获取当月薪水的getPay()方法.显示个人信 ...

  2. Winform开发框架之通用人员信息管理实现代码介绍

    我在上一篇<Winform开发框架之通用人员信息管理>随笔中介绍了这个通用人员信息管理的大致实现界面和思路,本篇就其中的实现细节做进一步的分析和共享,希望大家对其中的实现代码进行一个了解, ...

  3. 【java毕业设计】基于javaEE+原生Servlet+MySql的企业员工信息管理系统设计与实现(毕业论文+程序源码)——企业员工信息管理系统

    基于javaEE+原生Servlet+MySql的企业员工信息管理系统设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于javaEE+原生Servlet+MySql的企业员工信息管理系统设计 ...

  4. 企业一体化信息管理平台是什么

    企业一体化信息管理平台 系统功能特性: 一体化信息整合资源服务平台具备数据信息融合.运用集成化.輔助管理决策.企业门户网服务平台管理方法五大作用,完成业务管理系统横着集成化.数据信息信息竖向全线贯通. ...

  5. Javaweb + MVC 实现企业人员管理系统全过程记录(配项目所有代码及数据库文件)

    前言:因为研究生入学任务需要做一个企业人员管理系统,那就做呗... 项目及数据文件下载地址:https://download.csdn.net/download/qq_39410381/1154652 ...

  6. 基于lora的化工企业人员定位解决方案

    一.行业背景 2017年5月13日河北省沧州市利兴特种橡胶股份有限公司发生氯气泄漏事故,事故造成2人死亡.25伤. 2019年3月21日,江苏天嘉宜化工有限公司发生爆炸事故,事故造成47人死亡.90人 ...

  7. java毕业设计企业人事信息管理mybatis+源码+调试部署+系统+数据库+lw

    java毕业设计企业人事信息管理mybatis+源码+调试部署+系统+数据库+lw java毕业设计企业人事信息管理mybatis+源码+调试部署+系统+数据库+lw 本源码技术栈: 项目架构:B/S ...

  8. 【附源码】计算机毕业设计SSM企业员工信息管理

    项目运行 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclis ...

  9. 【计算机毕业设计】324企业人事信息管理系统设计与实现

    一.系统截图(需要演示视频可以私聊) 摘  要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式.本企业人事信息管理系统就是在这样的 ...

最新文章

  1. 16、设计模式-行为型模式-命令模式
  2. ASP.NET中数据缓存
  3. 一位刚刚成功上岸的智能车队员对于参赛经历总结与对比赛的建议
  4. 解决:夜神模拟器连不上adb的问题
  5. Python练习题:批量删除多个文件夹内的相同文件
  6. Tomcat中JVM内存溢出及合理配置(转:http://blog.csdn.net/ye1992/article/details/9344807)
  7. [Linux] Linux指令汇总(持续更新中...)
  8. pandas数据可视化_5利用Pandas进行强大的可视化以进行数据预处理
  9. linuxSAMBA共享
  10. “删库跑路”重现江湖,技术和制度如何保障数据安全?
  11. ttys和tty_Linux中tty、pty、pts的概念区别
  12. sqlserver object_id()函数
  13. 安卓手机怎么root_怎么在腾讯手机管家中一键获取Root权限
  14. 小小知识点(九)——拉盖尔高斯波束自由空间傍轴近似条件下的复振幅
  15. 将图片转化为txt文本显示
  16. mysql读写分离(springboot+mybatis+mysql)
  17. matlab 保存变量
  18. 高斯过程回归(Gaussian Process Regression)
  19. 人工晶状体在线公式A常数优化——多线程
  20. make 及 make clean 的作用

热门文章

  1. Eclipse + MTJ + WTK
  2. 【互动媒体技术赏析作业】
  3. 2022微信大数据挑战赛复盘,rank60+菜鸟
  4. 使用python合并地址本邮箱本
  5. android 循环输出字母,042 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 04 案例演示while循环的使用——循环输出英文字母...
  6. Python统计函数耗时的方法
  7. 使用线性回归、LGBM对二手车价格进行预测
  8. Android 蓝牙源码学习笔记
  9. 国内安装scoop的保姆教程
  10. thunder client轻量级api调用小记