基于Eclipse+MySQL+J2EE开发的天猫商城-CSDN博客

243 阅读7分钟

基于Eclipse+MySQL+J2EE开发的天猫商城

项目介绍💁🏻

天猫商城是一个基于J2EE技术的电子商务平台,致力于为消费者提供丰富的商品选择、便捷的购物流程和优质的服务体验。随着互联网技术的发展和消费者需求的不断升级,天猫商城交易规模迅速增长,每天有数百万的订单和上千万的访客。

为了确保天猫商城的稳定运行和不断提升用户体验,项目团队采用了J2EE架构。J2EE是一种基于Java语言的企业级应用开发平台,具有可扩展性、可靠性、安全性和高并发性等特点,能够满足天猫商城这样的电子商务平台的严格要求。

天猫商城的J2EE应用分为多个层次,包括表示层、业务逻辑层和数据访问层。其中,表示层负责处理用户界面,业务逻辑层负责实现核心业务逻辑,数据访问层负责访问数据库。这样的分层设计不仅有利于代码复用和维护,还能提高系统的可扩展性和性能。

在天猫商城的开发过程中,项目团队遵循了敏捷开发原则,采用了迭代开发的方式。他们通过不断与业务部门沟通,了解用户需求,并在每个迭代中实现相应的功能。此外,他们还进行了严格的单元测试和集成测试,确保系统的质量和稳定性。

目前,天猫商城已经在J2EE技术的支持下取得了显著的成果。不仅成功地满足了消费者的需求,还获得了市场和用户的广泛认可。未来,天猫商城将继续升级技术和服务,为用户带来更好的购物体验。

功能模块

Tmall_JavaEE

技术栈 Servlet + Jsp + Tomcat , 是Java Web入门非常好的练手项目

效果展示:

项目简介\

本项目为Java EE入门练手项目,没有使用 SSH , SSM 框架,而是使用 JavaEE 整套技术来作为解决方案,实现模仿天猫网站的各种业务场景。之所以不使用框架,就是为了借助这个项目夯实 JavaEE 基础,并且在项目中借助反射等技术。

项目用到的技术如下:
Java:Java SE基础
前端: HTML , CSS , JavaScript , jQuery
J2EE: Tomcat , Servlet , JSP , Filter
数据库: MySQL

表结构

建表sql 已经放在 Github 项目的 /sql 文件夹下

表名中文含义介绍
Category分类表存放分类信息,如女装,平板电视,沙发等
Property属性表存放属性信息,如颜色,重量,品牌,厂商,型号等
Product产品表存放产品信息,如LED40EC平板电视机,海尔EC6005热水器
PropertyValue属性值表存放属性值信息,如重量是900g,颜色是粉红色
ProductImage产品图片表存放产品图片信息,如产品页显示的5个图片
Review评论表存放评论信息,如买回来的蜡烛很好用,么么哒
User用户表存放用户信息,如斩手狗,千手小粉红
Order订单表存放订单信息,包括邮寄地址,电话号码等信息
OrderItem订单项表存放订单项信息,包括购买产品种类,数量等

9a942e49c94589673cd56b7f05b35237.jpeg

Category-分类Product-产品
Category-分类Property-属性
Property-属性PropertyValue-属性值
Product-产品PropertyValue-属性值
Product-产品ProductImage-产品图片
Product-产品Review-评价
User-用户Order-订单
Product-产品OrderItem-订单项
User-用户OrderItem-订单项
Order-订单OrderItem-订单项
User-用户User-评价

以上直接看可能暂时无法完全理解,结合后面具体到项目的业务流程就明白了。

实体类设计

所谓的实体类,就是对于数据库中的表的互相映射的类。  这是一种 ORM 的设计思想,即一个对象,对应数据库里的一条记录 举个例子,对于 评价 / review 的 实体类 和 表结构 设计如下:

bce8e02005781d818dcbb4580a137611.jpeg

已省略对应的 getter/setter 方法

DAO 类设计

DAO 是 Data Access Object 的缩写,专门用于进行数据库访问的操作。首先看一下数据库工具类

DBUtil

82796d13d82dee2e5ae66b6697a65f78.jpeg

这个类的作用是初始化驱动,并且提供一个 getConnection 用于获取连接,统一管理连接参数,方便后续操作。CategoryDAO

利用 DBUtil 获取 Connectoion ,再获取对应的 Statement,利用 JDBC 从数据库取出数据,并构造成 bean 对象返回。 9d69206fb6ef3a901ddeec0ae8237519.jpeg

Service 类

作为J2EE web 应用,一般会按照如图所示的设计流程进行 Servlet -> Service(业务类) -> DAO -> database

a1d688bf29c679d23cc25eb69ac24291.jpeg

在本模仿天猫整站 JavaEE 版本中,不使用 Service 这一层。原因是在 DAO 进行了比较详细的设计,已经提供了很好的支持业务的方法。如果在 DAO 上包裹一层 Service 业务类,不过是在直接调用 DAO 设计好的方法罢了。另外一个使用框架的项目会用到 Service 层。

Filter 配合 Servlet

后台在系统设计的时候,并不是简单的每个功能对应一个 Servlet ,而是使用了反射的技术,结合过滤器Filter 进行了封装,使得开发配置以及维护成本降低了很多。

这里以分类进行举例:分类管理需要:增加,删除,编辑,修改,查询 5 个功能,按照传统的在 web.xml 中配置 Servlet 的思路,那么就需要 5 个 Servlet 类,而后台需要做分类,产品,属性,产品图,用户,订单 6 中管理,就一共需要30 个 Servlet,还要配置 web.xml 就会变得很乱。解决的方法是把所有分类操作放在同一个 Servlet ,对应不同的方法。让我们来分析,如何做到访问 admin_category_list 的时候,CategoryServlet 的 list() 方法会被调用:

  1. 假设访问路径是 /admin_category_x
  2. 过滤器 BackServletFilter 进行拦截,判断访问的地址是否以/admin_开头
  3. 如果是,那么做如下操作
    3.1 取出两个下划线之间的值 category
    3.2 取出最后一个下划线之后的值 x
    3.3 然后根据这个值,服务端跳转到 categoryServlet,并且把 x 这个值传递过去
  4. categoryServlet 继承了 BaseBackServlet,其 service 方法会被调用。在 service 中,借助反射技术,根据传递过来的值 x,调用对应 categoryServlet 中的方法 x()
  5. 这样就实现了当访问的路径是 admin_category_list 的时候,就会调用 categoryServlet.x() 方法这样一个效果

换句话说: 如果访问的路径是 admin_category_add,就会调用 categoryServlet.add() 方法 如果访问的路径是 admin_category_delete,就会调用 categoryServlet.delete() 方法

Github-BackServletFilter 完整代码

1efda510b01e7c94b0c5956b958c71d8.png

d844f3aa1a6c953566cda1b6cf201846.png

流程图

792105391db1fae21dd93f3a2e964e9c.png

另外还定义了增删查改等基础抽象方法,初始化了所有 DAO 对象 上图已经注释的很清楚了,项目全部代码都放在 github 上了,欢迎查看。

Github-CategoryServlet 完整代码

  1. 首先 CategoryServlet 继承了 BaseBackServlet,而 BaseBackServlet 又继承了 HttpServlet
  2. 服务端跳转过来之后,会访问 CategoryServlet 会访问 service() 方法
  3. 父类 BaseBackServlet中重写了 service() 方法,所以流程就进入到了 service() 中
    3.1 在 service() 方法中根据反射访问对应的方法
    3.2 根据对应方法的返回值,进行服务端跳转、客户端跳转、或者直接输出字符串。
  4. 取到从 BackServletFilter 中 request.setAttribute() 传递过来的值 list
  5. 根据这个值 list,借助反射机制调用 CategoryServlet 类中的 list() 方法,这样就达到了CategoryServlet.list()方法被调用的效果

20038d88fd9959cfed19e717b497c09b.jpeg

而后,list 方法使用 categoryDAO.list 查询出 category 对象集合,并跳转到 listCategory.jsp 显示

279f5f2396b3bbdc318ae7d9ffcffd38.jpeg

9c3a5b377e6e1dd70bbff43c7f601456.jpeg

完整版的 listCategory.jsp 还包含4个公共文件,分别是 头部,导航,行业,页脚。分类管理还有增加,编辑,修改,删除,分页,另外后台其他管理页面,前台页面。具体的需要浏览代码,篇幅原因就不展开了。

页面展示

63428ea3aa6f291e21760500e668e2e5.jpeg

a538f34d5e4687ee434db2f49be71088.jpeg

页面效果

系统的部分功能模块页面如下所示。

系统登录\

60bfe6107c87191d0e5ff0548b386691.png

系统注册 

e578ef12439cfe536574159270bb90b2.png

运行教程                                                        

编号269-疫情信息管理系统

\

系统源码

进入公众号,在右上角有放大镜,就是搜索公众号内全部文章的题目,公众号各类的素材和相关的题目都可以通过这个方法来进行搜索。

输入要自己想要看的题材和对应的素材就可以了,因为的将各个类目的题材,都浓缩在题目里面, 所以只要是标题里面有的,或者涵盖了你的题目素材基本上都可以搜索的到。

6bd902f50a6bd240ec7704c56cd04236.png

关注微信公众号 “letcoding”---》源缘编程

\