下面是基于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项目分析相关推荐

  1. AngularJS基于MVC的复杂操作案例

    AngularJS基于MVC的复杂操作案例 <!DOCTYPE html> <html><head><meta charset="UTF-8&quo ...

  2. java三层 开源_java 山寨qq 聊天工具(基于mvc三层架构,附 mvc架构模式pdf说明文档)支持开源...

    [实例简介] java 山寨qq 聊天工具(基于mvc三层架构,附 mvc架构模式pdf说明文档)支持开源 [实例截图] [核心代码] java山寨qq聊天工具(基于mvc三层架构,附mvc架构模式p ...

  3. [转]Asp.Net大型项目实践(11)-基于MVC Action粒度的权限管理【续】【源码在这里】(在线demo,全部源码)...

    本文转自:http://www.cnblogs.com/legendxian/archive/2010/01/25/1655551.html 接上篇Asp.Net大型项目实践(10)-基于MVC Ac ...

  4. 基于MVC的网站和在线教育系统

    最近老表说要创业,想要做一个网站做宣传,还想要一个在线教育系统. 学习了一部分 Java,  决定用.Net MVC做官网或直接做成静态HTML网站,主要是因为.Net MVC 技术简单,效率高,需求 ...

  5. HEVC新技术(一):基于MVC的AMVP技术

    基于MVC(Motion Vector Competition)的AMVP(Advanced Motion Vector Prediction) 技术是HEVC采用的新技术之一. 所谓AMVP,就是通 ...

  6. 最新的基于mvc毕业设计题目50例

    基于mvc毕业设计题目1-10题 1.基于MVC的地方高校双学位网上报名系统的开发 2.基于MVC模式网上拍卖系统的设计与实现 3.基于MVC模式的Spring框架的应用与研究 4.基于MVC模式的S ...

  7. servlet+javabean+jdbc+mysql基于MVC模式的课件管理系统,有三个表的增删改查和课件搜索、课件上传、课件下载功能, 具体功能请看界面上的导航条

    源码支持在idea.eclipse.myeclipse运行,数据库采用MySQL数据库,项目采用mvc设计模式开发,页面采用jsp+html+css+js完成. servlet+javabean+jd ...

  8. 基于MVC设计(Java Web程序)----图书馆系统

    文章目录 基于MVC设计----图书馆系统 整体项目运行截图 登录设计(MVC设计模式) 登录功能源代码 总结 基于MVC设计----图书馆系统 这一学期学习了JavaWeb开发, 课程结束时老师给的 ...

  9. H5智能内核-基于MVC架构的全新Zoomla!逐浪CMS2 x3.8发布

    点此进入下载https://www.z01.com/down/3067.shtml [高速免费下载通道↓] 详细介绍: 北京时间2016年11月16日,国内领先的WEB与移动内核软件研发厂商-Zoom ...

最新文章

  1. 使用MASM03 - Win32汇编语言011
  2. 快手团队长文解读:基于FPGA加速的自动语音识别在大规模直播和短视频场景的应用...
  3. boost::shared_future相关的测试程序
  4. 天池 在线编程 安排面试城市(贪心)
  5. 无法打开Win11系统小组件怎么办
  6. mysql 存储过程 sql变量_SQL基础-变量 存储过程和函数
  7. 【华为云技术分享】《跟唐老师学习云网络》 - Bridge网桥
  8. 虚拟机控制数据结构 (VMCS)状态转换
  9. Spark on YARN的部署
  10. 谈谈我在自然语言处理进阶上的一些个人拙见
  11. python语言是非跨平台语言_python特点
  12. Windows Phone开发(12):认识一下独具个性的磁贴
  13. 笔记——c51的led点阵流动字幕
  14. Android招聘心得分享
  15. win10 如何使用命令简单的禁用自带键盘
  16. hdu6105(博弈)
  17. 分享一些数据分析师免费的课程
  18. newt.h:没有那个文件或目录
  19. python实验结论_Python基础(上)实验报告
  20. 5. 数据库题(以个人熟悉数据库为准、按要求写出sql) (1) 计算每个人的总成绩并排名(要求显示字段:学号,姓名,总成绩) (2) 计算每个人单科的最高成绩(要求显示字段: 学号,姓名,课程,最

热门文章

  1. mysql 完整性概念_mysql基础知识
  2. java 路径通配符_java实现路径通配符*,**,?
  3. Spring DI(依赖注入)构造器注入篇
  4. R con not resolved of types
  5. linux 文件系统字体小,基于嵌入式Linux平台的最小文件系统的制作
  6. JAVA 类加载机制学习笔记
  7. jumpserver简易安装
  8. FileReader图片上传并预览
  9. Babel指南——基本环境搭建
  10. 运用基础班知识做一个网页