天猫商城在线购物系统

天猫商城在线购物系统

本博文对Gitee开源项目 SpringBoot迷你天猫商城(Mini-Tmall)中的商品管理和商品分类管理进行讲解。
在此也感谢开源项目作者@贤趣项目小组
在此附上原项目链接以示感谢:
SpringBoot迷你天猫商城(Mini-Tmall)

前置背景知识

前置背景知识对可能用到的背景知识进行讲解。

@Controller //标记该类为控制器类,处理由DispatchServlet分发的请求,把用户请求的数据经过业务处理层处理之后封装成一个Model ,然后再把该Model 返回给对应的View 进行展示。
@Resource //有按照类型和名称注入两种类型,默认按名称注入。进行依赖注入,注入了才能用里面的方法,(以调用其中的抽象方法)
@RequestMapping(value = "/", method = RequestMethod.GET, produces = "application/json;charset=utf-8")
//指定后台的映射路径和提交方式
produces = "application/json;charset=utf-8" 
//定义json数据返回格式
Integer insertOne(@Param("category") Category category);  
//字段名映射 将Category类的category对象封装到参数中
@PathVariable //参数绑定,可将URL中占位符参数{xxx}绑定到控制器类的方法形参
@Deprecated //表示此方法已废弃、暂时可用,但以后此类或方法都不会再更新、后期可能会删除,建议后来人不要调用此方法。此注解可用于类上、方法上、属性上。
UUID是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的。
@ResponseBody //将java对象转为json格式的数据。
注意:在使用此注解之后不会再走视图处理器,而是直接将数据写入到输入流中,他的效果等同于通过response对象输出指定格式的数据。
@ResponseBody是作用在方法上的,@ResponseBody 表示该方法的返回结果直接写入 HTTP response body 中,一般在异步获取数据时使用【也就是AJAX】。

@RequestParam //传递参数,用于将请求参数区数据映射到功能处理方法的参数上。
required = false //表示该参数可以不传,默认是true
lastIndexOf  //返回此向量中最后一次出现的指定元素的索引;如果此向量不包含该元素,则返回 -1。
request.getSession().getServletContext()是获取的servlet容器对象,
相当于tomcat容器了。getRealPath("/") 获取实际路径,项目发布时,
在容器中的实际路径。实际路径就是在服务器中的路径。

RequestMapping  中  produces属性可以设置返回数据的类型以及编码,可以是json或者xml
但是必须要和@ResponseBody注解一起使用才可以,不加@ResponseBody注解相当于按照和返回String同名jsp页面解析自然就会报错。
Integer与int的区别:
Integer是int的包装类;int是基本数据类型。
Integer变量必须实例化后才能使用;int变量不需要。
Integer实际是对象的引用,当new一个Integer时,实际上是生成一个指针指向此对象;而int则是直接存储数据值。
Integer的默认值是null;int的默认值是0
$("#userName") 是id选择器,获得id为userName的标签,通过.val(),获得这个标签的value的值,赋值给你声明的变量var userName
trim() 方法用于删除字符串的头尾空白符
$("#userName")获取指定网页元素的函数
什么是Ajax异步请求?
异步请求就当发出请求的同时,浏览器可以继续做任何事,Ajax发送请求并不会影响页面的加载与用户的操作,相当于是在两条线上,各走各的,互不影响。一般默认值为true。异步请求可以完全不影响用户的体验效果,无论请求的时间长或者短,用户都在专心的操作页面的其他内容,并不会有等待的感觉。
AJAX = 异步 JavaScript 和 XML(Asynchronous JavaScript and XML)。
简短地说,在不重载整个网页的情况下,AJAX 通过后台加载数据,并在网页上进行显示。
通过 jQuery AJAX 方法,能够使用 HTTP Get 和 HTTP Post 从远程服务器上请求文本、HTML、XML 或 JSON - 同时您能够把这些外部数据直接载入网页的被选元素中。
//Ajax异步请求举例
$.ajax({  
     type:"POST",
     url:"Venue.aspx?act=init", 
     dataType:"html", 
     success:function(result){  //function1()
       f1(); 
       f2();  
    } 
     failure:function (result) {  
      alert('Failed');  
     }, 
 } 
 function2();
 //上述代码中,当ajax块发出请求后,他将停留function1(),等待server端的返回,但同时(在这个等待过程中),前台会去执行function2()。

异步模式下:

当我们使用AJAX发送完请求后,可能还有代码需要执行。这个时候可能由于种种原因导致服务器还没有响应我们的请求,但是因为我们采用了异步执行方式,所有包含AJAX请求代码的函数中的剩余代码将继续执行。如果我们是将请求结果交由另外一个JS函数去处理的,那么,这个时候就好比两条线程同时执行一样。
//Ajax异步请求举例
$.ajax({  
     type:"POST", 
     url:"Venue.aspx?act=init", 
     dataType:"html", 
     async: false,    success:function(result){  //function1()
       f1(); 
       f2(); 
     } 
    failure:function (result) {  
      alert('Failed');  
     }, 
 } 
 function2();
 //上述代码中,当把asyn设为false时,这时ajax的请求时同步的,也就是说,这个时候ajax块发出请求后,他会等待在function1()这个地方,不会去执行function2(),直到function1()部分执行完毕。

业务逻辑

业务流程——后台

商品信息管理

前端页面

webapp/WEB-INF.page/admin/productManagePage.jsp

查询商品功能如何实现?

填写必要的信息后,点击查询按钮时

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UMeP7EH4-1660649307118)(C:\Users\dell-pc\AppData\Roaming\Typora\typora-user-images\image-20220816111342235.png)]

触发js函数

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Hpae2Esf-1660649307120)(C:\Users\dell-pc\AppData\Roaming\Typora\typora-user-images\image-20220816111645191.png)]

请求后端路径(注意:js执行到最后一步时,会调用getData函数)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ghpeaZiJ-1660649307121)(C:\Users\dell-pc\AppData\Roaming\Typora\typora-user-images\image-20220816111725220.png)]

对应的控制器

controller/admin/ProductController.java

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UDq8c4gf-1660649307121)(C:\Users\dell-pc\AppData\Roaming\Typora\typora-user-images\image-20220816112024954.png)]

把查询到的数据封装到object,并转换成JSON数据格式

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KkRTDWUK-1660649307122)(C:\Users\dell-pc\AppData\Roaming\Typora\typora-user-images\image-20220816112929325.png)]

如何在前端显示已查到的信息?

前端js代码会调用getData函数

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PNEG7j8q-1660649307123)(C:\Users\dell-pc\AppData\Roaming\Typora\typora-user-images\image-20220816111725220.png)]

前端是通过getData函数获取数据,而非后端返回。

通过append追加到jsp标签

在这里插入图片描述

添加商品功能如何实现?

点击’'添加一件产品"按钮

会触发getChildPage(obj) js函数

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yUMJxKL0-1660649307125)(C:\Users\dell-pc\AppData\Roaming\Typora\typora-user-images\image-20220816141258264.png)]

getChildPage(obj)函数如下:

如果传入参数为空,继续定位到添加产品页面;

如果不空,拼接出添加成功的url,向后端发送请求;

通过页面和数据交互工具ajaxUtil中的getPage函数向后端发送Ajax请求。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9hc2HE2p-1660649307126)(C:\Users\dell-pc\AppData\Roaming\Typora\typora-user-images\image-20220816141444080.png)]

Ajax请求后端路径和请求参数样式如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-O0k5gxXv-1660649307126)(C:\Users\dell-pc\AppData\Roaming\Typora\typora-user-images\image-20220816142319745.png)]

//对应的控制器
controller/admin/ProductController.java

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XB3WvpzC-1660649307127)(C:\Users\dell-pc\AppData\Roaming\Typora\typora-user-images\image-20220816160434174.png)]

查看具体商品的详情页?

点击 详情

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-50m1d1rQ-1660649307127)(C:\Users\dell-pc\AppData\Roaming\Typora\typora-user-images\image-20220816154459088.png)]

触发getChildPage() js函数

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VFPmjNIe-1660649307128)(C:\Users\dell-pc\AppData\Roaming\Typora\typora-user-images\image-20220816154435338.png)]

获取产品详细信息。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ztDf8F0m-1660649307129)(C:\Users\dell-pc\AppData\Roaming\Typora\typora-user-images\image-20220816154720161.png)]

和添加一件产品时触发的js函数有何不同?

添加商品时, obj为空,跳转到添加产品的请求路径,交由相应的控制器处理;

查看商品详情时,请求会携带product_id ,此时obj不为空,会映射到相应到请求路径。

查看商品详情的控制器

controller/admin/ProductController.java

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yUpDgpUP-1660649307129)(C:\Users\dell-pc\AppData\Roaming\Typora\typora-user-images\image-20220816160924992.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QCNmbXV2-1660649307130)(C:\Users\dell-pc\AppData\Roaming\Typora\typora-user-images\image-20220816161010044.png)]

删除商品即将商品状态设为停售中,即将商品下架。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-O4v7hr5w-1660649307130)(C:\Users\dell-pc\AppData\Roaming\Typora\typora-user-images\image-20220816153421342.png)]

是在查看商品详情时可对商品信息进行修改。

流程与查看商品详情类似。

刷新产品列表?

点击 刷新产品列表 按钮

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8KGVxbau-1660649307131)(C:\Users\dell-pc\AppData\Roaming\Typora\typora-user-images\image-20220816153905089.png)]

触发相关js函数,将输入框中的内容清除,并通过getData()函数请求后端(实际上是对数据库中的所有商品进行查询),其他一些前端操作,将相应样式还原。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nhuOYrfk-1660649307131)(C:\Users\dell-pc\AppData\Roaming\Typora\typora-user-images\image-20220816154115777.png)]

相应的控制器

controller/admin/ProductController.java

无条件查询商品,相当于查询所有产品,并以(0,10)方式分页。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hEyippkA-1660649307132)(C:\Users\dell-pc\AppData\Roaming\Typora\typora-user-images\image-20220816161855313.png)]

getData()函数会根据控制器返回的JSON字符串获取数据,将返回的数据在前端页面显示。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0L4zMDyR-1660649307133)(C:\Users\dell-pc\AppData\Roaming\Typora\typora-user-images\image-20220816162311206.png)]

业务流程——前台

首页显示

首页显示根据数据库动态加载而非写死的。

${pageContext.request.contextPath}
//**是JSP取得绝对路径的方法**,等价于`<%=request.getContextPath()%>` 。
也就是取出部署的应用程序名或者是当前的项目名称。
比如项目名称是SSM在浏览器中输入为 http://localhost:8080/SSM/index.jsp
${pageContext.request.contextPath}或<%=request.getContextPath()%>取出来的就是/SSM,
而"/"代表的含义就是 http://localhost:8080

通过 标签遍历request域中的内容,获取分类信息,分类信息通过 表名 . 字段名 动态区分加载, {表名.字段名}动态区分加载, 表名.字段名动态区分加载,{表名.字段名}通过map集合对象获取,显示在

fore/homePage.jsp

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mVBnnx07-1660649307134)(C:\Users\dell-pc\AppData\Roaming\Typora\typora-user-images\image-20220816165133312.png)]

举个例子:map对象直接返回到相应的jsp页面,所以jsp页面能通过 标签遍历map集合对象。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-w3vAxRhg-1660649307134)(C:\Users\dell-pc\AppData\Roaming\Typora\typora-user-images\image-20220816172107643.png)]

查看具体商品详情页信息

jsp页面

fore/productDetailsPage.jsp

对应的控制器

controller/fore/ForeProductDetailsController.java

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TNRnHFAF-1660649307135)(C:\Users\dell-pc\AppData\Roaming\Typora\typora-user-images\image-20220816173228201.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kkiiPxOl-1660649307136)(C:\Users\dell-pc\AppData\Roaming\Typora\typora-user-images\image-20220816173306738.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HdI6AYOk-1660649307136)(C:\Users\dell-pc\AppData\Roaming\Typora\typora-user-images\image-20220816173329537.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-x6cVXWrJ-1660649307138)(C:\Users\dell-pc\AppData\Roaming\Typora\typora-user-images\image-20220816173358859.png)]

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值