96SEO 2026-02-23 14:56 15
#x1f31f;推荐给大家我的专栏《电商项目实战》。

#x1f3af;#x1f3af;
当我们点击商品的时候需要展示对应的商品详情首先在首页商品页写入后端的接口
goodsService;RequestMapping(/ByIdSelect)public
goodsService.getById(vo.getGid());model.addAttribute(g,g);return
hrefcss/proList.css//headbody!------------------------------head------------------------------#include
common/top.html!-----------------address-------------------------------div
href${ctx}/page/flowerDer.html装饰摆件/aspan//spana
href${ctx}/page/proList.html干花花艺/aspan//span#--注意1${goods.goodsTitle!}只能判断goodsTitle属性是否为空不能判断goods对象是否为空2${(goods.goodsTitle)!}既可以判断goods对象是否为空也可以判断goodsTitle属性是否为空--a
classon${(g.goodsTitle)!}/a/div/div!-----------------------Detail------------------------------div
data-srcimg/temp/proDet01_big.jpgimg
data-srcimg/temp/proDet02_big.jpgimg
data-srcimg/temp/proDet03_big.jpgimg
data-srcimg/temp/proDet04_big.jpg/div--/divdiv
classtitleh4${(g.goodsTitle)!}/h4p${(g.goodsName)!}/pspan${(g.goodsPrice)!}/span/divdiv
data-srcimg/temp/proBig01.jpg/pp
data-srcimg/temp/proBig02.jpg/pp
data-srcimg/temp/proBig03.jpg/pp
data-srcimg/temp/proBig04.jpg/p/divp数量nbsp;nbsp;库存span${(g.goodsStock)!}/span件/pdiv
data-gid${(g.gid)!}加入购物车/p/a/div/div/div/div/divdiv
flp馨***呀/pp不好意思评价晚了产品很好价格比玻璃品便宜没有我担心的杂色发货快包装好全5分/pdiv
srcimg/temp/eva05.jpg/p/divpspan2016年12月27日08:31/spanspan颜色分类大中小三件套不含花/span/p/div/divdiv
flp么***周/pp花瓶超级棒我看图以为是光面的收货发现是磨砂但感觉也超有质感很喜欢。
磨砂上面还有点纹路不过觉得挺自然的不影响美观。
包装也很好绝对不会磕碎碰坏好评/ppspan2016年12月27日08:31/spanspan颜色分类大中小三件套不含花/span/p/div/divdiv
flp馨***呀/pp不好意思评价晚了产品很好价格比玻璃品便宜没有我担心的杂色发货快包装好全5分/pdiv
srcimg/temp/eva05.jpg/p/divpspan2016年12月27日08:31/spanspan颜色分类大中小三件套不含花/span/p/div/divdiv
flp么***周/pp花瓶超级棒我看图以为是光面的收货发现是磨砂但感觉也超有质感很喜欢。
磨砂上面还有点纹路不过觉得挺自然的不影响美观。
包装也很好绝对不会磕碎碰坏好评/ppspan2016年12月27日08:31/spanspan颜色分类大中小三件套不含花/span/p/div/divdiv
flp馨***呀/pp不好意思评价晚了产品很好价格比玻璃品便宜没有我担心的杂色发货快包装好全5分/pdiv
srcimg/temp/eva05.jpg/p/divpspan2016年12月27日08:31/spanspan颜色分类大中小三件套不含花/span/p/div/divdiv
flp么***周/pp花瓶超级棒我看图以为是光面的收货发现是磨砂但感觉也超有质感很喜欢。
磨砂上面还有点纹路不过觉得挺自然的不影响美观。
包装也很好绝对不会磕碎碰坏好评/ppspan2016年12月27日08:31/spanspan颜色分类大中小三件套不含花/span/p/div/divdiv
flp馨***呀/pp不好意思评价晚了产品很好价格比玻璃品便宜没有我担心的杂色发货快包装好全5分/pdiv
srcimg/temp/eva05.jpg/p/divpspan2016年12月27日08:31/spanspan颜色分类大中小三件套不含花/span/p/div/divdiv
flp么***周/pp花瓶超级棒我看图以为是光面的收货发现是磨砂但感觉也超有质感很喜欢。
磨砂上面还有点纹路不过觉得挺自然的不影响美观。
包装也很好绝对不会磕碎碰坏好评/ppspan2016年12月27日08:31/spanspan颜色分类大中小三件套不含花/span/p/div/divdiv
flp馨***呀/pp不好意思评价晚了产品很好价格比玻璃品便宜没有我担心的杂色发货快包装好全5分/pdiv
srcimg/temp/eva05.jpg/p/divpspan2016年12月27日08:31/spanspan颜色分类大中小三件套不含花/span/p/div/divdiv
flp么***周/pp花瓶超级棒我看图以为是光面的收货发现是磨砂但感觉也超有质感很喜欢。
磨砂上面还有点纹路不过觉得挺自然的不影响美观。
包装也很好绝对不会磕碎碰坏好评/ppspan2016年12月27日08:31/spanspan颜色分类大中小三件套不含花/span/p/div/div/div/div/divdiv
srcimg/temp/see01.jpg/dtdd【最家】复古文艺风玻璃花瓶/dddd193.20/dd/dl/aa
srcimg/temp/see02.jpg/dtdd【最家】复古文艺风玻璃花瓶/dddd193.20/dd/dl/aa
srcimg/temp/see03.jpg/dtdd【最家】复古文艺风玻璃花瓶/dddd193.20/dd/dl/aa
srcimg/temp/see04.jpg/dtdd【最家】复古文艺风玻璃花瓶/dddd193.20/dd/dl/a/div/div/divdiv
srcimg/temp/next.png/span/divdiv
href${ctx}/page/proDetail.htmldldtimg
srcimg/temp/like01.jpg/dtdd【最家】复古文艺风玻璃花瓶/dddd193.20/dd/dl/aa
href${ctx}/page/proDetail.htmldldtimg
srcimg/temp/like02.jpg/dtdd【最家】复古文艺风玻璃花瓶/dddd193.20/dd/dl/aa
href${ctx}/page/proDetail.htmldldtimg
srcimg/temp/like03.jpg/dtdd【最家】复古文艺风玻璃花瓶/dddd193.20/dd/dl/aa
href${ctx}/page/proDetail.htmldldtimg
srcimg/temp/like04.jpg/dtdd【最家】复古文艺风玻璃花瓶/dddd193.20/dd/dl/aa
srcimg/temp/like05.jpg/dtdd【最家】复古文艺风玻璃花瓶/dddd193.20/dd/dl/a/divdiva
href${ctx}/page/proDetail.htmldldtimg
srcimg/temp/like01.jpg/dtdd【最家】复古文艺风玻璃花瓶/dddd193.20/dd/dl/aa
href${ctx}/page/proDetail.htmldldtimg
srcimg/temp/like02.jpg/dtdd【最家】复古文艺风玻璃花瓶/dddd193.20/dd/dl/aa
href${ctx}/page/proDetail.htmldldtimg
srcimg/temp/like03.jpg/dtdd【最家】复古文艺风玻璃花瓶/dddd193.20/dd/dl/aa
href${ctx}/page/proDetail.htmldldtimg
srcimg/temp/like04.jpg/dtdd【最家】复古文艺风玻璃花瓶/dddd193.20/dd/dl/aa
srcimg/temp/like05.jpg/dtdd【最家】复古文艺风玻璃花瓶/dddd193.20/dd/dl/a/div/div/div/div/div!--返回顶部--#include
srcjs/jquery.SuperSlide.2.1.1.js
typetext/javascriptjQuery(.bottom).slide({titCell:.hd
.likeList,autoPage:true,autoPlay:false,effect:leftLoop,autoPlay:true,vis:1});/script/body
商品详情页面引入了一个cart.js,里面是有关该所有的点击事件方法
$(function(){/**************数量加减***************/$(.num
parseInt($(this).siblings(span).text());if(num1){$(this).attr(disabled,disabled);}else{num--;$(this).siblings(span).text(num);//获取除了货币符号以外的数字var
$(this).parents(.number).prev().text().substring(1);//单价和数量相乘并保留两位小数$(this).parents(.th).find(.sAll).text((num*price).toFixed(2));jisuan();zg();}});$(.num
parseInt($(this).siblings(span).text());if(num5){confirm(限购5件);}else{num;$(this).siblings(span).text(num);var
$(this).parents(.number).prev().text().substring(1);$(this).parents(.th).find(.sAll).text((num*price).toFixed(2));jisuan();zg();}});//计算总价function
input[typecheckbox]:checked).length;if(len0){$(#all).text(parseFloat(0).toFixed(2));}else{$(.th
input[typecheckbox]:checked).each(function(){//获取小计里的数值var
$(this).parents(.pro).siblings(.sAll).text().substring(1);//累加allparseFloat(sAll);//赋值$(#all).text(all.toFixed(2));})}}//计算总共几件商品function
input[typecheckbox]:checked).parents(.th).find(.num
index.length;if(len0){$(#sl).text(0);}else{index.each(function(){zslparseInt($(this).text());$(#sl).text(zsl);})}if($(#sl).text()0){$(.count).css(background,#c10000);}else{$(.count).css(background,#8e8e8e);}}/*****************商品全选***********************/$(input[typecheckbox]).on(click,function(){var
$(this).hasClass(checkAll);if(sf){if(sc){$(input[typecheckbox]).each(function(){
zg();jisuan();}else{$(this).checkedtrue;
$(input[typecheckbox]:checked).length;var
$(input).length-1;if(lenlen1){$(input[typecheckbox]).each(function(){
}zg();jisuan();}}else{if(sc){$(input[typecheckbox]).each(function(){
zg();jisuan();}else{$(this).checkedfalse;var
input[typecheckbox]:checked).length;var
$(input).length-1;if(lenlen1){$(.checkAll).attr(checked,false);}zg();jisuan();}}});/****************************proDetail
加入购物车*******************************/$(.btns
.cart).click(function(){//获取购物车上的商品IDlet
gidthis.dataset.gid;//获取商品数量let
span.fl).text;//发起请求$.post(/cart/add,{gid},resp{},json)});//删除购物车商品$(.del).click(function(){//单个删除if($(this).parent().parent().hasClass(th)){$(.mask).show();$(.tipDel).show();index
$(this).parents(.th).index()-1;$(.cer).click(function(){$(.mask).hide();$(.tipDel).hide();$(.th).eq(index).remove();$(.cer).off(click);if($(.th).length0){$(.table
.goOn).show();}})}else{//选中多个一起删除if($(.th
input[typecheckbox]:checked).length0){$(.mask).show();$(.pleaseC).show();}else{$(.mask).show();$(.tipDel).show();$(.cer).click(function(){$(.th
input[typecheckbox]:checked).each(function(j){index
$(this).parents(.th).index()-1;$(.th).eq(index).remove();if($(.th).length0){$(.table
.goOn).show();}})$(.mask).hide();$(.tipDel).hide();zg();jisuan();})}}})$(.cancel).click(function(){$(.mask).hide();$(.tipDel).hide();})//改变商品规格
$(this).addClass(on).append(html).parents(.th).siblings(.th).find(.pro
dd).removeClass(on).find(.edit).remove();
$(#editindex).prev().text(result);
$(#editindex).parent(dd).removeClass(on).find(.edit).remove();
我们的用户购物车数据放在数据库太耗费数据库的资源了我们可以将数据放入redis进行一个时限判断如果一周内没有进行数据访问就加入数据库并清除缓存。
{HashOperationsString,String,GoodsVo
operationsredisTemplate.opsForHash();String
bigKeyConstants.REDIS_CART_PREFIX
user.getId();//根据用户Id查询所有的购物车信息ListGoodsVo
operations.values(bigKey);return
CookieUtils.getCookieValue(request,
redisService.loadUser(token);//获取用户购物车商品信息ListGoodsVo
redisService.loadCart(user);//根据商品Id查询对应商品ListInteger
goodsVos.stream().map(GoodsVo::getGid).collect(Collectors.toList());ListGoods
g.getGid())).findFirst().orElse(null);if
{//将该商品g的属性赋值给GoodsVosBeanUtils.copyProperties(g,
gv);}}System.out.println(goodsVos);model.addAttribute(item,
因为我们redis中只有商品的id所以需要将所有商品的id拿到数据库中查询将该商品的图片信息标题等查询出来利用BeanUtils将属性加入到goodsVos中方便前端页面显示
!--------------------------------------cart---------------------
mt!-----------------logo-------------------!--div
srcimg/temp/cartTop01.png/h1/div--!-----------------site-------------------div
classfr继续购物gt;/a/p/div!-----------------table-------------------div
classtrdiv商品/divdiv单价/divdiv数量/divdiv小计/divdiv操作/div/div#--有数据就显示--#if
classflp${(g.goodsName)!}/pp颜色分类:/pp${(g.goodsType)!}/p/dd/dl/a/divdiv
classprice${(g.goodsPrice)!}/divdiv
href#2删除/a/div/div/#list#elsediv
idsl0/small件商品/spanspan合计:nbsp;small
!----------------mask-------------------
!-------------------mask内容-------------------
data-srcimg/temp/proDet01_big.jpgimg
data-srcimg/temp/proDet02_big.jpgimg
data-srcimg/temp/proDet03_big.jpgimg
data-srcimg/temp/proDet04_big.jpg/div/divdiv
data-srcimg/temp/proBig01.jpg/pp
data-srcimg/temp/proBig02.jpg/pp
data-srcimg/temp/proBig03.jpg/pp
data-srcimg/temp/proBig04.jpg/p/div/divdiv
首先我们不止需要清除浏览器上的cookie还需要清除redis中保存的用户信息所以在Redis的service层定义一个删除的方法
{//根据token删除对应的键redisTemplate.delete(Constants.REDIS_USER_PREFIX
CookieUtils.getCookieValue(request,
userToken);redisService.logout(token);//清除cookieCookieUtils.deleteCookie(request,response,userToken);CookieUtils.deleteCookie(request,response,nickname);return
清除浏览器cookie的同时也清除redis中的数据避免资源浪费
通过这几天的编写不知道大家发现没有我们很多方法中都有获取用户的token信息可以说这段代码是重复的我们可以将其优化掉
supportsParameter(MethodParameter
parameter.getGenericParameterType()
resolveArgument(MethodParameter
webRequest.getNativeRequest();//从请求中获取cookieString
CookieUtils.getCookieValue(request,
redisService.loadUser(token);return
这个解析器的作用是判断控制器方法的参数是否为User类型如果是则会在处理请求之前执行resolveArgument方法。
在resolveArgument方法中它会通过HttpServletRequest获取请求中的cookie然后调用redisService的loadUser方法根据cookie中的token加载对应的用户信息。
最后返回解析得到的User对象作为控制器方法的参数。
userArgumentResolver;Overridepublic
addArgumentResolvers(ListHandlerMethodArgumentResolver
{resolvers.add(userArgumentResolver);}}
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback