报告内容

调试分析Spring petclinic的springboot、spring framework两种实现:

1、列出所完成的实验内容。

2、比较两种实现的异同。

3、该案例体现了哪些架构风格,分别画出相应结构图。

4、选择一个功能,结合SpringMVC框架,描述请求响应的过程。

5、画出案例ER图。

6、画出案例功能模块图,假设对功能进行扩展,画出扩展后的功能模块图和ER图。

注意:

1、每一个图都要有编号,有标题,并且在正文中有文字描述。

2、报告要包含目录。

一、实验内容

(一)程序运行

1. Spring petclinic的springboot实现

(1)控制台输出信息

导入spring-petclinic-main项目,运行后控制台输出一下信息(部分):

(图1.1)

2)程序运行成功截图
HOME界面:

(图1.2)


Find Owners界面:

 (图1.3)


Veterinarians界面:

(图1.4)


ERROR界面:

 (图1.5)

2. Spring petclinicspring framework实现

(1)Tomcat部署
Apache Tomcat® - Welcome!上下载Tomcat的应用程序,配置系统相关的环境变量,在IDEA中配置Tomcat如下图所示:

(图1.6)

(2)程序运行成功截图
HOME界面如下图所示,其余界面与Spring petclinic的springboot实现相同,便不做展示。

 (图1.7)

3.在另一台设备访问Spring Petclinic案例

在电脑(服务器端)查找其IP地址为192.168.43.102,然后在手机浏览器(客户端)地址栏内输入192.168.43.102:8080后成功跳转至如下界面(其中图1.8(左)为运行springboot实现得到的结果,图1.8(右)运行spring framework实现得到的结果)。

 (图1.8)

(二)比较两个程序的目录结构

1、springboot实现的目录结构

Springboot实现的目录结构比较简单,如下图所示。在该实现中没有按照Spring开发框架那样将各个层次分开。该程序虽然建立了model包,但是像vet、owner、pet这些实体却没有放入model包内,而是将实体进行归类后建立新的包,例如,owner包中主要包含宠物(Pet)、主人(Owner)以及访客(Visit)的信息,vet包中主要包含兽医的信息,以上每个包中又包括Controller、Repository的代码。

(图1.9)

2、spring framework实现的目录结构

与Springboot实现不同,Spring Framework实现的目录结构更为清晰,层次更加分明(如下图1.10(左)所示)。其中utils包中包含了通用的、与业务无关的,可以独立出来,可供其他项目使用的工具类;model包对应数据访问层(Model层),其中的一个类对应了数据库的一个实体;Service包对应业务逻辑层(Service层),用于完成功能设计,实现业务功能;Web包对应的是控制层(Controller层),负责前后端交互,接收前端请求。Repository包作为数据仓库,居于业务逻辑层和数据层之间,将两者隔离开来,在它的内部封装了数据查询和存储的逻辑。它们直接的分层结构如图1.10(右)所示。

(图1.10)

3、对springboot实现目录结构进行优化

由于Springboot实现的目录结构比较混乱,需要对其进行优化,新建Controller包、Repository包分别用于存放控制器与数据仓库,并将原来的vet实体、owner实体移动至Model内。优化的结果如图1.11所示:

(图1.11)

(三)将数据库源改为MYSQL

1、实验步骤

下载并安装MYSQL数据库并配置完成后,建立名为Petclinic的数据库(账号:root 密码:root 端口:3306),导入..\spring-petclinic-main \src\main\resources\db\mysql下的sql文件(在这里为了避免错误,我并没有直接导入user.sql文件,而是手动更改了数据库的字符编码格式),导入成功后如下图所示:

 (图1.12)

在代码中启用MYSQL数据库, 在application.properties中加入如下代码:spring.profiles.active=mysql,更改application-mysql.properties中的MYSQL账户名、密码、数据库名、端口号后即可运行。(如图1.13)所示。

 (图1.13)

2、成功修改截图

运行程序后,在FIND OWNERS界面添加新的主人Zhou ZhiYang和它的宠物Black,添加完成后在Navicat软件中观察数据库Petclinic中的Owners和Pets表是否有改变,如图1.14所示。

(图1.14)

二、两种实现方式的异同

(一)相同点

两种实现方式均属于Spring框架家族。其均使用控制反转(IoC)的基于JavaBeans的应用程序配置;均使用模型-视图-控制器(MVC)的web表示层;均通过通过JDBC、Java持久性API(JPA)或Spring数据JPA进行实际的数据库访问;均使用基于JMX的应用监控;均使用AOP的声明性事务管理;均支持但不依赖于表示层的数据验证。

(二)不同点

Framework实现中由于其本身并非是容器,所以不得不随着JavaEE容器启动而装载,在本例中我们采用的是Tomcat来进行装载。

Spring Boot实现则打破了Java Web的开发模式:Tomcat+war包。其不需要使用Tomcat进行装载便可直接运行,主要为快速开发单个微服务、快速启动且最小化配置的spring应用而设计。SpringBoot简化了新Spring应用的初始搭建以及开发过程。它消除了设置Spring应用程序所需的XML配置,即尽可能的自动配置Spring应用,同时直接嵌入Tomcat、Jetty或Undertow(无需部署WAR文件),提供生产就绪功能,例如指标、运行状况检查和外部化配置等等,为更快和更高效的开发应用程序铺平了道路。在Petclinic实例中,framework实现需要我们自行下载、配置Tomcat,而Spring Boot实现则不需要配置即可直接运行。

三、该案例体现的架构风格


(一)spring MVC体系架构风格:

(图3.1)


(二)分层体系结构风格

 (图3.2)

四、描述SpringMVC请求响应的过程

(一)Spring MVC的工作流程

如图4.1所示,Spring MVC的工作流程如下:首先,客户端请求提交到DispatcherServlet,由DispatcherServlet控制器寻找一个或多个HandlerMapping,找到处理请求的Controller后,DispatcherServlet控制器将请求提交到Controller;Controller调用业务逻辑处理后,返回ModelAndView;DispatcherServlet寻找一个或多个ViewResoler视图解析器,找到ModelAndView指定的视图后,由视图负责将结果显示到客户端。

 (图4.1)

(二)以查看Vets为例

客户端在用户点击Veterinarians标签后发送请求,直接请求到DispatcherServlet。DispatcherServlet首先根据URI找到对应的HandlerMapping,找到处理请求的VetController后 ,DispatcherServlet控制器将请求提交到VetController; VetController调用clinicService处理后返回ModelAndView(Model是返回的数据对象即Vet的数据对象,View是个逻辑上的View); DispatcherServlet寻找一个或多个ViewResoler视图解析器,找到ModelAndView指定的视图后,DispatcherServlet控制器将Model数据(即有关Vets的数据)传递给视图,由视图负责将结果显示到客户端。

五、案例ER图

(一)Petclinic案例对应的关系模式

Petclinic共具有七种关系模式,分别如下所示:

①vets(id,first_name,last_name);              ②specialties(id,name);

③vet_specialties(vet_id,specialty_id);     ④types(id,name);

⑤owners(id,first_name,last_name,address,city,telephone);

⑥pets(id,name,birth_date,type_id,owner_id);

⑦visits(id,pet_id,visit_date);

(二)Petclinic案例对应的ER图

如图5.1所示,与(一)中的关系模式相比,增加了Treat、Own、visit关系与Visitors实体,使得E-R图更有逻辑性。

(图5.1)

六、案例功能模块图及拓展

(一)Petclinic案例的功能模块图

该案例的功能模块图如图6.1所示:


(图6.1) 

(二)扩展后的功能模块图与E-R图

1、拓展的功能

①添加登录系统,医生、宠物主人和管理员均可以登录系统。

②为每个医生增加科室(包括骨科、内科等等)。

③添加挂号功能,宠物主人可以通过挂号功能为自己的宠物在相应的科室内进行预约。

④增加病例功能,医生在为宠物诊疗的时候创建该宠物的病例,查看该宠物的病例,添加某个宠物的访客记录。

⑤添加管理员功能,管理员可以管理医生、科室、用户的信息(增删改查)。

2、拓展后的功能模块图

(图6.2)


3、拓展后的E-R图

(图6.3)

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐