基于MVC的jpetstore项目分析
下面是基于MVC的jpetstore项目分析:jpetstore:
github地址:https://github.com/SwordHarry/Jpetstore
使用环境:IntelliJ IDEA
开发架构:MVC
数据库连接:JDBC
一、准备工作
创建项目,选择为java web项目
输入项目名和项目路径
二、项目构建和分析
首先要编写该项目需要对Jpetstore的业务流程有非常充分的了解。
Jpetstore的业务大致分为三大块:
商品展示模块,用户登录和注册模块,订单生成模块
一个基于MVC的java web项目的目录结构如下
下面将从图片目录结构从上到下分析。
后端src:
src包下存放后端java的源代码。web文件夹下存放前端代码(html+css+js)。
src包下首先建立一个项目包,org表示非盈利机构,csu为博主在读大学英文简称(中南大学)。项目包下的内容有domain 领域对象,persistence 持久化,service 服务层,sql 里面是sql文件,web 里面存放过滤器和servlet。
Model 层:domain,persistence,service
Controller层:src/web
View层:web
(1)首先看domain包,即领域对象:
Account类保存了用户的全部信息。
Cart类为购物车,CartItem为购物车中的商品项,Cart的成员变量有CartItem类,他们之间是聚合关系。Cart类中有关于CartItem的成员变量:
private final Map<String, CartItem> itemMap = Collections.synchronizedMap(new HashMap<String, CartItem>());
private final List<CartItem> itemList = new ArrayList<CartItem>();
Category 种类,为商品展示的大类,该项目将商品展示分为三层,Category为大类,如猫,狗等,product为中类,又指猫中的哪一种类别,item为小类,具体到哪一只动物。页面展示的时候也分这三类逐层展示。他们之间的关联关系通过各自的ID属性关联起来,即小类的成员变量中有大类的ID。
Order为订单,LineItem为订单中的商品项,与购物车类似,他们之间是组合关系。Order类中有关于LineItem的成员变量:
private List<LineItem> lineItems = new ArrayList<LineItem>();
Sequence 序列,功能为模拟数据库中的自增列,即在数据库中订单表中OrderId一列是自增的,通过Sequence实现,即Order类中的orderId属性实际上由Sequence决定。
Item,CartItem,LineItem三者也有联系。只是博主在这里有个疑问(?),CartItem和LineItem理应可以直接继承Item类,但是在jpetstore源码中,CartItem和LineItem成员变量中都有一个Item对象,并没有直接继承Item类。
(2)第二个包是persistence持久化包,即和数据库交互的包:
DBUtil类为创建数据库连接的类。
persistence 层使用了面向接口编程,针对每个domain包里的对象都有一个DAO接口与之对应,DAO接口直接定义了项目的详细业务,即需要在项目里实现的功能,如用户的增删改查,impl包里是所有DAO类的实现。
(3)第三个包是service服务包,该包就三个类,也是直接反应了该项目的三个模块:
service层负责调用DAO层的方法。
(4)最后一个包是web包,即过滤器和servlet:
项目中几乎每个页面跳转都配有一个servlet,过滤器CodeFilter类为指定编码格式(UTF-8)
对于每个servlet和过滤器,在项目/WEB-INF文件夹下有web.xml配置文件,该文件是对所有serlvet和过滤器的配置信息。
对于servlet,一个配置项格式为:
<servlet><servlet-name>MainServlet</servlet-name><servlet-class>org.csu.mypetstore.web.servlet.MainServlet</servlet-class>
</servlet>
<servlet-mapping><servlet-name>MainServlet</servlet-name><url-pattern>/main</url-pattern>
</servlet-mapping>
servlet/servlet-name为一个servlet的类名,servlet/servlet-class为该servlet的完整包名。
servlet-mapping/url-pattern为对应servlet的url请求地址,前端界面访问servlet提交请求通过该url。
对于filter,一个配置格式为:
<filter><filter-name>CodeFilter</filter-name><filter-class>org.csu.mypetstore.web.filter.CodeFilter</filter-class>
</filter>
<filter-mapping><filter-name>CodeFilter</filter-name><url-pattern>/*</url-pattern><dispatcher>REQUEST</dispatcher>
</filter-mapping>
与servlet同理,其中filter-mapping/url-pattern为对于指定的url,每当客户端发出该请求,将先被过滤器接收,经过处理后才转交给对应servlet,而dispatcher的属性详细参照https://www.cnblogs.com/xrq730/p/4929029.html,此处不做详细说明,REQUEST指一般有几次请求就会走几次指定过滤器
注意<dispatcher></dispatcher>必须写在filter-mapping的最后。
接下来是前端。
web文件夹下存放css,js,images,WEB-INF等文件夹。WEB-INF是Java的WEB应用的安全目录。所谓安全就是客户端无法访问,只有服务端可以访问的目录。
现我们只关心WEB-INF目录下的内容。
WEB-INF下有web.xml配置文件和jsp文件夹,jsp文件夹里面根据展示内容又分为不同的文件夹。下面介绍一下页面关联关系中的一种:页面包含
common文件夹下存放其他jsp都包含的头部jsp和尾部jsp。
jsp包含头部jsp:
<%@include file="../common/IncludeTop.jsp"%>
这样就相当于将IncludeTop.jsp中的所有代码嵌入到当前位置。这么做能实现前端的组件化开发和省略大部分相同代码。
以上,这是一个对Jpetstore的粗略分析MVC架构的博客。
基于MVC的jpetstore项目分析相关推荐
- AngularJS基于MVC的复杂操作案例
AngularJS基于MVC的复杂操作案例 <!DOCTYPE html> <html><head><meta charset="UTF-8&quo ...
- java三层 开源_java 山寨qq 聊天工具(基于mvc三层架构,附 mvc架构模式pdf说明文档)支持开源...
[实例简介] java 山寨qq 聊天工具(基于mvc三层架构,附 mvc架构模式pdf说明文档)支持开源 [实例截图] [核心代码] java山寨qq聊天工具(基于mvc三层架构,附mvc架构模式p ...
- [转]Asp.Net大型项目实践(11)-基于MVC Action粒度的权限管理【续】【源码在这里】(在线demo,全部源码)...
本文转自:http://www.cnblogs.com/legendxian/archive/2010/01/25/1655551.html 接上篇Asp.Net大型项目实践(10)-基于MVC Ac ...
- 基于MVC的网站和在线教育系统
最近老表说要创业,想要做一个网站做宣传,还想要一个在线教育系统. 学习了一部分 Java, 决定用.Net MVC做官网或直接做成静态HTML网站,主要是因为.Net MVC 技术简单,效率高,需求 ...
- HEVC新技术(一):基于MVC的AMVP技术
基于MVC(Motion Vector Competition)的AMVP(Advanced Motion Vector Prediction) 技术是HEVC采用的新技术之一. 所谓AMVP,就是通 ...
- 最新的基于mvc毕业设计题目50例
基于mvc毕业设计题目1-10题 1.基于MVC的地方高校双学位网上报名系统的开发 2.基于MVC模式网上拍卖系统的设计与实现 3.基于MVC模式的Spring框架的应用与研究 4.基于MVC模式的S ...
- servlet+javabean+jdbc+mysql基于MVC模式的课件管理系统,有三个表的增删改查和课件搜索、课件上传、课件下载功能, 具体功能请看界面上的导航条
源码支持在idea.eclipse.myeclipse运行,数据库采用MySQL数据库,项目采用mvc设计模式开发,页面采用jsp+html+css+js完成. servlet+javabean+jd ...
- 基于MVC设计(Java Web程序)----图书馆系统
文章目录 基于MVC设计----图书馆系统 整体项目运行截图 登录设计(MVC设计模式) 登录功能源代码 总结 基于MVC设计----图书馆系统 这一学期学习了JavaWeb开发, 课程结束时老师给的 ...
- H5智能内核-基于MVC架构的全新Zoomla!逐浪CMS2 x3.8发布
点此进入下载https://www.z01.com/down/3067.shtml [高速免费下载通道↓] 详细介绍: 北京时间2016年11月16日,国内领先的WEB与移动内核软件研发厂商-Zoom ...
最新文章
- 使用MASM03 - Win32汇编语言011
- 快手团队长文解读:基于FPGA加速的自动语音识别在大规模直播和短视频场景的应用...
- boost::shared_future相关的测试程序
- 天池 在线编程 安排面试城市(贪心)
- 无法打开Win11系统小组件怎么办
- mysql 存储过程 sql变量_SQL基础-变量 存储过程和函数
- 【华为云技术分享】《跟唐老师学习云网络》 - Bridge网桥
- 虚拟机控制数据结构 (VMCS)状态转换
- Spark on YARN的部署
- 谈谈我在自然语言处理进阶上的一些个人拙见
- python语言是非跨平台语言_python特点
- Windows Phone开发(12):认识一下独具个性的磁贴
- 笔记——c51的led点阵流动字幕
- Android招聘心得分享
- win10 如何使用命令简单的禁用自带键盘
- hdu6105(博弈)
- 分享一些数据分析师免费的课程
- newt.h:没有那个文件或目录
- python实验结论_Python基础(上)实验报告
- 5. 数据库题(以个人熟悉数据库为准、按要求写出sql) (1)	计算每个人的总成绩并排名(要求显示字段:学号,姓名,总成绩) (2)	计算每个人单科的最高成绩(要求显示字段: 学号,姓名,课程,最