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

哪个网站做的w7系统好合肥网站建设推广

哪个网站做的w7系统好,合肥网站建设推广,自适应响应式网站源码,企业网站开发方案对于开发一个Web项目来说#xff0c;无论是电商还是其他品类的项目#xff0c;注册与登录模块都是必不可少的#xff1b;注册登录功能也是我们在日常生活中最长接触的#xff0c;对于这个业务场景的需求与逻辑大概是没有什么需要详细介绍的#xff0c;市面上常见的邮箱注册…对于开发一个Web项目来说无论是电商还是其他品类的项目注册与登录模块都是必不可少的注册登录功能也是我们在日常生活中最长接触的对于这个业务场景的需求与逻辑大概是没有什么需要详细介绍的市面上常见的邮箱注册、手机注册、账号密码注册其处理方式基本相同我们这里使用账号密码注册的方式实现整个平台的注册/登录功能 让我们开始 判断用户名是否存在 实现注册部分的代码首先想到的就是我们要对前端所发送过来的请求参数做验证在有些项目中会将请求参数的格式验证和合法性验证只写在前端校验而后端只实现业务逻辑我认为这是极其危险的编码习惯当我们的项目放在线上的时候就会有恶意用户绕过前端验证直接访问我们的服务器对线上业务造成破坏因此前端验证是为了减轻一部分请求直接到达后端但是相应的验证后端也要去做 那么首先我们要实现的就是验证用户注册的用户名是否存在我们首先来看一下用户表的结构及设计 从图上我们可以看到用户表中常用的字段我们用户表以用户的Id为主键但注意ID并不是自增长的这与传统的Id设计不同这里不是自增的原因是当系统达到一定的体量时用户数量激增我们需要去做分布式集群需要分库分表这时自增的ID会给分库分表带来极大的困难因为出于日后系统优化的考虑我们这里的数据库主键不是自增的。 接口API淘宝开发 理清业务逻辑看完数据库结构我们着手开始编写业务代码在整个项目代码的编写和接口的实现我们都遵循自底向上的方式从数据库开始实现数据的映射业务实现结果推送的流程对应pojo映射---Service编写---Controller控制的过程。 那么我们开始啦首先我们创建一个UserService接口在接口中我们编写我们第一个业务方法 /** * 判断用户名是否存在 */public boolean queryUsernameIsExist(String username); 我们传入一个userName返回一个布尔值有了接口之后我们去实现这个方法 我们在service工程中新建一个Impl的包在里面新建一个类UserServiceImpl去实现UserService接口并实现其中的方法我们在这个方法中需要操作User这个实体类那么我们先把UserMapper引入进来 Autowiredpublic UsersMapper usersMapper; 在方法中我们使用Example这种使用条件查询的方式去做查询 Transactional(propagation Propagation.SUPPORTS)Overridepublic boolean queryUsernameIsExist(String username) {Example userExample new Example(Users.class); Example.Criteria userCriteria userExample.createCriteria(); userCriteria.andEqualTo(username,username);Users result usersMapper.selectOneByExample(userExample);return result null ? false : true;} 在这个方法的实现中我们使用了Example这种方式Example映射一个实体类获得一个example对象为这个对象去添加相应的条件Criteria对应的方法有很多可以判断等于大于相似等各类条件使用起来很方便感兴趣的同学可以去阅读他的源码这个方法返回一个Users对象我们去判空若为空则用户名可用若false则用户名存在 实现了Service之后我们来编写Controller我们在api工程中新建一个Controller类。命名为PassportController我们为他加上RestController注解并加上路由地址在这个Controller中我们需要操作UserService来进行查询那么我们先将UserService注入进来 Autowiredprivate UserService userService; 并定义一个方法声明方法的路由地址 GetMapping(/usernameIsExist)public IMOOCJSONResult usernameIsExist(RequestParam String username) { //判断用户名不能为空 if (StringUtils.isBlank(username)) { return IMOOCJSONResult.errorMsg(用户名不能为空); }//查找注册的用户名是否存在boolean isExist userService.queryUsernameIsExist(username); if (isExist) { return IMOOCJSONResult.errorMsg(用户名已经存在); } // 请求成功用户名没有重复 return IMOOCJSONResult.ok();} 在这个方法中我们在判断username为空的时候使用了一个字符串的工具类他是Apache提供的我们需要首先引入他的依赖 !-- apache 工具类 --dependency groupIdcommons-codec/groupId artifactIdcommons-codec/artifactId version1.11/version/dependencydependency groupIdorg.apache.commons/groupId artifactIdcommons-lang3/artifactId version3.4/version/dependencydependency groupIdcommons-io/groupId artifactIdcommons-io/artifactId version1.3.2/version/dependency 引入之后我们便可以操作StringUtils他提供了一个isBlank的方法来判断字符串是否为空 同时我们在方法中可以看到一个IMOOCJSONResult对象这是一个结果集对象因为在代码中我们需要返回的结果值类型很多很不确定并且我们需要返回自定义的响应码来告诉前端请求成功与否前端对约定好的各类返回值做统一处理避免前端出现代码报错影响用户体验同时自定义的结果响应能提高我们定位错误的速度规范接口因此我们先定义一个结果返回类 public class IMOOCJSONResult {// 定义jackson对象 private static final ObjectMapper MAPPER new ObjectMapper();// 响应业务状态 private Integer status;// 响应消息 private String msg;// 响应中的数据 private Object data;...} 完整的类代码请大家去看源码不方便在这里粘贴全部代码只提供类中的属性供大家参考大家可以参考对应的实现思路去封装自己的结果集我们使用这样统一的结果类便可以在返回数据的同时返回请求状态码给前端提高接口可读性和稳定性。 接口测试 当我们第一个接口编写完成后我们使用PostMan进行接口测试postman是一款开源免费的接口调试工具可以模拟客户端发出请求是后端开发必备工具 我们可以看到我们的请求是成功的当然图示中我请求的是我的生产服务器接口大家在本机调试的时候URL应该是localhost开头的我们可以看到请求结果的响应也是我们封装的结果集的响应有响应码和数据体组成大家可以认识更换请求数据测试接口功能的完整性。 用户注册 完成了第一个判断用户名是否存在的接口后我们着手开始进行用户注册的逻辑编写首先我们在注册的时候依然是操作UserMapper所以数据层是已经准备好的我们在UserService中定义第二个创建用户的方法 /** * 创建用户 * param userBO * return */public Users createUser(UserBO userBO); 这个方法会接收一个表单数据数据包中包含密码用户名甚至更多的信息如果我们在后端一个一个的接收显然是不合理的当请求参数过多时我们便将请求参数封装成一个请求的实体类在这里我们封装一个UserBO public class UserBO { ApiModelProperty(value 用户名,name username,example 张三,required true) private String username; ApiModelProperty(value 密码,name password,example 123456,required true) private String password; ApiModelProperty(value 确认密码,name confirmPassword,example 123456,required false) private String confirmPassword;    ...} get/set方法大家自行生成方法定义好后我们去实现类中实现他 Transactional(propagation Propagation.REQUIRED)Overridepublic Users createUser(UserBO userBO) { //使用工具类生成唯一id String userId sid.nextShort(); Users user new Users(); user.setId(userId); user.setUsername(userBO.getUsername()); try { user.setPassword(MD5Utils.getMD5Str(userBO.getPassword())); } catch (Exception e) { e.printStackTrace(); } //默认用户昵称同用户名 user.setNickname(userBO.getUsername()); //默认头像 user.setFace(USER_FACE); //默认生日 user.setBirthday(DateUtil.stringToDate(1970-01-01)); //设置性别(使用枚举操作)默认为保密 user.setSex(Sex.secret.type);user.setCreatedTime(new Date()); user.setUpdatedTime(new Date());usersMapper.insert(user); return user;} 我们在这里存储密码时使用了MD5加密机制防止数据库资源泄露导致用户数据泄露保证数据的安全性MD5的工具类大家可以在源码中获取我就不贴在这里了同时使用的工具类还有日期格式化工具类同样的大家在源码中获取我们在新建用户设置性别时我们可以使用枚举的形式去定义用户的性别增强代码的可读性 /** * Desc性别枚举 */public enum Sex {woman(0,女), man(1,男), secret(2,保密);public final Integer type; public final String value;Sex(Integer type, String value) { this.type type; this.value value; }} 我们在生成唯一ID的时候我们也会使用工具类注入Sid对象使用org.n3r.idworker中的方法为了使用其他包中的方法我们需要SpringBoot在启动时扫描到idworker我们需要在Application中配置 //扫描所有包以及相关组件包ComponentScan(basePackages {com.imooc,org.n3r.idworker}) 接口实现 写完Service我们回到PassportController因为是一个保存数据的方法我们使用Post的方式 ApiOperation(value 用户注册,notes 用户注册,httpMethod POST)PostMapping(/regist)public IMOOCJSONResult regist(RequestBody UserBO userBO, HttpServletRequest request, HttpServletResponse response){String username userBO.getUsername(); String password userBO.getPassword(); String confirmPwd userBO.getConfirmPassword();System.out.println(username); System.out.println(password); System.out.println(confirmPwd);// 判断用户名和密码必须不为空 if (StringUtils.isBlank(username) || StringUtils.isBlank(password) || StringUtils.isBlank(confirmPwd)) { return IMOOCJSONResult.errorMsg(用户名及密码不能为空); } // 查询用户名是否存在 boolean isExist userService.queryUsernameIsExist(username); if (isExist) { return IMOOCJSONResult.errorMsg(用户名已经存在); } // 密码长度不能小于6位 if (password.length() 6) { return IMOOCJSONResult.errorMsg(密码长度不能小于6位); } // 判断两次密码是否一致 if (!password.equals(confirmPwd)) { return IMOOCJSONResult.errorMsg(两次密码输入不一致); } // 实现注册 Users userResult userService.createUser(userBO);userResult setNullProperty(userResult);CookieUtils.setCookie(request,response,user, //使用Cookie工具类获取Cookie JsonUtils.objectToJson(userResult),true); //使用Json工具类将对象转换为String // TODO 生成用户token存入redis会话 // TODO 同步购物车数据return IMOOCJSONResult.ok();} Controller的实现的没有什么注重的点我们接收到前端传来的数据包解析数据包中的属性进行校验校验通过调用Service层的方法实现注册同样的对于这个方法我们使用PostMan进行调试。 推荐 No.1 New Arrival Swagger2 在上面的部分我们实现了两个接口实现了注册的业务功能并使用PostMan进行了接口调试这些都属于后端开发的部分那么我们如何在前后端分离的模式下与前端沟通联调呢这时候我们需要使用接口文档接口文档规范了接口路由、参数入参、出参以及参数的类型。但是对于程序员来说花费大量的时间去编写文档是不科学不可取不合理的那么Swagger2应运而生首先我们引入依赖 !-- swagger2 配置 --dependency groupIdio.springfox/groupId artifactIdspringfox-swagger2/artifactId version2.4.0/version/dependencydependency groupIdio.springfox/groupId artifactIdspringfox-swagger-ui/artifactId version2.4.0/version/dependencydependency groupIdcom.github.xiaoymin/groupId artifactIdswagger-bootstrap-ui/artifactId version1.6/version/dependency 引入依赖后我们需要定义配置类我们在api工程汇总创建Swagger2的配置类 ConfigurationEnableSwagger2public class Swagger2 { // http://localhost:8088/swagger-ui.html 原路径// http://localhost:8088/doc.html//配置swagger2核心配置 docket Bean public Docket createRestApi(){ return new Docket(DocumentationType.SWAGGER_2)//指定api类型为swagger2 .apiInfo(apiInfo()) //用于定义api文档汇总信息 .select().apis(RequestHandlerSelectors .basePackage(com.imooc.controller)) //指定controller包 .paths(PathSelectors.any()) //所有Controller .build(); }private ApiInfo apiInfo() { return new ApiInfoBuilder() .title(天天吃货 电商平台接口api) //文档页标题 .contact(new Contact(eumen, https://www.imooc.com, 18829526908163.com)) //联系人信息 .description(api文档) //详细信息 .version(1.0.1) //文档版本号 .termsOfServiceUrl(106.54.54.200)//网站地址 .build(); }} 配置完成后我们便可以使用API这个注解去添加方法的参数说明和方法说明了并且启动项目访问BASE_URL/Swagger-ui.html便可以看到生成的项目API文档 对于Swagger2的使用大家可以去查阅文档这是一个非常好用的文档生成工具提高生产力让开发远离文档困扰我们甚至可以在文档里做接口的调试
http://www.huolong8.cn/news/248424/

相关文章:

  • 上海 做网站京东网上购物商城官方网站
  • 牙科 网站建设方案秦皇岛建设局招标网
  • 怎么看网站是dede模板响应式网站首页
  • 网站建设框架文档网站基础建设和维护
  • 网站标题在线制作wordpress cnki
  • 杭州行业网站建设WordPress唯美个人博客主题
  • 网站建设服务有哪些方面wordpress使用的编程语言
  • 潮州网站搭建找谁有没有专门做数据分析的网站
  • 网站怎么做html5手机微网站
  • 佛山网站维护服装品牌网站开发php
  • 网站开发开题报告格式酷炫网站推荐
  • 做网站一般都需要什么功能wordpress做在线商城
  • 网站上的支付接口怎么做wordpress视频无法播放
  • 没有公网ip做网站互联网营销师是干什么的
  • 企业建设官方网站作用及意义建立网站需要多少钱怎么样
  • 专业做物业网站的公司吗wordpress wp-admin
  • 小说阅读网站开发设计广告公司好做吗
  • 湛江哪里有建网站808影院网
  • 公司在百度做网站济南外贸建站
  • 免费永久网站建设餐厅网站建设文案书
  • 小程序代理方法东莞seo培训
  • 外贸网站建设渠道网站后台添加内容网页不显示
  • 优易官方网站windows 7 wordpress
  • 论坛模板网站建设网站开发直播
  • 杭州建站模板外国人做的汉字网站
  • 建设书法网站的主题是前端电商网站设计论文
  • 旅游景区网站模板wordpress 灯鹭
  • 烦恼可以做网站吗提供手机自适应网站制作
  • 网站没有百度权重优秀高端网站建设
  • 网站推广的主要方法内网网站如何建设方案