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

武冈网站建设如何给自己网站做网站优化

武冈网站建设,如何给自己网站做网站优化,做网站要用那些软件,网站开发综合实训心得登录方式调整 第1步#xff1a;从zmall-common的pom.xml中移除spring-session-data-redis依赖 注意#xff1a; 1#xff09;本次不采用spring-session方式#xff0c;改用redis直接存储用户登录信息#xff0c;主要是为了方便之后的jmeter压测#xff1b; 2#xff09…登录方式调整 第1步从zmall-common的pom.xml中移除spring-session-data-redis依赖 注意 1本次不采用spring-session方式改用redis直接存储用户登录信息主要是为了方便之后的jmeter压测 2这里只注释调用spring-session的依赖保留redis的依赖 第2步在zmall-common公共模块中定义RedisConfig配置类 Configuration public class RedisConfig {Beanpublic RedisTemplateString,Object restTemplate(RedisConnectionFactory redisConnectionFactory){RedisTemplateString,Object redisTemplatenew RedisTemplate();//String类型Key序列化redisTemplate.setKeySerializer(new StringRedisSerializer());//String类型Value序列化redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());//Hash类型Key序列化redisTemplate.setHashKeySerializer(new StringRedisSerializer());//Hash类型Value序列化redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());redisTemplate.setConnectionFactory(redisConnectionFactory);return redisTemplate;} }第3步在zmall-common公共模块中配置redis相关服务 IRedisServcie public interface IRedisService {/*** 将登陆用户对象保存到Redis中并以token来命名* param token* param user*/void setUserToRedis(String token, User user);/*** 根据token令牌从Redis中获取User对象* param token* return*/User getUserByToken(String token); }RedisServcieImple Service public class RedisServiceImpl implements IRedisService {Autowiredprivate RedisTemplateString,Object redisTemplate;Overridepublic void setUserToRedis(String token, User user) {String keyuser:token;redisTemplate.boundValueOps(key).set(user,7200,TimeUnit.SECONDS);}Overridepublic User getUserByToken(String token) {return (User) redisTemplate.opsForValue().get(user:token);} }用户登录成功后将用户对象保存到Redis中并设置超时时间7200秒。 第4步配置自定义参数解析UserArgumentResolver、WebConfig UserArgumentResolver /*** 自定义用户参数类*/ Component public class UserArgumentResolver implements HandlerMethodArgumentResolver {Autowiredprivate IRedisService redisService;/*** 只有supportsParameter方法执行返回true才能执行下面的resolveArgument方法* param methodParameter* return*/Overridepublic boolean supportsParameter(MethodParameter methodParameter) {Class? type methodParameter.getParameterType();return type User.class;}Overridepublic Object resolveArgument(MethodParameter methodParameter,ModelAndViewContainer modelAndViewContainer,NativeWebRequest nativeWebRequest,WebDataBinderFactory webDataBinderFactory) throws Exception {HttpServletRequest req (HttpServletRequest) nativeWebRequest.getNativeRequest();//从cookie获取token令牌String token CookieUtils.getCookieValue(req, token);//判断cookie中的token令牌是否为空if(StringUtils.isEmpty(token))throw new BusinessException(JsonResponseStatus.TOKEN_ERROR);//根据token令牌获取redis中存储的user对象方便jmeter测试User user redisService.getUserByToken(token);if(nulluser)throw new BusinessException(JsonResponseStatus.TOKEN_ERROR);return user;} }WebConfig Component public class WebConfig implements WebMvcConfigurer {Autowiredprivate UserArgumentResolver userArgumentResolver;Overridepublic void addArgumentResolvers(ListHandlerMethodArgumentResolver resolvers) {resolvers.add(userArgumentResolver);}Overridepublic void addResourceHandlers(ResourceHandlerRegistry registry) {//添加静态资源访问映射//registry.addResourceHandler(/static/**)// .addResourceLocations(classpath:/static/);} }第5步用户登录业务调整将spring-session方式更改为redis方式存储登录用户信息。 //5.通过UUID生成token令牌并保存到cookie中 String token UUID.randomUUID().toString().replace(-,); //将随机生成的Token令牌保存到Cookie中并设置1800秒超时时间 CookieUtils.setCookie(req,resp,token,token,7200); //6.将token令牌与spring session进行绑定并存入redis中 //HttpSession session req.getSession(); //session.setAttribute(token,us); //将token令牌与user绑定后存储到redis中方便jmeter测试 redisService.setUserToRedis(token,us);这里采用Redis方式直接存储登录用户信息只为后续使用Jmeter压测时提供便利。正常运行使用项目还是可以使用spring-session方式。 第6步修改商品服务zmall-product模块中的index方法将之前从HttpSession中获取登录用户信息改换成User对象参数方式 RequestMapping(/index.html) public String index(Model model, User user){System.out.println(user); }在调用index方法之前先由自定义的参数解析器进行参数解析并返回解析结果User所以在这里可直接在方法参数中获取的User对象。 第7步重启zmall-user和zmall-product模块完成用户登录后直接在浏览器地址栏输入http://zmall.com/product-serv/index.html查看zmall-product模块中的控制台是否已经获取到登录用户对象信息。 生成秒杀订单 绑定秒杀商品 添加sellDetail.html页面到zmall-product模块中实现首页秒杀商品展示必须保证秒杀商品状态为已激活、且秒杀商品的活动时间为有效时间范围之内。 #if kills??#list kills as gdiv classsell_${g_index?if_exists1}div classsb_imga href${ctx}/sellDetail.html?pid${g.id}img src${g.fileName} width242 height356 //a/divdiv classs_pricespan${g.price}/span/divdiv classs_nameh2a href${ctx}/sellDetail.html?pid${g.id}${g.name}/a/h2倒计时span1200/span 时 span30/span 分 span28/span 秒/div/div/#list/#if查看秒杀商品 点击限时秒杀中的秒杀商品根据秒杀商品ID查询秒杀商品详情信息并跳转到sellDetail.html页面展示秒杀商品信息。 订单秒杀 移除seata相关 第1步先注释掉zmall-order和zmall-product模块中的seata依赖 第2步分别删掉zmall-order和zmall-product模块中resources目录下的bootstrap.xml和register.conf文件 第3步移除zmall-order中分布式事务案例中的GlobalTransactional注解 第4步删除DataSourceProxyConfig该类 第5步移除zmall-order中启动类上的注解参数(exclude DataSourceAutoConfiguration.class) //更改前 //SpringBootApplication(exclude DataSourceAutoConfiguration.class) //更改后 SpringBootApplication EnableDiscoveryClient MapperScan({com.zking.zmall.mapper}) EnableFeignClients public class ZmallOrderApplication {public static void main(String[] args) {SpringApplication.run(ZmallOrderApplication.class, args);}} 第6步更换zmall-order和zmall-product中的application.yml配置中的数据库连接池 datasource:#type连接池类型 DBCP,C3P0,Hikari,Druid,默认为Hikari#更改前#type: com.alibaba.druid.pool.DruidDataSource#更改后type: com.zaxxer.hikari.HikariDataSource生成秒杀订单 将SnowFlake雪花ID生成工具类导入到zmall-common模块中utils然后再生成秒杀订单时使用雪花ID来充当秒杀订单编号在zmall-order模块中完成秒杀订单生成工作。 IOrderService public interface IOrderService extends IServiceOrder {JsonResponseBody? createKillOrder(User user, Integer pid); }OrderServiceImpl Transactional Override public JsonResponseBody? createKillOrder(User user, Integer pid) {//1.判断用户是否登录if(nulluser)throw new BusinessException(JsonResponseStatus.TOKEN_ERROR);//根据用户ID和秒杀商品Id判断。。。。//2.根据秒杀商品编号获取秒杀商品库存是否为空Kill kill killService.getOne(new QueryWrapperKill().eq(item_id,pid));if(kill.getTotal()1)throw new BusinessException(JsonResponseStatus.STOCK_EMPTY);//3.根据商品ID获取商品Product product productService.getProductById(pid);//4.秒杀商品库存减一killService.updateKillStockById(pid);//5.生成秒杀订单及订单项SnowFlake snowFlakenew SnowFlake(2,3);Long orderIdsnowFlake.nextId();//创建订单Order ordernew Order();order.setUserId(user.getId());order.setLoginName(user.getLoginName());order.setCost(product.getPrice());order.setSerialNumber(orderId);this.save(order);//创建订单项OrderDetail orderDetailnew OrderDetail();orderDetail.setOrderId(orderId);orderDetail.setProductId(product.getId());orderDetail.setQuantity(1);orderDetail.setCost(product.getPrice());orderDetailService.save(orderDetail);return new JsonResponseBody(); }前端页面秒杀测试 在sellDetail.html页面中添加订单秒杀JS方法。 script$(function(){$(.ch_a).click(function(){let pid$(this).attr(alt);console.log(pid);$.post(http://zmall.com/order-serv/createKillOrder,{pid:pid},function(rs){console.log(rs);if(rs.code200)alert(秒杀成功);elsealert(rs.msg);},json);});}); /script这里虽然已经能正常展示秒杀效果但是还是存在很多问题比如重复抢购问题等等问题。 utils:https://pan.baidu.com/s/1ExaC4GgEg_ofKsARkYhHXw 提取码kq20
http://www.hkea.cn/news/14256775/

相关文章:

  • 做网站定金要多少做阿里云网站的公司
  • mugeda做网站百度网址大全旧版安装
  • 网站开发研究综述余姚建设网站公司
  • 可以做试题的网站服务商的英文简称
  • 做外贸卖小商品是哪个网站网站建设推广的软文
  • 菏泽住房和城乡建设局网站个人网页首页图片
  • 买域名的网站望牛墩网站建设
  • 网站做违法的事情投诉网络舆情应对及处置方案
  • 建工社微课程官网合肥网站快速优化排名
  • 北京网站设计公司哪儿济南兴田德润简介长沙免费建站网络营销
  • 扬州外贸网站建设张家界网站建设的公司
  • 设计外贸商城网站建设高校网站开发
  • 装修网站设计平台多功能垫块机
  • 深圳住房与建设部网站鲜花加盟网站建设
  • 电影网站加盟可以做么商贸有限公司怎么样注册
  • 海口网站制作案例手机网站设计公司皆选亿企邦
  • mvc5网站开发项目下载店面设计图片
  • 免费域名申请网站大全推荐中国装修公司排行榜
  • 宁夏银川网站建设最常见的企业建站程序有
  • wordpress 上传资源seow
  • 怎样做微信网站南阳网站
  • 网站开发简历 自我评价可以免费下源码的网站
  • 网站建设对客户的影响答题app制作教程
  • 网站是asp还是php由一个网页建成的网站
  • 网站建设运营公司推荐可以看网站的手机浏览器
  • ui设计师怎么做自己的网站罗岗网站建设哪家好
  • 免费网站软件哪个好网站搭建要求模板
  • 设计网站手机app客户端wordpress js压缩
  • 做文案的网站软件开发项目总结
  • 百度竞价培训班昆明优化网站排名