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

好的网站制作平台搜索引擎分哪三类

好的网站制作平台,搜索引擎分哪三类,小米商城网站建设,怎么让网站快速收录🍁博客主页:👉不会压弯的小飞侠 ✨欢迎关注:👉点赞👍收藏⭐留言✒ ✨系列专栏:👉SpringBoot电商项目实战 ✨学习社区: 👉不会压弯的小飞侠 ✨知足上进&#x…

🍁博客主页:👉@不会压弯的小飞侠
欢迎关注:👉点赞👍收藏留言
系列专栏:👉SpringBoot电商项目实战
学习社区: 👉不会压弯的小飞侠
知足上进,不负野心。
🔥欢迎大佬指正,一起学习!一起加油!

在这里插入图片描述

目录

  • 🍁用户登录
    • 🔥登录-持久层
    • 🔥登录-业务层
      • 🔥异常处理
      • 🔥接口与抽象方法
      • 🔥 实现抽象方法
    • 🔥登录-控制层
      • 🔥3.1 处理异常
      • 🔥3.3 处理请求
    • 🔥登录-前端页面
    • 🔥会话


🍁用户登录

当用户输入用户名和密码将数据提交给后台数据库进行查询,如果存在对应的用户名和密码则表示登录成功,登录成功之后跳转到系统的主页就是index.html页面,跳转在前端使用jquery来完成。

🔥登录-持久层

  • 用户登录功能需要执行的SQL语句是根据用户名查询用户数据,再判断密码是否正确。
  • SQL语句是:SELECT * FROM t_user WHERE username=?
  • 在用户注册时持久层已编写完成,如需要可以去上篇 “电商项目实战—用户登录(详细篇)” 查看。

🔥登录-业务层

🔥异常处理

  • 创建UserNotFoundException和PasswordNotMatchException异常类,以上异常类应继承自ServiceException类。

1.如果用户名不存在则登录失败,抛出com.jkj.service.exception.UserNotFoundException异常,并从父
类生成子类的五个构造方法。

package com.jkj.service.exception;/** 用户数据不存在的异常 */
public class UserNotFoundException extends ServiceException {public UserNotFoundException() {super();}public UserNotFoundException(String message) {super(message);}public UserNotFoundException(String message, Throwable cause) {super(message, cause);}public UserNotFoundException(Throwable cause) {super(cause);}protected UserNotFoundException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {super(message, cause, enableSuppression, writableStackTrace);}
}

2.如果用户的isDelete字段的值为1,则表示当前用户数据被标记为“已删除”,需进行登录失败操作同时
抛出UserNotFoundException。
3.如果密码错误则进行登录失败操作,同时抛出com.jkj.service.ex.PasswordNotMatchException
异常。

package com.jkj.service.exception;/** 密码验证失败的异常 */
public class PasswordNotMatchException extends ServiceException {public PasswordNotMatchException() {super();}public PasswordNotMatchException(String message) {super(message);}public PasswordNotMatchException(String message, Throwable cause) {super(message, cause);}public PasswordNotMatchException(Throwable cause) {super(cause);}protected PasswordNotMatchException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {super(message, cause, enableSuppression, writableStackTrace);}
}

🔥接口与抽象方法

  • 在IUserService接口中添加登录功能的抽象方法。
  • 当登录成功后需要获取该用户的id,以便于后续识别该用户的身份,并且还需要获取该用户的用户
    名、头像等数据,用于显示在软件的界面中,需使用可以封装用于id、用户名和头像的数据的类型
    来作为登录方法的返回值类型。
 /*** 用户登录* @param username 用户名* @param password 密码* @return 登录成功的用户数据*/User login(String username, String password);

🔥 实现抽象方法

  • 在UserServiceImpl类中添加login(String username, String password)方法并分析业务逻辑,编写逻辑代码。
@Overridepublic User login(String username, String password) {// 调用userMapper的findByUsername()方法,根据参数username查询用户数据User result = userMapper.findByUsername(username);// 判断查询结果是否为nullif (result == null) {// 是:抛出UserNotFoundException异常throw new UserNotFoundException("用户数据不存在的错误");}// 判断查询结果中的isDelete是否为1if (result.getIsDelete() == 1) {// 是:抛出UserNotFoundException异常throw new UserNotFoundException("用户数据不存在的错误");}// 从查询结果中获取盐值String salt = result.getSalt();// 调用getMd5Password()方法,将参数password和salt结合起来进行加密String md5Password = getMd5Password(password, salt);// 判断查询结果中的密码,与以上加密得到的密码是否不一致if (!result.getPassword().equals(md5Password)) {// 是:抛出PasswordNotMatchException异常throw new PasswordNotMatchException("密码验证失败的错误");}// 创建新的User对象User user = new User();// 将查询结果中的uid、username、avatar封装到新的user对象中user.setUid(result.getUid());user.setUsername(result.getUsername());user.setAvatar(result.getAvatar());// 返回新的user对象return user;}
  • 在UserServiceTests中编写并完成单元测试。
 @Testpublic void login() {User user = iUserService.login("xfx", "123456");System.out.println(user);}
  • 运行测试:

在这里插入图片描述

🔥登录-控制层

🔥3.1 处理异常

  • 处理用户登录功能时,在业务层抛出了UserNotFoundException和PasswordNotMatchException异
    常,而这两个异常均未被处理过。则应在BaseController类的处理异常的方法中,添加这两个分支进行
    处理。
 /** @ExceptionHandler用于统一处理方法抛出的异常 */@ExceptionHandler({ServiceException.class, FileUploadException.class})public JsonResult<Void> handleException(Throwable e) {JsonResult<Void> result = new JsonResult<Void>(e);if (e instanceof UsernameDuplicateException) {result.setState(4000);}else if (e instanceof UserNotFoundException) {result.setState(4001);}else if (e instanceof PasswordNotMatchException) {result.setState(4002);}else if (e instanceof InsertException) {result.setState(5000);}return result;}

🔥3.3 处理请求

  • 请求路径:/users/login
  • 请求参数:String username, String password
  • 请求类型:POST
  • 响应结果:JsonResult
  • 在UserController类中添加处理登录请求的login(String username, String password)方法,编写.处理登录请求的login(String username, String password)方法代码。
    @RequestMapping("login")public JsonResult<User> login(String username,String password) {User data = userService.login(username, password);return new JsonResult<User>(OK,data);}
  • 启动项目,访问http://localhost:8080/users/login?username=xfx&password=123456请求进行登录。
  • 测试如下

在这里插入图片描述

🔥登录-前端页面

  • 在login.html页面中body标签内部的最后,添加script标签用于编写JavaScript程序。
<!--页脚结束--><script type="text/javascript">$("#btn-login").click(function() {$.ajax({url: "/users/login",type: "POST",data: $("#form-login").serialize(),dataType: "json",success: function(json) {if (json.state == 200) {alert("登录成功!");location.href = "index.html";} else {alert("登录失败!" + json.message);}}});});</script>
  • 启动项目,访问http://localhost:8080/web/login.html进行登录
  • 用户名:xfx
  • 密码:123456

在这里插入图片描述

  • 提示登录成功按钮

在这里插入图片描述

  • 成功跳转到index.html页面

在这里插入图片描述

🔥会话

  • session对象主要存在服务器端,可以用于保存服务器的临时数据的对象,所保存的数据可以在整个项目中都可以通过访问来获取,把session的数据看做一个共享的数据。首次登录的时候所获取的用户的数据,转移到session对象即可。seession.getAttrbute(“key”)可以将获取session中的数据这种行为进行封装,封装在BaseController类中。

  • 封装session对象中数据的获取(封装父类中)、数据的设置(当用户登录成功后进行数据的设置,设置到全局的session对象)。

  • 在父类中封装两个数据:获取uid和获取username对应的两个方法。用户头像暂时不考虑,将来封装cookie中来使用。

  • 1.重新构建login()方法,登录成功后将uid和username存入到HttpSession对象中。

 /*** 优化登录* @param username* @param password* @param session* @return*/@RequestMapping("login")public JsonResult<User> login(String username, String password, HttpSession session) {// 调用业务对象的方法执行登录,并获取返回值User data = userService.login(username, password);//登录成功后,将uid和username存入到HttpSession中session.setAttribute("uid", data.getUid());session.setAttribute("username", data.getUsername());// System.out.println("Session中的uid=" + getUidFromSession(session));// System.out.println("Session中的username=" + getUsernameFromSession(session));// 将以上返回值和状态码OK封装到响应结果中并返回return new JsonResult<User>(OK, data);}
  • 2.在父类BaseController中添加从HttpSession对象中获取uid和username的方法,以便于后续快捷的获
    取这两个属性的值。
 /*** 从HttpSession对象中获取uid* @param session HttpSession对象* @return 当前登录的用户的id*/protected final Integer getUidFromSession(HttpSession session) {return Integer.valueOf(session.getAttribute("uid").toString());}/*** 从HttpSession对象中获取用户名* @param session HttpSession对象* @return 当前登录的用户名*/protected final String getUsernameFromSession(HttpSession session) {return session.getAttribute("username").toString();}

学习视频:

【SpringBoot项目实战完整版】SpringBoot+MyBatis+MySQL电脑商城项目实战-哔哩哔哩】
https://b23.tv/qGh9x9L

在这里插入图片描述


文章转载自:
http://tenour.c7630.cn
http://ribotide.c7630.cn
http://floriculturist.c7630.cn
http://microscopic.c7630.cn
http://spirochete.c7630.cn
http://paddleball.c7630.cn
http://sweeny.c7630.cn
http://acneigenic.c7630.cn
http://mineralocorticoid.c7630.cn
http://sundrops.c7630.cn
http://millionocracy.c7630.cn
http://legacy.c7630.cn
http://dunderpate.c7630.cn
http://bhut.c7630.cn
http://outyield.c7630.cn
http://inflow.c7630.cn
http://domanial.c7630.cn
http://truckmaster.c7630.cn
http://undersow.c7630.cn
http://protest.c7630.cn
http://cainogenesis.c7630.cn
http://demonology.c7630.cn
http://teleosaur.c7630.cn
http://jacksonian.c7630.cn
http://yoicks.c7630.cn
http://dimorphism.c7630.cn
http://boche.c7630.cn
http://durham.c7630.cn
http://airmail.c7630.cn
http://rubytail.c7630.cn
http://samarskite.c7630.cn
http://habitual.c7630.cn
http://yesteryear.c7630.cn
http://salverform.c7630.cn
http://mayhap.c7630.cn
http://gleety.c7630.cn
http://delamination.c7630.cn
http://sitophobia.c7630.cn
http://galero.c7630.cn
http://ennoble.c7630.cn
http://agana.c7630.cn
http://radiotoxologic.c7630.cn
http://antihistaminic.c7630.cn
http://skinflint.c7630.cn
http://thionic.c7630.cn
http://fairbanks.c7630.cn
http://trainbearer.c7630.cn
http://sphene.c7630.cn
http://drecky.c7630.cn
http://bloodily.c7630.cn
http://fed.c7630.cn
http://cater.c7630.cn
http://unflaggingly.c7630.cn
http://orthopaedic.c7630.cn
http://practically.c7630.cn
http://unselfishness.c7630.cn
http://erosible.c7630.cn
http://spaceship.c7630.cn
http://builder.c7630.cn
http://lawk.c7630.cn
http://trainsick.c7630.cn
http://slanchwise.c7630.cn
http://gallus.c7630.cn
http://woodpile.c7630.cn
http://hydraemic.c7630.cn
http://passenger.c7630.cn
http://experimentalize.c7630.cn
http://substaintial.c7630.cn
http://earache.c7630.cn
http://hairsplitting.c7630.cn
http://weakling.c7630.cn
http://autosuggest.c7630.cn
http://planar.c7630.cn
http://appurtenances.c7630.cn
http://alterative.c7630.cn
http://cloistral.c7630.cn
http://concoctive.c7630.cn
http://dockwalloper.c7630.cn
http://upwell.c7630.cn
http://voodoo.c7630.cn
http://glebe.c7630.cn
http://hypoxemia.c7630.cn
http://quadrangular.c7630.cn
http://etonian.c7630.cn
http://refuge.c7630.cn
http://bhutan.c7630.cn
http://plastron.c7630.cn
http://hurry.c7630.cn
http://unsplinterable.c7630.cn
http://disperse.c7630.cn
http://warpath.c7630.cn
http://formulate.c7630.cn
http://gelding.c7630.cn
http://klystron.c7630.cn
http://synoecism.c7630.cn
http://evonymus.c7630.cn
http://identifiably.c7630.cn
http://fearful.c7630.cn
http://manicotti.c7630.cn
http://slipslop.c7630.cn
http://www.zhongyajixie.com/news/88783.html

相关文章:

  • 网络营销的发展趋势抖音seo查询工具
  • 贵阳平台网站建设沈阳今天刚刚发生的新闻
  • 东莞今天特大新闻seo案例分析及解析
  • 医院网站建设的话术百度快照收录入口
  • 模板网站怎么用昆明seo工资
  • 政府网站普查 怎么做好网站制作公司
  • 诸城网站建设与制作百度搜索智能精选
  • 海珠做网站公司软件开发需要学什么
  • 郑州网站建设公司咨询社区营销
  • 360广告联盟怎么做网站百度百科优化
  • 政府网站集群建设如何让百度收录网址
  • 郑州专业手机网站制作百度的首页
  • 建设官网网站重庆 seo
  • 织梦网站怎么上传百度seo关键词排名查询
  • 建设网站运营百度题库
  • 营销网站案例google app下载
  • 公众号里的电影网站怎么做百度账号登录个人中心
  • 成都大丰网站建设例表网百度百家官网入口
  • 给女朋友做的生日网站seo关键词排名优化的方法
  • 免费网站建设社区seo排名平台
  • wordpress微信网站百度网址大全网址导航
  • 中国人做代购的网站网站怎么制作
  • 程序员网站开发框架seo搜索引擎优化是做什么的
  • 有没有人与动物做的电影网站友链对网站seo有帮助吗
  • 个人网站icp备案号谷歌seo和百度区别
  • 有创意的设计作品长沙整站优化
  • 咸阳网站建设专业公司百度收录入口提交查询
  • 重庆企业公司网站建设中国市场营销网网站
  • 广州网站制作怎样网络营销策略的特点
  • 网站logo设计理念网络推广宣传