演示视频:
https://www.bilibili.com/video/BV115411e7rM/
第五章 日常查询及用户管理模块概要设计
5.1 框架结构设计
5.1.1 框架图
5.1.2 框架介绍
开发使用框架为spring+struts2+hibernate,规则为cn下面为以各个模块命名的包,里面分为action,model和service三层。
Spring是一个开源框架,Spring 是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。Spring通过一种称作控制反转(IoC)的技术促进了松耦合。当应用了IoC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象。你可以认为IoC与JNDI相反——不是对象从容器中查找依赖,而是容器在对象初始化时不等对象请求就主动将依赖传递给它。Spring提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务(例如审计(auditing)和事务(transaction)管理)进行内聚性的开发。应用对象只实现它们应该做的——完成业务逻辑——仅此而已。它们并不负责(甚至是意识)其它的系统级关注点,例如日志或事务支持。Spring包含并管理应用对象的配置和生命周期,在这个意义上它是一种容器,你可以配置你的每个bean如何被创建——基于一个可配置原型(prototype),你的bean可以创建一个单独的实例或者每次需要时都生成一个新的实例——以及它们是如何相互关联的。然而,Spring不应该被混同于传统的重量级的EJB容器,它们经常是庞大与笨重的,难以使用。
根目录下spring.xml为spring主配置文件,config/spring下为各模块分配置文件。
Struts 2是Struts的下一代产品,是在 struts 1和WebWork的技术基础上进行了合并的全新的Struts 2框架。其全新的Struts 2的体系结构与Struts 1的体系结构差别巨大。Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与Servlet API完全脱离开,所以Struts 2可以理解为WebWork的更新产品。虽然从Struts 1到Struts 2有着太大的变化,但是相对于WebWork,Struts 2的变化很小。当Web容器收到 请求(HttpServletRequest)它将请求传递给一个标准的的过滤链包括(ActionContextCleanUp)过滤器,然后经过Other filters(SiteMesh ,etc),接下来需要调用FilterDispatcher核心控制器,然后它调用ActionMapper确定请求那个Action,ActionMapper返回一个收集Action详细信息的ActionMaping对象。接下来FilterDispatcher将控制权委派给ActionProxy,ActionProxy调用配置管理器(ConfigurationManager) 从配置文件中读取配置信息(struts.xml),然后创建ActionInvocation对象,ActionInvocation在调用Action之前会依次的调用所用配置拦截器(Interceptor N) 一旦执行结果返回结果字符串ActionInvocation负责查找结果字符串对应的(Result)然后执行这个Result Result会调用一些模版(JSP)来呈现页面,之后拦截器(Interceptor N)会在被执行(顺序和Action执行之前相反)最后响应(HttpServletResponse)被返回在web.xml中配置的那些过滤器和(核心控制器)(FilterDispatcher)。
根目录下struts.xml为struts2的主配置文件,config/struts下为各模块分配置文件。
JPA全称Java Persistence API.JPA通过JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。JPA是需要Provider来实现其功能的,Hibernate就是JPA Provider中很强的一个,目前来说应该无人能出其右。从功能上来说,JPA现在就是Hibernate功能的一个子集。Hibernate 从3.2开始,就开始兼容JPA。
根目录下sql.properties为数据库配置信息。
5.2 用户登录
个人助手的很多信息都是与用户关联的,在使用软件前必须要登录,这样才可以看到属于自己的信息。
5.2.1 流程图
5.2.2 时序图
5.2.3 设计思想
个人助手的许多信息与用户相关,所以用户登录后,用户信息要伴随整个使用软件过程,以便用户只能查看属于自己的信息。在用户名密码验证通过后可以把用户的信息放入session,使密码保管箱,通讯录等相关功能绝对安全,这样可以保证用户能看到自己的信息,又不会看到他人的信息。
5.2.4 效果展示
登录界面。
用户输入用户名,密码,验证码后,程序进入后台验证,通过与数据库中用户注册信息进行比对,符合则登录成功,否则禁止登录。
5.3 修改密码
用户可以修改自己的登录密码。
5.3.1 流程图
5.3.2 时序图
5.3.3 设计思想
用户要想修改密码,必须知道原密码,以防止他人随意修改。这样在修改之前就要输入原密码,但用户的登录密码是经过MD5加密的,用户输入的原密码是明文,要想进行比对就只有把用户输入的原密码也进行MD5加密,比较加密后的数据是否一致,以确定输入的原密码正不正确。
5.3.4 效果展示
登录后点击主页面左上方的,进入密码修改页面,
输入正确的信息后保存即可,输入错误会有相应的提示。
5.4 万年历
万年历就是记录一定时间范围内的具体阳历或阴历的日期的年历,方便有需要的人查询使用
5.4.1 设计思想
有很多免费的万年历js插件,可以把这些插件引入到项目中。
5.4.2 效果展示
点击左侧树的“万年历”,进入万年历查询页面,
在选择框中可以选择不同的年份和月份,鼠标放在相应的日子数字上,会有提示信息。
5.5 身份证
身份证是用于证明持有人身份的证件,多由各国或地区政府发行予公民。身份证查询主要提供公民的发证机关所在地,生日和性别信息。
5.5.1 流程图
5.5.2 时序图
5.5.3 设计思想
根据身份证编码规则,生日和性别都可以直接得到,但所在地就需要数据的支持,所以需要建一张身份证前六位数字与地域的信息表,
icode为身份证前六位数字,iname是对应的地域名称
5.5.4 效果展示
点击左侧树的“身份证”,进入身份证信息查询页面,
输入正确的身份证号码即可查询出相关的信息,
5.6 邮政编码
邮政编码是用阿拉伯数字组成,代表投递邮件的邮局的一种专用代号,也是这个局投递范围内的居民和单位通信的代号。
5.6.1 流程图
5.6.2 时序图
5.6.3 设计思想
邮政编码是固定的地域编码,所以需要建一张邮政编码与地域的信息表,
Postname地域名称,postcode是对应的邮政编码。
5.6.4 效果展示
点击左侧树的“邮政编码”,进入邮政编码查询页面,
可以通过地域查询邮政编码,也可以通过邮政编码查询地域。左侧输入框是通过地域查询邮政编码,结果在其下面显示,
右侧输入框是通过邮政编码查询地域,结果在其下面显示,
5.7 长途区号
长途区号就是长途电话需要拨打的地域号码。
5.7.1 流程图
5.7.2 时序图
5.7.3 设计思想
长途区号是固定的,所以需要建一张长途区号与地域的信息表,
areaname地域名称,areacode是对应的长途区号。
5.7.4 效果展示
点击左侧树的“长途区号”,进入长途区号查询页面,
此功能与邮政编码一样可进行双向查询。
5.8 手机号码归属地
手机号码的编码规则详见4.2。
5.8.1 流程图
5.8.2 时序图
5.8.3 设计思想
根据手机号码的编码规则,需要建一张查询信息表,
Mnum是手机号码前7位,mcity是对应的归属地,msort是对应的运营商类别。
5.8.4 效果展示
点击左侧树的“手机号码归属地”,进入到查询页面,
输入正确的手机号,可进行查询。