travel总结:

news2024/10/6 14:24:23

1、前期准备:

         对于项目的大体构成做了一定的了解,然后主要是做后端的数据处理,前期的准备的话创建项目的大体结构,servlet、service、domain、dao、utils的项目结构。以及一些基础的代码的生成,我觉得最主要的是一些基础的配置。

Web层:

  1. Servlet:前端控制器
  2. html:视图
  3. Filter:过滤器
  4. BeanUtils:数据封装
  5. Jackson:json序列化工具

Service层:

  1. Javamail:java发送邮件工具
  2. Redis:nosql内存数据库
  3. Jedis:java的redis客户端

Dao层:

  1. Mysql:数据库
  2. Druid:数据库连接池
  3. JdbcTemplate:jdbc的工具

        通过这大体的技术,可以根据这个导入依赖,管理maven的依赖,使用项目所需要的一些jar包,然后设置依赖的范围,其实大部分默认都不会出太大的问题,顶多是打包的时候会多出来几个jar包,但是对于有proviate的jar包比如javax.servlet的jar包的设置的依赖范围,是必要的。

        另外再讲一下,如果不是必要的配置,一般不要修改依赖的版本,很多情况出现问题的时候就是版本的不匹配导致的! 

        比如数据库的导入的时候,可能存在的问题就是,不同的数据库版本所支持的一些基础的约束的设置不太一致,所以在导入的时候要进行替换,其次是可能存在编码的不一致也要注意。

        另外是关于配置文件的修改,比如读取数据库的配置文件,高版本的数据库的连接驱动的加载方式和低版本的数据库的连接驱动的方式不太一致,这个要按照自己的配置进行修改。 

2、项目期间:

(1)注册功能的实现:

 1、前端:
         1、表单数据的校验:(js)
/* 表单的校验 触发事件 点击提交按钮或者是当前的栏目失去焦点的时候
* 1 用户名:单词字符 ,长度8-20
* 2 密码: 单词字符,长度8-20
* 3 email: 邮件格式
* 4 姓名: 非空
* 5 手机号: 手机号的格式
* 6 出生日期: 非空
* 7 验证码: 非空
* */

        这里出现一个小问题就是,离谱的是只要我调用方法的时候带有方法的括号就会出现异常,只要输错后就是一直显示红色的边框,即使刷新也是红色,就相当于当这个组件失去焦点的话然后这个调用函数就没有生效,也不是没有生效就是一上来刷新页面还没操作的时候就直接显示红色,然后去掉括号就可以。

        然后我大概查啦一下资料关于这方面的比较少。可能就调用函数的问题吧!     


//错误
$("#username").blur(checkUsername());
//正确
$("#username").blur(checkUsername);
         2、使用ajax完成表单提交

        为啥使用异步请求,因为我们现在使用的是html来呈现的前端页面,不是之前的jsp不能使用servlet的域中就获取值,所以就使用ajax来进行表单的提交。

        发送请求是在所有的校验都为true不然就不发送,在发送数据前要将表单数格式化,使用JQuery的一个函数serialize()将表单上的数据转换成字符串。

        3、注册成功跳转页面

        这个就是根据服务器返回的数据进行相应的处理,如果注册成功跳转注册成功的页面,如果注册失败展示相应的信息到前端的页面。

 2、web:
        1、获取表单数据、封装数据

处理验证码:

        首先进行的是验证码的比较,这里说的是用户填写的验证码数据和生成的验证码的比较,如两个数据一致,然后进行后续的操作就是调用service层的方法。当然如果不一致的话直接返回信息响应给前端页面。

        从前端获取验证码-------->获取session中生成的验证码-------->判断数据-------->封装信息----->转换格式Json------->响应信息给前端。

调用service层:

        获取所有的表单数据-------->创建数据封装对象进行数据封装-------->调用service层的方法获取数据------>判断数据------>根据结果生成响应信息------>响应信息封装格式化Json------->响应信息给前端

         2、调用service方法完成注册

         判断username是否存在,调用dao层的方法,查询数据,然后将查询信息返回给service层。

         3、响应注册信息给前端(json)

        这一阶段就是处理好信息的格式,以及返回什么样的信息。

 3、service:
        1、提供注册方法

        在方法中首先应该判断一下用户名是不是已经存在(调用dao的查询方法),如果存在直接返回 false,如果不存在,然后调用dao的注册方法,添加用户信息。

4、dao:
        1、查询用户------根据用户名

        这方法就是service层根据提供的username来查询数据并返回。

         2、存储用户(就是注册)

        这个没有返回值,就根据传递的用户信息去添加数据到数据库中。

(2)邮件注册激活功能实现:

        哈哈哈哈,这个是我第一次用,有一点点的小激动,我也很期待它实现后是什么样子!这功能的实现一共分为两个大的部分:发送邮件以及激活。而且发送邮件是实用工具类来进行完成的,不用知道怎么写,会修改会用就可以啦!

1、前端:
2、web:(ActiveUserServlet)
        1、获取激活码并判断:

        在用户提交的get请求中会包含code字段,获取该字段的信息。首先进行初步的判断这个字段的信息是不是空,如果是那么就直接封装错误信息给前端页面。如果不是直接进行后续操作。

        2、根据激活码查询用户判断:

        验证码非空,然后调用servic层的方法得到返回结果,根据返回结果做出相应的操作,如果对比数据库中的code字段不一致封装错误信息返回给前端页面,如果一致那么也是封装信息给前端。

3、service:   
       1、发送信息:

         在service下,在调用dao的注册方法后,然后就向用户填的邮箱地址发送邮件进行激活,激活的话,在user类里面有status激活状态、code激活码两个字段,在注册的时候表单是没有这两个的信息的,也就是说实际上的激活就是再一次的数据添加往uesr表里面,去修改这两个属性的值。

        当用户激活后,修改setatus的激活状态,Y已激活、N未激活。

        这里并没有相应的dao层的功能的添加,只是在原有的regiser注册功能添加两个字段,然后存储到数据库,这里存储的只是验证码,这验证码是生成的(将来和用户体提交的做对比,保持一一致),然后会发送给user注册时的邮箱,用户点击激活才会在修改status状态。

       2、激活:

        首先调用dao层的查询用户的code的方法,得到返回值判断一致,直接调用修该状态的方法,完成激活,如果不一致返回信息给web层。

4、dao:
       1、查询用户的code:

        根据service层传递过来的数据进行数据库的数据查询,对比数据库中的code和用户传递过来code的数据返回查询结果。

       2、修改用户的status:

       经过验证,符合注册条件让然后就可以调用方法修改对应用户的状态信息。

(3)登录功能的实现:

1、前端:

        绑定单击事件然后然后进行提交表单数据,发送异步请求到服务器,在发送表单数据之前先进行数据的格式化,最后就是处理调回函数中返回的数据,根据不同的数据结果做出不同的相应或者处理。

2、web:
        1、获取表单的信息初步验证

        这里的初步验证就是进行验证码的校验,判断验证是不是一致,一致才进行后续的操作,如果不一致直接封装错误信息发送给前端页面。

        2、调用service层的登录方法

       这里只有一个方法,就是根据用户的信息查询。

        3、封装并返回信息给前端页面

        根据查询的信息,然后给返回信息对象info赋值,不同的返回值类型所不同的返回值信息,这里具体一点就是,没有查询到user数据,或者查询到user但未激活,再者就是查询到信息并且激活成功的。

3、service:

        调用dao层的条件查询的方法

4、dao:

        dao层提供一个方法,根据用户的username和password进行查询数据

(4)退出功能的实现:

        离谱死啦,如果前端的页面显示的有问题,一开始可以怀疑自己,但是经过很多次检查后可以大胆一点认定自己的后端代码是正确的,自信一点你可以大胆的换一个浏览器,然后你就会发现是,妈的!是浏览器的错!

        这里将讲一下,就是在登录后显示到前端页面的一些基础用户的基础信息,这里的做法是将登录查询出来的数据存入session中,然后在前端可以获得session中的数据,直接获取是不可以的,肯定要发送请求(异步请求),然后获取相应的session中的数据。

        好滴言归正传,退出功能就是将前端展示的数据抹去就就可以啦,恢复成为原来的样子!在简洁一点就是说,将session中的数据删除就可以了。大概步骤就是访问servlet就是session数据的删除。然后跳转到登录的界面。

        销毁session中的数据刚开始我想着使用removeAttribute(),然后又想到还有一个invalidate的方法,两个的功能好像差不多,就去查资料看一下两个有什么区别。对于removeAttribute():是删除session中的某一个用户状态属性,而invalidate():销毁session,是对session中所有的用户状态属性都将不存在。

(5)servlet的优化:

        到现在也算数实现啦一个小模块,然后前前后后针对user操作做的servlet也写啦很多,后面还有对其他的模块的操作,如果都这样写那么这servlet的模块就很离谱,后期回顾的时候也不方便查看,现在希望的是能够将对uers操作的所有的方法写在一个servlet,让代码的可读性和可维护性提高。
        

        大概的框架,就是前端的所有的对user操作的请求都直接访问UseServlet,基于之前的操作的servlet是直接继承HttpServlet,然后在HttpServlet中的service方法实现了根据请求方式的不同方法的分发(请求方法有七种),在子类一般使用的是get和post,然后之前的servlet的模块中只重写了这两个方法,在重写的方法的中实现啦复杂的功能。

        然后就有啦一个大概的想法,我们可以写一个和Httpservlet类似的,在其中实现对方法的分发,这样我们就可以将我们的servlet进行优化。

知识点回顾:

           subString常见用法:以 String a = “123456anbdc”; 

用法一a.subString(1);得到的为字符串a从下标为1的位置开始截取到最后的值,也就是23456anbdc;
用法二 a.subString(1,5);得到的为字符串a从下标为1的位置开始截取到下标为5的位置的值(不包括下标为5的值),也就是2345;
用法三 a.subString(1,a.indexOf(“b”));得到的为字符串a从下标为1的位置开始截取到指定字符串“b”的值,也就是23456an;
(注:如指定字符串有多个,以第一个为主)
(说明:a.indexOf(“b”)就是取字符串“b”的下标,和上面的用法本质是一样的)

        反射获取方法:

        没有忽略权限修饰符,getmethod()是获取公共的方法也就是一般的,但是getDeclaredMethod()可以获取任意的方法就是很牛逼,然后加s就是获取方法数组,这里用不上嘿嘿嘿!对于这些经过权限修饰符的受保护或者私有的方法,想要调用的话就要暴力反射开启无视权限。

method.setAccessible(true);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1057356.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

leetCode 55.跳跃游戏 贪心算法

给你一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标,如果可以,返回 true ;否则,返回 false 。 示例 1: 输入…

MySQL的卸载与安装(Linux)

MySQL 前言1. 卸载MySQL1.1 查询与关闭对应MySQL服务1.2 卸载对应安装包 2. 安装MySQL2.1 配置MySQL官方yum源2.2 开始安装MySQL 前言 在这里演示的卸载与安装MySQL都是在Linux的Centos 7.6 环境下,不同环境会有所出入。 为了避免安装和卸载MySQL过程中受到权限的…

CF505B Mr. Kitayuta‘s Colorful Graph

Mr. Kitayuta’s Colorful Graph 题面翻译 给出一个 n n n 个点, m m m 条边的无向图,每条边上是有颜色的。有 q q q 组询问 对于第 i i i 组询问,给出点对 u i , v i u_i,v_i ui​,vi​。求有多少种颜色 c c c 满足:有至…

算法-动态规划/trie树-单词拆分

算法-动态规划/trie树-单词拆分 1 题目概述 1.1 题目出处 https://leetcode.cn/problems/word-break/description/?envTypestudy-plan-v2&envIdtop-interview-150 1.2 题目描述 2 动态规划 2.1 解题思路 dp[i]表示[0, i)字符串可否构建那么dp[i]可构建的条件是&…

基于ssm的互联网废品回收/基于web的废品资源利用系统

摘 要 本毕业设计的内容是设计并且实现一个基于SSM框架的互联网废品回收。它是在Windows下,以MYSQL为数据库开发平台,Tomcat网络信息服务作为应用服务器。互联网废品回收的功能已基本实现,主要包括用户、回收员、物品分类、回收物品、用户下单…

W、X、Y

W z学长的apex 不等于180度的角的个数就是求转折点的个数 而每个y(x)都是一元函数,按照公式每个一元函数的转折点为 s(x)是若干y(x)的叠加,其中一个y(x)有转折点,在对应位置上s(x)也会有转折点 所以所有y(x)函数中不重复的转折点的个数就是…

Java练习题-键盘录入字符串实现大小写转换

✅作者简介:CSDN内容合伙人、阿里云专家博主、51CTO专家博主、新星计划第三季python赛道Top1🏆 📃个人主页:hacker707的csdn博客 🔥系列专栏:Java练习题 💬个人格言:不断的翻越一座又…

【LeetCode热题100】--108.将有序数组转换为二叉搜索树

108.将有序数组转换为二叉搜索树 给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 高度平衡 二叉搜索树。 高度平衡 二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。 二叉搜索树的中序遍历是升序…

扩容LVM卷导致lvm元数据丢失的恢复过程

一、问题描述 因某次MySQL binlog占用过高扩容时,是直接对云盘操作,而扩容直接操作了lvm卷而未操作云盘分区,并随后执行了扩容的partprobe,resize2fs卷等操作;最后,显示并未扩容成功,重启系统后…

008:连续跌三天,买第四天上涨的盈利计算

尽管有连续三天跌,第四天上涨的概率>0.5,但是也不意味着一定会盈利。因为还要看涨跌大幅度。所以,我们应该来假设,于连续跌三天的最后时刻买入,而后第四天临近收盘卖出,看这样的最终盈利是多少。假设我们…

网络-SSE

文章目录 前言一、SSE简介1、SSE特点Polyfill 2、SSE原理3、SSE技术实现:4、SSE应用场景:5、EventSource 二、SSE使用1、前端2、后端3、完整代码前端后端 总结 前言 本文主要记录SSE通讯的简介、使用、以及原理和一个ChatGPT返回数据的demo。 一、SSE简…

专业图像处理软件DxO PhotoLab 7 mac中文特点和功能

DxO PhotoLab 7 mac是一款专业的图像处理软件,它为摄影师和摄影爱好者提供了强大而全面的照片处理和编辑功能。 DxO PhotoLab 7 mac软件特点和功能 强大的RAW和JPEG格式处理能力:DxO PhotoLab 7可以处理来自各种相机的RAW格式图像,包括佳能、…

Redis中Hash类的操作

Redis中Hash类型是键值对的形式保存数据,其中键被称为字段(field),值称为字段值(value)。在一个key中,字段不能重复,而值可以重复。无论是字段还是值都是无序的(保存的次…

React封装自定义表单校验方法

一、表单校验 为什么要封装自定义表单校验方法,因为在后台管理系统中,通常我们会涉及到用户的添加或则信息的修改,这时候通常就涉及表单的相关校验。但通常一个系统中的表单校验针对同一个字段来说是统一的。因此我们就需要将对应的校验字段的…

【LeetCode热题100】--98.验证二叉搜索树

98.验证二叉搜索树 给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义如下: 节点的左子树只包含 小于 当前节点的数。节点的右子树只包含 大于 当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。 由于二…

41 二叉树的层序遍历

二叉树的层序遍历 题解1 迭代——BFS题解2 递归——DFS 给你二叉树的根节点 root &#xff0c;返回其节点值的 层序遍历。 &#xff08;即逐层地&#xff0c;从左到右访问所有节点&#xff09;。 提示&#xff1a; 树中节点数目在范围 [0, 2000] 内-1000 < Node.val <…

实时目标检测:基于YOLOv3和OpenCV的摄像头应用

一、前言 随着人工智能和计算机视觉技术的不断发展,目标检测成为了智能监控、自动驾驶、机器人等领域的关键技术之一。实时目标检测更是对系统的反应速度和准确度提出了更高的要求。本文介绍使用OpenCV和YOLOv3实现实时目标检测的方法,演示如何使用OpenCV调用YOLOv3模型进行…

基于SSM的选课排课系统

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用Vue技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

克服网络安全压力:如何掌控无限的云数据

管理云中的数字风险比以往任何时候都更加重要。数字化转型引发的云数据呈指数级增长&#xff0c;为安全分析师创造了一个更大的威胁环境。随着威胁行为者继续危害组织最敏感的数据&#xff0c;这一挑战将会加剧。 预计未来五年全球网络犯罪成本将激增&#xff0c;从 2022 年的…

22-框架

框架 解决某类问题&#xff0c;编写的一套类、接口等&#xff0c;可以理解成一个半成品&#xff0c;大多框架都是第三方研发的。 好处&#xff1a;在框架的基础上开发&#xff0c;可以得到优秀的软件架构&#xff0c;并能提高开发效率 框架的形式&#xff1a;一般是把类、接口…