当前位置: 首页 > news >正文

聊天网站建设网站建设毕业设计评价

聊天网站建设,网站建设毕业设计评价,sentos上部署.net网站,营销策略方案###前言通过代码片段分别介绍服务端渲染、客户端渲染、对象缓存三种方式的写法。代码片段仅供参考#xff0c;具体实现需要根据业务场景自行适配#xff0c;但思想都是一样。一、服务端渲染方式####1、接口返回html页面的设置javaAutowiredThymeleafViewResolver thymeleafVi…###前言通过代码片段分别介绍服务端渲染、客户端渲染、对象缓存三种方式的写法。代码片段仅供参考具体实现需要根据业务场景自行适配但思想都是一样。一、服务端渲染方式####1、接口返回html页面的设置javaAutowiredThymeleafViewResolver thymeleafViewResolver;AutowiredApplicationContext applicationContext;RequestMapping(value/to_list, producestext/html)ResponseBodypublic String goodsList() {// 业务逻辑}####2、先从缓存中取有就返回。java//取缓存String html redisService.get(GoodsKey.getGoodsList, , String.class);if(!StringUtils.isEmpty(html)) {return html;}3、缓存中没有就手动渲染。springboot1.5.x的写法List goodsList goodsService.listGoodsVo();model.addAttribute(goodsList, goodsList);SpringWebContext ctx new SpringWebContext(request,response, request.getServletContext(),request.getLocale(), model.asMap(), applicationContext );//手动渲染html thymeleafViewResolver.getTemplateEngine().process(goods_list, ctx);springboot2.x的写法WebContext ctx new WebContext(request, response, request.getServletContext(), request.getLocale(), model.asMap());//手动渲染html thymeleafViewResolver.getTemplateEngine().process(goods_list, ctx);4、最后再将渲染内容加入到redisif(!StringUtils.isEmpty(html)) {redisService.set(GoodsKey.getGoodsList, , html);}二、客户端渲染方式(商品详情页)####1、找到跳转到商品详情页的路径修改为一个静态html的路径。在商品列表页找到跳转到详情页的动态路径直接修改为一个静态路径后缀为htm或shtml总之不要是html即可因为application.properties中一般会配置后缀为html的都访问templates文件夹下的。注意代码中详情的链接指向一个静态页面goods_detail.htmhtml秒杀商品列表商品名称商品图片商品原价秒杀价库存数量详情2、根据1的路径在static目录下新建一个goods_detail.htm文件原本动态页面上的模板语言都去掉换成id“xx”然后使用ajax来渲染静态文件中的数据即可。原始动态页面秒杀商品详情 您还没有登录请登陆后再操作没有收货地址的提示。。。商品名称商品图片秒杀开始时间秒杀倒计时秒秒杀进行中秒杀已结束立即秒杀商品原价秒杀价库存数量静态化之后的页面可以看到动态模板语言都去掉了直接通过JS来赋值。秒杀商品详情 您还没有登录请登陆后再操作没有收货地址的提示。。。商品名称商品图片秒杀开始时间 立即秒杀商品原价秒杀价库存数量核心js代码$(function(){getDetail();});function getDetail(){var goodsId g_getQueryString(goodsId);$.ajax({url:/goods/detail/goodsId,type:GET,success:function(data){if(data.code 0){render(data.data);}else{layer.msg(data.msg);}},error:function(){layer.msg(客户端请求有误);}});}function render(detail){var miaoshaStatus detail.miaoshaStatus;var remainSeconds detail.remainSeconds;var goods detail.goods;var user detail.user;if(user){$(#userTip).hide();}$(#goodsName).text(goods.goodsName);$(#goodsImg).attr(src, goods.goodsImg);$(#startTime).text(new Date(goods.startDate).format(yyyy-MM-dd hh:mm:ss));$(#remainSeconds).val(remainSeconds);$(#goodsId).val(goods.id);$(#goodsPrice).text(goods.goodsPrice);$(#miaoshaPrice).text(goods.miaoshaPrice);$(#stockCount).text(goods.stockCount);countDown(); // 判断秒杀开始状态}// 判断秒杀开始状态function countDown(){var remainSeconds $(#remainSeconds).val();var timeout;if(remainSeconds 0){//秒杀还没开始倒计时$(#buyButton).attr(disabled, true);$(#miaoshaTip).html(秒杀倒计时remainSeconds秒);timeout setTimeout(function(){$(#countDown).text(remainSeconds - 1);$(#remainSeconds).val(remainSeconds - 1);countDown();},1000);}else if(remainSeconds 0){//秒杀进行中$(#buyButton).attr(disabled, false);if(timeout){clearTimeout(timeout);}$(#miaoshaTip).html(秒杀进行中);$(#verifyCodeImg).attr(src, /miaosha/verifyCode?goodsId$(#goodsId).val());$(#verifyCodeImg).show();$(#verifyCode).show();}else{//秒杀已经结束$(#buyButton).attr(disabled, true);$(#miaoshaTip).html(秒杀已经结束);$(#verifyCodeImg).hide();$(#verifyCode).hide();}}3、记得服务端返回json格式数据给静态页面做数据绑定。三、客户端渲染方式(秒杀接口)和第二点的操作基本一样也是去除动态模板语言改为ajax渲染。不同的地方1)、多了一些springboot的配置2)、GET和POST的区别这里一定要用POST有一些场景比如删除操作如果用了GET比如delete?idXX这样的写法那么搜索引擎扫描到会自动帮你删除了所以一定要写清楚类型。1、springboot-1.5.x的配置spring.resources.add-mappingstrue #是否启用默认资源处理spring.resources.cache-period 3600 #缓存时间spring.resources.chain.cachetrue #是否在资源链中启用缓存spring.resources.chain.enabledtrue #是否启用Spring资源处理链。默认情况下禁用除非至少启用了一个策略。spring.resources.chain.gzippedtrue #是否对缓存压缩spring.resources.chain.html-application-cachetrue #是否启用HTML5应用程序缓存清单重写spring.resources.static-locationsclasspath:/static/ #静态资源的位置####2、springboot2.1.1的官方配置propertiesspring.resources.add-mappingstrue # 是否启用默认资源处理spring.resources.cache.cachecontrol.cache-private # 表示响应消息是针对单个用户的不能由共享缓存存储。spring.resources.cache.cachecontrol.cache-public # 表示任何缓存都可以存储响应spring.resources.cache.cachecontrol.max-age # 响应被缓存的最大时间如果没有指定持续时间后缀以秒为单位。spring.resources.cache.cachecontrol.must-revalidate # 表明一旦缓存过期在未与服务器重新验证之前缓存不能使用响应。spring.resources.cache.cachecontrol.no-cache # 表示缓存的响应只有在服务器重新验证时才能重用spring.resources.cache.cachecontrol.no-store # 表示在任何情况下都不缓存响应spring.resources.cache.cachecontrol.no-transform # 指示中介(缓存和其他)它们不应该转换响应内容spring.resources.cache.cachecontrol.proxy-revalidate # 与“must-revalidate”指令的含义相同只是它不适用于私有缓存。spring.resources.cache.cachecontrol.s-max-age # 响应被共享缓存缓存的最大时间如果没有指定持续时间后缀以秒为单位。spring.resources.cache.cachecontrol.stale-if-error # 当遇到错误时响应可能使用的最大时间如果没有指定持续时间后缀以秒为单位。spring.resources.cache.cachecontrol.stale-while-revalidate # 如果没有指定持续时间后缀则响应在过期后可以提供的最长时间(以秒为单位)。spring.resources.cache.period # 资源处理程序提供的资源的缓存周期。如果没有指定持续时间后缀将使用秒。spring.resources.chain.cachetrue # 是否在资源链中启用缓存。spring.resources.chain.compressedfalse # 是否启用已压缩资源(gzip, brotli)的解析。spring.resources.chain.enabled # 是否启用Spring资源处理链。默认情况下禁用除非至少启用了一个策略。spring.resources.chain.html-application-cachefalse # 是否启用HTML5应用缓存清单重写。spring.resources.chain.strategy.content.enabledfalse # 是否启用内容版本策略。spring.resources.chain.strategy.content.paths/** # 应用于内容版本策略的以逗号分隔的模式列表。spring.resources.chain.strategy.fixed.enabledfalse # 是否启用固定版本策略。spring.resources.chain.strategy.fixed.paths/** # 用于固定版本策略的以逗号分隔的模式列表。spring.resources.chain.strategy.fixed.version # 用于固定版本策略的版本字符串。spring.resources.static-locationsclasspath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/ # 静态资源的位置。####3、第二点在点击按钮时调用的JS方法getMiaoshaPath()如下javascript四、对象缓存最基本最常用的缓存处理逻辑失效应用程序先从cache取数据没有得到则从数据库中取数据成功后放到缓存中。命中应用程序从cache中取数据取到后返回。更新先把数据存到数据库中成功后再让缓存失效。参考代码// 先查缓存再查数据库。public MiaoshaUser getById(long id) {//取缓存MiaoshaUser user redisService.get(MiaoshaUserKey.getById, id, MiaoshaUser.class);if(user ! null) {return user;}//取数据库user miaoshaUserDao.getById(id);if(user ! null) {redisService.set(MiaoshaUserKey.getById, id, user);}return user;}// 更新数据库后缓存也要做同步更新。public boolean updatePassword(String token, long id, String formPass) {//取userMiaoshaUser user getById(id);if(user null) {throw new GlobalException(CodeMsg.MOBILE_NOT_EXIST);}//更新数据库MiaoshaUser toBeUpdate new MiaoshaUser();toBeUpdate.setId(id);toBeUpdate.setPassword(MD5Util.formPassToDBPass(formPass, user.getSalt()));miaoshaUserDao.update(toBeUpdate);//处理缓存redisService.delete(MiaoshaUserKey.getById, id);user.setPassword(toBeUpdate.getPassword());redisService.set(MiaoshaUserKey.token, token, user);return true;}总结服务端渲染利用模板引擎技术生成静态html页面到指定目录或者是redis等缓存中间件中去页面上的访问路径直接指向到该目录下的静态html这种方式实际上还是属于服务端渲染的静态化方式。客户端渲染将原本的模板语言渲染的html改变为纯静态的htm/shtml然后用js/ajax渲染数据加上spring配置文件的相关配置指定静态文件存放路径达到利用浏览器缓存页面的方式。推荐使用这种方式这种属于前后端分离的客户端渲染方式性能更好。对象缓存对象级缓存主要是在service中对一些对象的缓存处理要按照合理的步骤先取缓存再取数据库缓存中有就返回缓存对象没有就返回数据库数据最后将数据库数据再放入缓存中。如果对缓存处理逻辑感兴趣可以参考这篇博客http://blog.csdn.net/tTU1EvLDeLFq5btqiK/article/details/78693323
http://www.zqtcl.cn/news/496121/

相关文章:

  • 网站建设 内容缺乏域名备案要多久
  • 产品展示型网站建设全国新冠疫苗接种率
  • 网站建设商如何自建商城和电商平台
  • 深圳做二类学分的网站开发一平方米多少钱
  • 如何做原创小说网站建一个o2o网站
  • 东莞市住房建设网站互动科技 网站建设
  • 淄博网站建设高端网络seo线上培训多少钱
  • s网站优化工地模板图片
  • 手机网站使用微信支付神级网页设计网站
  • 网站建站大约多少钱如何引流被动加好友
  • 哪些网站可以查企业信息大城县有做网站的吗
  • 上海网站建设电影联wordpress 分类title
  • 杭州网站建设招标免费seo排名优化
  • 网站建设服务费是否无形资产百度一下你就知道官网下载安装
  • 网站付款链接怎么做在线设计商标logo
  • 阿里巴巴做网站多少钱特大新闻凌晨刚刚发生
  • 网站如何做se设计师网站pintset
  • 上海网站制作机构wordpress 优酷免广告
  • 关于网站建设的名言网站开发的技术难点
  • 免费云建站廊坊seo外包
  • 个人网站建设方案书用备案的衡水市网站制作
  • 教育网站的建设品牌营销型网站作用
  • 金凤区建设交通局网站做洗衣液的企业网站
  • 南阳网站优化手机咋做网站
  • 做网站多少钱一年没有网站做cpa怎么赚钱
  • 二手房发布网站怎么做建站哪家好用兴田德润
  • 网站开发有几种深圳网站制作长沙
  • 为什么一个网站外链那么多公司团建活动
  • 公司门户网站建设策划书wordpress清空数据
  • 大兴专注高端网站建设交互设计留学