基于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架构的博客。

基于Ajax的jpetstore是一个以Ajax技术为基础开发的网上宠物商店系统。通过Ajax的无刷新请求,在不刷新整个页面的情况下,实现了更流畅、更快速的网页交互体验。 基于Ajax的jpetstore的主要特点包括: 1.无需刷新页面:使用Ajax技术,实现了页面数据的异步加载和更新。用户可以在不刷新整个页面的情况下,执行各种操作,如添加商品到购物车、搜索商品、更新购物车等。 2.页面动态交互:通过Ajax可以实现动态加载和更新页面的内容,用户可以即时看到数据的变化。比如,当用户搜索商品时,系统会在用户输入内容时自动联想相关的商品名称,从而提供更快速的搜索体验。 3.增强用户体验:通过Ajax技术,可以在后台进行实时的数据验证和处理,从而提高系统的反应速度和性能。例如,在用户提交订单之前,可以通过Ajax在后台验证用户输入的数据是否合法,避免出现错误。 4.减少带宽和服务器压力:使用Ajax,可以将部分数据交互从客户端移到服务器端。当用户进行数据操作时,只需传输少量的数据,而不是整个页面的内容,从而减少了网络带宽的消耗,减轻了服务器的压力。 总之,基于Ajax的jpetstore能够提供更流畅、更快速的用户体验,并减少了带宽和服务器的负载。它通过采用异步加载和更新页面的方式,增强了用户对系统的使用满意度,提高了系统的性能和响应速度。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值