OA管理系统总结

1.技术选型:
ssh2框架,struts的版本是2.1.8,spring的版本是4.2.4,hibernate的版本是5.0.7。项目中我们还使用到了jquery、jquery-validate校验框架、ckeditor富文本编辑器、easyUI等技术。
2.功能划分:
整个项目的功能包含用户权限系统、论坛系统、审批流转系统3部分组成
3.具体内容:
主页展示实现
主页的展示是通过frameset框架把整个页面划分成四个区域:
Index.jsp:内部定义frameset,划分成四个区域

Top.jsp:顶部logo、标题展示、用户信息的展示
Left.jsp:左侧菜单的展示,需要被权限控制
Right.jsp:右侧正文的展示
Bottom.jsp:底部信息的展示
用户系统:
用户系统也是整个系统的核心部分,所有的操作都是围绕用户建立起来的,无论什么系统都是在描述什么时间、什么地点、什么事情,贯穿整条线的一般都和用户有关系。
用户系统涉及到六张表的关联
岗位表(角色表)、部门表、用户表、用户角色表、角色权限表、权限表
在这里插入图片描述
角色表(岗位管理功能):
系统中,不同的用户所具备的功能是不一样的,所以我们在软件系统中需要区分不同的用户不同的操作,所以引入了权限控制;要使用权限一定是先分配权限,考虑到后期项目的扩展权限的增加,也为了分配权限的方便,所以我们引入了角色表,一个角色对应一个或多个权限,可以给用户叠加或移除角色来实现权限的增加和移除;所以把权限的分配功能设计在岗位管理模块
部门表:
  区分不同的职能部门,比如一级部门->一级子部门->一级孙子部门
用户表:
  记录所在部门,具有的角色集合(关联权限的集合)
权限表:
  Jsp中所有的超链接(直接访问action的操作)全部入库,记录部分路径
用户角色表:
  用户和角色是多对多的关系,通过中间表来存储用户和角色之间的关系
角色权限表:
  一组权限打包就是一个角色,角色和权限也是多对多的关系,此表为中间表
  
项目中的技术点:
  分配权限:
  查询所有权限列表,呈现出权限菜单的父子关系,通过jquery-treeview实现层级的展示,并可以权限、手动勾选多个提交。实现权限的分配;关于权限菜单的勾选操作,需要有熟练的jquery操作,比如选择器,查找兄弟节点、父级节点、上一个节点、儿子节点、从一组对象中过滤,增加、删除、修改dom对象的属性来实现页面动态的变化。
  使用权限:
  权限就是所有请求action方法的操作,大部分都是存在于jsp中;如果有权限在jsp页面就显示相应的左侧菜单和右侧内容的展示;两侧的链接都可以被权限控制。实现思路:
  正常访问拦截
  用户正常先登录系统,加载index.jsp页面,页面中的left.jsp和right.jsp需要被权限控制,所以index.jsp中的左侧和右侧对应的是一个action,在action中检查当前登录用户的身份;左侧的菜单不是每一项都有对应的链接(比如一级菜单,点击是打开二级菜单),查询到所有权限假设为下图的all,再查询我的权限菜单列表,下图的my,all<=all的。
  菜单的展示分两步,1、一级菜单的展示(没有url)2、二级菜单的展示;登录成功查询所有菜单信息(包含一级、二级)放置到application域中;在left.jsp直接遍历菜单,每个菜单显示之前判断自己的权限列表是否有这个权限
  在这里插入图片描述
  在这里插入图片描述
  
  地址栏访问或模拟工具请求拦截
  拦截器拦截所有action请求,检查是否有权限,如果有直接放行、未登录直接跳转到登录页面,登录没权限显示无权访问页面。
  右侧增删改查操作权限问题,通过自定义标签完成,因为自定义标签最终也会被翻译成html标签,所以可以通过拦截这个翻译的过程,自定义标签被解析的过程中判断这个操作是否有权限执行。有权限就显示这个标签,没权限直接跳过标签翻译的过程,忽略即可。
论坛系统:
论坛功能相对比较简单,涉及到版块、主贴、回帖、文章四个概念
  版块:帖子管理的大分类
  主贴:板块下发的帖
  回帖:主贴下评论
  文章:主贴+回帖
功能:
  版块增删改查
  
  主贴增删改查
  发帖的内容应该是包含文字和图片的,所以这里需要用到富文本编辑器来编辑发帖正文,它的原理是把编辑的内容转换成html标签的形式,直接入库即可,回显直接读取出来放置到jsp页面就能正常展示。发帖需要修改板块中的帖子数量,最后回帖时间等内容
  版块下的主贴展示需要安装一定的规则来展示,主要是考察sql的写法,比如置顶帖在最前面->精华帖和普通帖混排;这里主要使用CASE THEN给所有精华帖虚拟列进行降序排列。

回帖
  回帖需要修改文章数、回复数等相关信息。
  技术点:
  楼层的展示:通过迭代标签的state属性可以实现楼层的展示,注意,回帖内容可能被管理员删除(伪删除,只标识这行记录被删除,显示的时候判断标识状态),是不应该出现跳楼的情况的,所以发现被删除,在页面上展示灰色文字,此帖被管理员删除提示即可。

分页功能:
  分页功能就是在jsp页面上显示分页相关的快捷操作图标,比如上一页、下一页、跳转到指定页等操作;这里需要很多变量的显示,我们是使用pageBean对象在后台封装数据,所有的值全部计算好再传递到页面直接显示。
  技术点:
  页码的展示:通过算法确定jsp页面应该显示哪几个页码,分页码不足10页和大于10页的情况,还有其他情况。
  
审批流转
系统中涉及到公文流转,比如请假、加薪、报销,这些都是公司常见的办公流程,这里主要是通过jbpm定义工作流的方式来实现;jbpm绘制流程图指定每个步骤有那个用户来完成具体的操作。在这个模块中学习到提交带文件的表单(文件上传),文件下载功能
审批流程管理:
  这里主要是工作流文档的提交入库
表单模版管理
  定义请假、加薪、报销等操作的表单,和对应的流程定义绑定;定义好之后就可以在起草申请页面看到相应的功能
起草申请
  用户选择相应的模版进行请假、加薪、报销等操作,起草完申通过jbpm引擎加载工作流信息,通过登录的用户信息直接提交task到下一个流程

项目总结
一个web项目不外乎就是增删改查操作,所以扎实的sql基础还是非常重要的;不管使用什么持久层框架,将来执行都需要转换成sql语句的形式传递到数据库,所以我对持久层的理解就是“拼接sql”的框架。

增加:
  需要提交表单,直接保存数据回到列表页面即可
  
修改:
  点击修改超链接一定会传递id到后台查询数据,把查询结果传递到修改页面进行回显,同时需要在修改页面设置一个隐藏域来放置修改的这条数据的id值,在提交修改的时候使用id为条件更新数据。
  如果修改的过程中涉及到关联数据的回显信息,也需要传递到修改页面,常见的回显要求有【radio的回显】【checkbox的回显】【select下拉框的回显】【input的回显】,在回显的过程中。后面会学习到jquery异步请求回显数据
  
查询:
  在项目中有各种查询操作
  1.列表的查询,一般是查询所有
  select * from table
  2.列表查询带多条件
  select * from table where 1=1 and 条件1=值1 and 条件2=值2…
  3.列表查询带分页
  select * from table limit m,n
  4.根据部分id查询部分数据
  select * from table where id in(1,2,3,4)
  5.根据id查询一条记录
  Select * from table where id=?
  6.统计查询数量
  Select count(*) from table;
  7.查询的过程中去掉重复的记录distinct,比如查询所有的权限url的时候,就有多个菜单是使用的同一个权限url,我们在查询的时候就可以使用它去掉重复的数据
在这里插入图片描述

项目收获:
  F12调试技巧:查看network查询请求提交的具体参数,查看request请求头和respones响应头信息。
  加深了对接口和抽象类的理解:随着项目的模块功能递增,抽象父类是简化开发的必备技巧,可以封装BaseAction、BaseDao、BaseService等具体的工具类
  常量类:系统中会用到大量的常量,可以把它们都抽取到一个类中定义为常量,下次使用的时候直接通过常量获取需要的数据,防止字符串写错。
  密码问题:注册的时候应该把密码通过MD5加密,把密文存储到数据库,登录的时候获取到密码再通过MD5加密和数据库的密文比较确定是否登录成功;防止数据库被入侵账号安全的问题
  理解拦截器:系统的安全性是每个程序员的责任,我们的action方法都是用来处理我们前端请求的,一般我们都是现在jsp页面的超链接中的,这些请求我们都能掌控;但是一个请求的核心不外乎就是发送一个GET/POST请求,所以这样就会有问题,在地址栏直接输入action的地址也是可以直接访问的,通过http模拟工具(HttpTools)也是可以模拟出GET和POST的请求的,而且网络上传递的数据包都是可以被抓取和看到的;我们要避免不法分子通过以上的方式故意搞事情,比如非系统用户拦截到了我某个核心数据块的删除链接,他通过模拟GET、POST方式删除我的数据,这个我们是不允许出现的;所以可以使用Interceptor拦截所有的Action请求,判断此人有没有登录,如果登录此人的权限是否具备删除这条数据的能力;即使它有删除数据的权利,为了保全程序的安全,我们也对每个操作写入日志,在出现重大问题的时候可以稳妥的渡过难关。
  递归的场景:在项目中,有大量的操作是自关联查询,比如部门的层级、权限的层级
  Eclipse的问题:eclipse在开发过程中,有时候修改内容不一定会同步到tomcat的发布目录中去(比如添加jar包),这个目录可以在tomcat启动的时候打印,如果没修改过一般在工作空间中。这时候需要到发布目录中去对比。
  浏览器缓存:浏览器一般会自动存储静态资源,比如css和js文件,修改过项目中的静态资源,一般需要清空浏览器的缓存;F12看到304表示资源已经被缓存。

猜你喜欢

转载自blog.csdn.net/weixin_44142296/article/details/85065543