本节书摘来自异步社区《Spring 3.0就这么简单》一书中的第1章,第1.2节,作者: 陈雄华 , 林开雄著,更多章节内容可以访问云栖社区“异步社区”公众号查看
1.2 实例功能概述
1.2.1 比Hello World更适用的实例
快速对Spring有一个切身的认识,没有什么比通过一个实际的例子更适合的了。Hello World是比较经典的入门实例,但Hello World太过简单,很难展现Spring的全貌,为了让Spring的功能轮廓更加清晰,通过一个功能涵盖面更广的景区网站登录模块替换经典的Hello World实例。选择登录功能模块是出于以下3个原因。
大家对于登录模块的业务功能再熟悉不过了,无须在业务功能介绍上花费时间。
登录模块麻雀虽小,五脏俱全,它涵盖了持久层数据访问操作、业务层事务管理以及展现层MVC等企业应用常见的功能。
本书希望通过一个景区网站贯穿始终,以便能够由点及面,使读者在单纯技术性学习的酣战中深刻理解应用程序的整体开发流程。
Spring拥有持久层、业务层和展现层的“原生技术”,分别是Spring JDBC、声明式事务和Spring MVC。为了充分展现Spring本身的魅力,在本章中仅使用Spring的这些原生技术,在以后的章节中,我们将学习其他的持久层和展现层技术,只要用户愿意,就可以平滑地将其过渡到其他技术实现中。
1.2.2 实例功能简介
景区网站登录模块的功能很简单,首先登录页面提供一个带用户名/密码的输入表单,用户填写并提交表单后,服务端程序检查是否有匹配的用户名/密码。如果用户名/密码不匹配,返回到登录页面,并给出提示。如果用户名/密码匹配,记录用户的成功登录日志,更新用户的最后登录时间和IP地址,然后重定向到景区后台欢迎页面,如图1-2所示。
在持久层拥有两个DAO类,分别是UserDao和LoginLogDao,在业务层对应一个业务类UserService,在展现层拥有一个LoginController类和两个JSP页面,分别是登录页面login.jsp和欢迎页面main.jsp。
下面通过如图1-3所示的时序图来描述景区网站登录模块的整体交互流程。
(1)首先用户访问login.jsp,返回带用户名/密码表单的登录页面。
图1-3 登录模块整体交互流程
(2)用户在登录页面输入用户名/密码,提交表单到服务器,Spring根据配置调用LoginController控制器来响应登录请求。
(3)LoginController调用UserService#hashMatchUser()方法,根据用户名和密码查询是否存在匹配的用户,UserService内部通过调用持久层的UserDao完成具体的数据库访问操作。
(4)如果不存在匹配的用户,重定向到login.jsp页面,并报告错误,否则到下一步。
(5)LoginController调用UserService#findUserByUserName()方法,加载匹配的User对象并更新用户最近一次的登录时间和登录IP地址。
(6)LoginController调用UserService#loginSuccess()方法,进行登录成功的业务处理,创建一个LoginLog对象,并利用LoginLogDao将其插入数据库中。
(7)重定向到欢迎页面main.jsp,欢迎页面产生响应返回给用户。
实例的所有程序代码都位于chapter1目录下,本章后面的内容将逐一实现以上步骤的功能,完成这个实例的所有细节。