我们要开发的就是服务器端应用程序。
项目中的功能就是业务。
请求:请求是项目中最基本的逻辑单元,就像万事万物都由原子构成
举例:点超链接跳转到注册页面
功能:一个功能包含很多个请求
- 请求1:点超链接跳转到注册页面
- 请求2:发送请求获取短信验证码
- 请求3:检查用户名是否可用
- 请求4:提交表单完成注册
模块:一个模块包含很多功能
举例:用户信息管理模块
子系统:根据项目规模的不同,子系统这层逻辑概念可能有也可能没有。如果设置了子系统,那么子系统中也必然包含很多模块。其实庞大项目的子系统已经相当于一个项目了,甚至比小型项目整个都大。
- 模块1:用户信息管理模块
项目:为了解决现实生活中的实际问题开发一个项目,这个项目就是为这个需求提供的一整套解决方案。
- 子系统1:认证中心子系统
- 子系统2:商品管理子系统
- 子系统3:购物车子系统
『架构』其实就是项目的『结构』。只不过『结构』这个词太小了,不适合用来描述项目这么大的东西,所以换了另一个更大的词:架构。所以当我们聊一个项目的架构时,我们聊的是项目是由哪些部分组成的。
一个项目就是一个工程,这样的结构就是单一架构,也叫all in one。我们现在的JavaWeb阶段、SSM阶段都是学习单一架构开发技术。
一个项目中包含很多工程,每个工程作为一个模块。模块之间存在调用关系。分布式架构阶段的技术分为两类:
视图:用户的操作界面+数据的动态显示
控制层:处理请求+跳转页面
为什么同样是毕业5年,你和你的同学差距特别大?起点、路径、目标这三个东西哪个对人影响最大?
如果一个问题的解决办法已经有别人反复验证过可行、有效的路径存在,那这种问题就非常容易解决。但即使这样不同的人应对同样问题时效果也完全不同。从深圳到北京,徒步、开车、高铁、飞机就是效率完全不同的解决方案。
在路上使用的交通工具不同就是人和人之间系统的不同,而系统其实就是一个人的认知水平、思维方式、学习和工作的方法。
世界本身是极其复杂的,即使是细分之后的领域仍然非常复杂,比如一颗小小的芯片背后就是一个非常庞大、复杂的体系:科学、技术、设计、制造、供应链、操作系统、市场等等。面对这么复杂的世界,简单的思维方式是没法理解和应对的。而比我们成功的人一定是从更底层把握了复杂世界中简单规律的人。
实现同一个功能,代码可以有很多种不同的写法,我们要做的并不是把某一种代码背下来,而是直击本质,把握规律,以不变应万变。
将来大家走上工作岗位,参与开发都是非常庞大的系统,此时要求大家能够把视角拔高,从最高处俯瞰整个项目的架构。而在具体的开发过程中对于微观的代码编写和故障调试又要求能够做到细致认真,对程序员来说这两种看似矛盾的能力必须同时具备。
任何项目、任何技术都是为了解决实际问题而生的,所以我们不论是在技术学习过程中还是在项目开发过程中都要锻炼自己理解需求的能力和根据需求设定目标的能力。有了明确的目标下一步才能一步一步分析出实现目标的思路,然后根据思路中的各个环节编写代码,最终把需求落地实现。
一个人每天按时上课,按时自习,从不违纪,身体确实在教室,但是灵魂早已不知到哪里游荡,他算努力吗?
一个人把老师的代码抄了一遍又一遍,把课件背了一回又一回,他算努力吗?
一个人顶着狂风烈日面试了一家又一家公司,屡战屡败,屡败屡战,他算努力吗?
另一个人看着好像也没怎么努力,该打球打球,该拍拖拍拖,面试没几家就拿到N个不错的offer,老师劝他不着急入职,再多面几家肯定有更好的,他说现在这个不错了,懒的面了。你好像确实没法说他『努力』,但是你不得不承认至少单纯在『参加培训找工作』这一件事上他很『成功』。
所以老师不必费力向你证明前面那三个人并没有『真正努力』,而只是『用战术上的勤奋掩盖战略上的懒惰』——老师希望你注意到:即使是『真正的努力』仍然只是『手段』而不是『目的』,我们真正的目的是『成功』。不管过程中再怎么努力,最后达不成目的不还是白搭?当然,如果因此你得出一个结论就是那我不用努力了我也没有办法,毕竟谁都没法叫醒一个装睡的人不是?
那怎么做算是『战略正确』呢?
进军抽象空间,到抽象空间里占领一个又一个知识高地。
学习的真正过程发生在人的意识中,而意识是看不见、摸不着的。所以当一个同学『人在教室、神游天外』时,老师明知道他没在学习可是还真不好说啥,因为他确实没有违反纪律。纪律只能在物质世界设置规则,而没法限制你的想法。
但所谓知识其实就是人类认识世界过程中总结、提炼的结晶,全部都是抽象的概念,同样看不见、摸不着。我们上课的过程就是老师把他自己的意识空间用声音和图像投影到教室里,然后再投影到你的意识空间——毕竟老师没法双掌贴着你的后背把毕生功力传给你。
大家需要接收到声音和图像的信号,然后理解它们的含义,再重新凝练成一个一个的概念结晶,最后还要分门别类、井然有序的保存起来以备将来使用。
所以学习真要比的话应该比的就是在意识空间中知识晶体的*数量*和*秩序*。
很多人为什么学习起来非常吃力?就是因为他完全没有办法进入抽象空间,完全没法理解任何抽象的东西。这里我们举个例子:
用具象的算式描述这个规律可以写出无限多个,可是用抽象的规律短短五个字就概括了。这就是掌握规律的力量,这就是为什么培根说『知识就是力量』。好在老师会用举例、类比、画图等等手段把抽象的东西尽量具象化,但是谁也代替不了你自己的理解、提炼和总结。不过好消息是现在你知道怎么努力了。
所以各位朝气蓬勃的少男少女们,充分调动起你活跃的大脑,一起来提炼闪闪发光的知识晶体吧!
你真的对技术感兴趣吗?
小明拿瓶子去接水,咕咚咕咚一通灌。完事儿一看,瓶子里一滴水都没有。
为啥?瓶塞没有拔出来。
像不像你叫嚷着学Java,但其实真正的内心对Java没有任何兴趣,只是因为听说它很赚钱才学。你『真正喜欢』的是『钱』而不是『Java』。
而真正学的时候内心是『抗拒』的,你觉得这东西和你一点关系都没有。禁闭的心扉如同没有拔掉木塞的瓶子。这样谁都帮不了你,不管听了多少课都学不到东西的。
正确的状态是:对『Java本身』贼啦好奇,『挖空心思』想闹明白到底是咋回事,谁不让我学我跟谁急。
学会以后干活,不给钱也干,谁不让我干我跟谁急,然后肯定会干得特别好,『意外』赚了很多钱。
任何成功都来自于『内心深处强烈的渴求』。而程序员的成功秘诀是『敲代码本身即是最大幸福和最高奖赏』。
很多同学总是问学完Java用不用再学学大数据呀?Java干3年以后转型什么呀?
其实Java也好,大数据也好,都是『路径』,不是『目标』。你的『好奇心』决定了你在这条路上能够走多远。而培训完的起薪都只是『起点』,前面说过了,三者中『起点』是最不重要的。
在以后的学习中我们任何技术点都会通过提出问题的方式来引入,大家要留意这个环节,在揭示答案之前用这个问题问问自己,看看这个问题是否能在你的心里引起共鸣,激发你的好奇心,这是我们迈向成功的第一步。
不会吧,不会吧?现在还有同学想靠死记硬背来学Java?请马上停止!
相比较『记忆』来说,大脑更擅长『思考』。前面说过思考是由前额叶来负责的,下面说说记忆:
这就是为什么总有同学很困扰:学完了记不住呀!对于这个问题我的回应如下:
你想记住代码怎么写吗?需求会变,代码永远要跟着变。
你想记住老师说的每一句话吗?老师一天能说一万句话。
想记住这些这不是痴心妄想吗?
你该记住的是从现象中提取出来的规律而不是现象。甚至这么说也不准确。因为这个规律你理解了自然就记住了,不需要背。
任何孤立的信息都很容易忘,但是点和点之间组成一个彼此联系的网络就很不容易忘记了。
即使理解并且记住了要点,但是知识点相关的细节还是记不住怎么办?比如大段的配置,代码调用的API方法,特定场景需要传递的参数等等。好办,『好记性不如烂笔头』,这些东西记到笔记里永久保存。
通过前面的分析我们看到,大脑是一个有CPU(前额叶)有内存(海马体)的电脑,但是没有硬盘来做永久存储。所以我们需要给大脑连接一个能够永久存储信息的外部设备:笔记。由此我们就得出了大脑要扮演的第一个角色:搜索引擎。
首先,学习的过程就是建设索引库的过程:
然后在解决实际问题时需要运用学过的知识就到索引库中去检索:
大脑的第二个角色是:司令部。而你是司令。对,你没看错,其实『你不是你的大脑,你的大脑也不是你』。就像手、脚、胯骨轴是你的一部分一样,大脑同样只是你的一部分。但是大脑对人来说太重要了,人的很多无意识行为都是大脑来协调和指挥的。比如:人走路时的身体平衡,身体各个系统和脏器的正常工作,应激反应等等都是大脑来指挥的,而这些事情你完全不知道是怎么做的,也无法干涉。司令部协助司令指挥部队,司令把握总体的战略方向。
而司令部这个角色和学习有关系的部分就是大脑的快思维和慢思维。
小孩子没法一边穿衣服、系扣子一边走路。因为它穿衣服、系扣子需要慢慢做,一边做一边想。所以事情不熟练、需要慢慢思考的时候,大脑就需要以慢思维的模式工作——这个过程是需要『你』参与的。
大人穿衣服、系扣子都很熟练了,不需要想,所以可以一边走路,一边穿衣服。这个过程就不需要『你』参与了,大脑调用现成的『路径』在快思维的工作模式下完成动作。
这是因为『慢思维』非常消耗能量,而『快思维』能耗非常低,大脑会优先选择能耗低的路径执行动作,节约能量。这就是为什么人会有『习惯』,而习惯一旦养成很难改变。本质原因就是大脑的这种『路径依赖』的机制。
比如:『黄赤交角导致地球上四季更迭』这就是一个知识点。
想理解『黄赤交角导致地球上四季更迭』这个知识点的前提是知道『赤道』、『黄道』、『地球自转』、『地球公转』等等概念,还必须具备一定的『立体几何』的基础。这就说明知识的大厦是一砖一瓦建成的,没有1楼别想上2楼。
如果想理解B的前提是知道A,那么A就是B的前置知识点。
把所有前置知识连起来就形成了一条知识的链条。虽然我们学习的时候不需要把这个链条画出来,但是它可以帮助你理解你为什么会跟不上:在知识的链条中前置知识点缺失太多了。不知道『赤道』、『黄道』、『地球自转』、『地球公转』等等概念也不理解两个平面之间的夹角是怎么回事的时候听别人给你讲地球上为什么会有春夏秋冬那就是听天书,完全不明白什么意思。
为什么老师讲课的课件总是划分成章节,章节里面还有一、二、三、……1、2、3、……①、②、③、……这样的小点?就是因为知识点根据彼此之间的归类和相关性可以『纵向抽取』,从而整理成一个树形结构,这样也是为了大家更好理解。
但是老师讲课的时候还是要从这根葡萄梗上把葡萄一颗一颗摘下来给你。
而你拿到葡萄以后就乱放了,散落一地的葡萄非常不好拿,到用的时候各种颜色的葡萄混杂的胡乱堆放在一起,根本找不到你要的。
所以大家听完课还是要在自己的精神世界里把葡萄往葡萄梗上一颗一颗装回去。用专业术语来说就是把节点按照树形结构重新组装起来。
哲学知识点:矛盾是对立统一,矛盾中对立的双方都不能脱离对方而单独存在。
化学知识点:在碱溶液中会有极少量的H+离子,在酸溶液中会有极少量的OH-离子。
横向来看,知识点之间很容易找到相通或类似的情况。有些知识点之间的横向对比能够彼此印证,帮助我们理解;而有些看起来相似但实质不同的知识点却会干扰我们的判断和使用。
所以知识点融会贯通之后必然会打破彼此的界限连成网络,这个网络越发达你的视野越开阔,网络中的具体知识点掌握越牢固。
在生物学中把生物划分为了界、门、纲、目、科、属、种,这有什么好处呢?不仅让已知的生物更易于研究和学习,将来发现新物种就直接按照这个划分方法纳入体系就好了。
有了知识体系之后,你的学习会非常快速,因为新的知识点会快速被已有的知识体系接纳,旧的知识会帮助你理解新的知识。
主协议:子协议://主机地址:端口号/数据库名称 用户名 密码 数据库驱动 |
当你不断的感受到旧知识点在帮助你理解新知识点,你的知识体系就在不断扩大;知识系统不断扩大之后,旧知识点对新知识点的帮助能力就更大,形成一个『增强回路』,让你的学习越来越快,形成一条指数曲线。
陈康肃公善射,当世无双 ,公亦以此自矜。尝射于家圃,有卖油翁释担而立,睨之久而不去。见其发矢十中八九,但微颔之。 康肃问曰:“汝亦知射乎?吾射不亦精乎?”。翁曰:“无他, 但手熟尔。”康肃忿然曰:“尔安敢轻吾射!”翁曰:“以我酌油知之。”乃取一葫芦置于地,以钱覆其口,徐以杓酌油沥之,自钱孔入,而钱不湿。因曰:“我亦无他,惟手熟尔。”康肃笑而遣之。
编程本质上是一个技能,而任何技能都需要通过大量的重复练习才能够熟练掌握。李小龙说:『我不怕会一万种招式的人,我怕把一种招式练一万次的人』。神枪手是用一匣一匣的子弹喂出来的,优秀的程序员就是用一堆又一堆的bug给练出来的。所以学编程肯定要多敲多练。
但是我说的是『敲』不是『抄』!很多同学照着老师的代码敲自己的代码,看着是敲了一遍,其实只是抄了一遍。抄完发现没有什么效果。关上电脑什么都不记得。这其实是正常的认知规律的体现。
在『抄』的时候大脑其实不需要多想什么,因为它只需要考虑A处是什么单词,再到B处敲同样的单词就行了,这是一件很简单的事情,大脑调用5%就足够了——这调用深度远远不够。而且你不觉得非常枯燥无聊吗?
真正的学习状态是什么?向知识点提问、打草稿、分析思路、画流程图、和别人讨论、敲代码验证、分析结果为什么和老师不一样、把验证结果写到笔记里……
你看看这是不是热火朝天?这么整的话大脑的利用率可是有95%啊!而且兴趣盎然啊有木有?这么学习既高效又开心,谁不让我学我和谁急!
这时大脑扮演了第三个角色:教练。
你有没有发现看老师讲课的视频特别容易睡着?这不是老师讲得不好,也不是你不爱学习,而是单纯的看视频只是被动接受,大脑还是没有充分调动起来。大脑进入闲置状态自然会昏昏欲睡。
而当你和别人讨论问题,把你的观点讲出来,就会越聊越兴奋甚至争得脸红脖子粗有木有?
甚至是在和别人表达自己观点的时候会发现自己以前理解的某个知识点其实完全不是那么回事,开始以为自己懂了但是要说的时候才发现自己根本没有懂,理解的不透彻。
其实在大脑里很多角落都在黑暗中,当我们想拿出来的时候才会用手电筒照过去,把那个地方照亮,照亮以后才能看清楚那里到底放着什么。
所以一切形式的『输出』都会非常有效的提高学习效率。那么输出的形式包括哪些呢?
说了这么多,我们具体在学习的时候应该怎么学呢?
所以『学习』两个字中,『学』指的是理解原理,建立知识体系,而『习』则是练习技能,引申到各种形式的输出都算『习』。而只有拿学过、练过的东西真正的解决了现实生活中真正的实际问题才算是『会』。而任何形式的市场都只会为能够真正解决问题的人付『钱』。
我们从现在的JavaWeb阶段到后面学习SSM框架阶段都是在学习单一架构项目开发的技术。而在JavaWeb阶段由于重点是探讨如何实现Web开发,所以必须学习一部分前端开发的技术。本节就是让大家明确我们现在要学习的内容在整个架构体系中处于什么位置。
严格来说视图分成两层:
其中HTML、CSS、JavaScript都是工作在浏览器上的,所以它们都属于前端技术。而Thymeleaf是在服务器上把动态内容计算出具体数据,所以严格来说Thymeleaf是后端技术。
这里大家会有个疑问:为什么在『视图』这个地方已经有HTML、CSS、JavaScript这些前端技术了,能够生成用户可以操作的界面,那为什么还需要Thymeleaf这样一个后端技术呢?简单来说原因是Thymeleaf=HTML+动态数据,而HTML不支持动态数据,这部分需要借助Thymeleaf来完成。
更进一步的细节咱们讲到那再说啦!
href=""就是属性,href是『属性名』,""是『属性值』。
还有一种标签是『单标签』:
HTML文件中第一行的内容,用来告诉浏览器当前HTML文档的基本信息,其中最重要的就是当前HTML文档遵循的语法标准。这里我们只需要知道HTML有4和5这两个大的版本,HTML4版本的文档类型声明是:
我们可以把这个axios.min.js文件下载下来保存到本地来使用。
效果:所有请求参数都被放到URL地址后面了,哪怕我们现在用的是POST请求方式。
服务器端返回的响应体数据 |
在给catch()函数传入的回调函数中,error对象封装了服务器端处理请求失败后相应的错误信息。其中,axios封装的响应数据对象,是error对象的response属性。response属性对象的结构如下图所示:
可以看到,response对象的结构还是和then()函数传入的回调函数中的response是一样的:
回调函数:开发人员声明,但是调用时交给系统来调用。像单击响应函数、then()、catch()里面传入的都是回调函数。回调函数是相对于普通函数来说的,普通函数就是开发人员自己声明,自己调用:
Gson是Google研发的一款非常优秀的JSON数据解析和生成工具,它可以帮助我们将数据在JSON字符串和Java对象之间互相转换。
// 1.由于请求体数据有可能很大,所以Servlet标准在设计API的时候要求我们通过输入流来读取 // 2.创建StringBuilder对象来累加存储从请求体中读取到的每一行 // 3.声明临时变量 // 6.累加的结果就是整个请求体P.S.:看着很麻烦是吧?别担心,将来我们有了SpringMVC之后,一个@RequestBody注解就能够搞定,非常方便!
then()中获取到的response在控制台打印效果如下:我们需要通过data属性获取响应体数据
仍然需要Gson支持,不用多说
// 1.准备数据对象 // 4.设置响应体的内容类型在整个项目中,凡是涉及到给Ajax请求返回响应,我们都封装到AjaxCommonsResult类型中。
代表服务器端处理请求成功 |
代表服务器端处理请求失败 |
服务器端处理请求的结果,取值在SUCCESS和FAILED二者中选择一个 |
针对查询操作返回的数据 |
在用户输入用户名之后,立即检查这个用户名是否可用。
原因:服务器端响应的速度跟不上用户输入的速度,而且服务器端异步返回响应数据,无法保证和用户输入的顺序完全一致。此时有下面几点问题:
解决办法:绑定的事件类型使用『值改变』事件。
Thymeleaf在服务器端渲染的过程中将购物车总数量计算得到,通过表达式设置写入JavaScript代码,作为Vue对象的初始值。然后由Vue对象通过v-show判断是否显示数量标签。
由于要考虑是否登录的情况,所以id加到了两种情况外层的div
目的是为了便于创建Vue对象
给加入购物车按钮绑定单击响应函数
为了便于在按钮的单击响应函数中得到bookId的值
把前端页面需要的属性,存入Map中即可。
// 2.尝试获取购物车对象记得加入axios库:
// 1.从响应数据中获取请求处理结果 // 2.检查结果是成功还是失败 // 3.获取购物车数据并赋值给Vue对象购物车共种宝贝合计:元
例:HP P2055定影组件拆解及安装视频(链接)
如购买过程中有任何疑问,欢迎向我们咨询
咨询类型:
市场价:¥2450商城价:¥2220
市场价:¥480商城价:¥450
市场价:¥320商城价:¥289
市场价:¥4550商城价:¥3990
市场价:¥580商城价:¥550
市场价:¥350商城价:¥330
市场价:¥350商城价:¥228
市场价:¥350商城价:¥299
如购买过程中有任何疑问,欢迎向我们咨询
咨询类型:
上海普广数码科技有限公司 版权所有 电话:021-96 传真: 021- 最佳分辨率
地址:上海市松江区洞泾镇振业路280号1号楼A8401室 邮编:201619 普广.中国
6.2 无特殊情况,检查通过,进行下一步
6.4 连接数据库进行安装
6.5 安装成功,并成功登陆
4.5 数据库中进行用户授权