前后端分离开发
什么是前后端分离?
在前后端分离的开发模式中,后端仅返回前端所需的数据,前端负责渲染HTML⻚⾯,后端不再控制前端的效果, ⽤户看到什么样的效果,从后端请求的数据如何加载到前端中,都由前端⾃⼰决定,后端仅仅需要提供⼀套逻辑对 外提供数据即可,并且前端与后端的耦合度相对较低,在这种模式中,我们通常将后端开发的每个视图都成为⼀个 接⼝,或者API,前端通过访问接⼝来对数据进⾏增删改查。总结⼀句话,后台负责提供数据,前端负责数据展 示,职责分离,分⼯明确。对应的数据交互如下图:
![image-20241113154701108]()
总结
经典的JSP+Servlet+JavaBean的MVC时代,到SSM(Spring + SpringMVC + Mybatis)和SSH(Spring + Struts2 + Hibernate)的Java 框架时代,再到前端框架(VueJS、AngularJS、ReactJS)为主的MV*时代,然后是NodeJS引领 的全栈时代,技术和架构⼀直都在进步。虽然“基于NodeJS的全栈式开发”模式很让⼈兴奋,但是把基于Node的全 栈开发变成⼀个稳定,让⼤家都能接受的东⻄还有很多路要⾛。创新之路不会⽌步,⽆论是前后端分离模式还是 其他模式,都是为了更⽅便得解决需求,但它们都只是⼀个“中转站”。前端项⽬与后端项⽬是两个项⽬,放在两个 不同的服务器,需要独⽴部署,两个不同的⼯程,两个不同的代码库,不同的开发⼈员。前端只需要关注⻚⾯的样 式与动态数据的解析及渲染,⽽后端专注于具体业务逻辑。
大前端?
- 简单来说,⼤前端就是所有前端的统称,⽐如Web、Android、iOS、Watch等,最接近⽤户的那⼀层也就是UI层, 然后将其统⼀起来,就是⼤前端。
- 由于node的出现,前端⼯程师不需要依赖于后端程序⽽直接运⾏,从⽽前后端分离起来。所以当开发⼀个新产品 的时候服务只需要写⼀次,但是⾯向⽤户的产品可能有很多,例如⽹站、Android客户端、iOS客户端和微信⼩程序 等。由于各个平台使⽤的技术栈都不⼀样,代码⽆法复⽤,⾮常浪费⼈⼒、物⼒。那么有没有什么技术能够解决这 ⼀痛点呢?⼤前端应运⽽⽣,其实⼤前端的主要核⼼就是跨平台技术,有了跨平台技术,各个平台的差异性就抹 平了,开发者只需要⼀套技术栈就可以开发出适⽤于多个平台的客户端。
- ⼤前端的学习流程:HTML5/CSS3->云服务器->JavaScript(核⼼)->jQuery->HTML5 API->ES6(核⼼)->Vue(React)->原 ⽣App/混合式开发App/⼩程序->NodeJs->MySQL
- 前端开发环境的搭建 安装nodejs,Vue等 安装编译⼯具VSCode,webstrom等
- web前端基础 HTML CSS JavaScript(ES5,ES6)
- web前端框架 jQuery Vue React Angular 第三⽅组件库(elementUI,iView)
- 原⽣移动端(可选) iOS Android
- 混合移动端开发 ⼩程序,微信⼩程序,⽀付宝⼩程序等 ReactNative Flutter、uni-app等
- Node后端开发 CommonJS RequireJS Node.js
HTML
超⽂本标记语⾔(英语:HyperText Markup Language,简称:HTML)是⼀种⽤于创建⽹⻚的标准标记语⾔。 学习⽹站:https://www.w3school.com.cn/html/index.asp HTML5和HTML4的关系:
HTML5是应⽤超⽂本标记语⾔(HTML)的第五次修改,代表html语⾔第5版本。
HTML4是应⽤超⽂本标记语⾔(HTML)的第四次修改,代表html语⾔第4版本。
HTML4是为了适应 PC (Personal Computer)时代产⽣的,HTML5是为了适应移动互联⽹时代产⽣的。
HTML5和HTML4都是w3c(World Wide Web)推荐的标准语⾔.
HTML5在HTML4的基础上新增了⼀些特性。⽐如,让标签更具有语义化,新增了⼀些表单控件,新增了Web API等。
文档头信息
使⽤VSCode⼯具可以快速⽣成⽂档头信息,在VSCode中新建1-hello.html,在该⽂件内容中输⼊英⽂!,回 ⻋即可快速⽣成完整的⽂档头信息。以.html或者.htm结尾的⽂件中使⽤!或者html:5来快速产⽣⽂档头信息。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> Hello </body> </html>
|
注释:
标签
标签的结构
![image-20241113155145965]()
常用标签
div 和 span
1 2 3 4 5 6
| <body> <div>我是div标签内容</div> <div>我是div标签内容</div> <span>我是span标签内容</span> <span>我是span标签内容</span> </body>
|
div是块级元素,独占⼀⾏
span是⾏内元素,与其他⾏内元素共享⼀⾏
表格标签
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| <body> <table> <caption>信息表</caption> <thead> <tr> <th>列的标题</th> <th>列的标题</th> <th>列的标题</th> <th>列的标题</th> </tr> </thead> <tbody> <tr> <td>11</td> <td>12</td> <td>13</td> <td>14</td> </tr> <tr> <td>21</td> <td>22</td> <td>23</td> <td>24</td> </tr> <tr> <td>31</td> <td>32</td> <td>33</td> <td>34</td> </tr> </tbody> </table> </body>
|
效果
![image-20241113155319798]()
如果想要有边框和宽度
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
| <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <style>
table {
width: 400px;
text-align: center; }
table, table td, table th {
border: 1px solid #444;
border-collapse: collapse; } </style> </head> <body> <table> <caption>信息表</caption> <thead> <tr> <th>列的标题</th> <th>列的标题</th> <th>列的标题</th> <th>列的标题</th> </tr> </thead> <tbody> <tr> <td>11</td> <td>12</td> <td>13</td> <td>14</td> </tr> <tr> <td>21</td> <td>22</td> <td>23</td> <td>24</td> </tr> <tr> <td>31</td> <td>32</td> <td>33</td> <td>34</td> </tr> </tbody> </table> </body> </html>
|
效果
![image-20241113155408244]()
表单
表单可以⽤来采集⽤户信息和⽤户需求的,⽤户可以在表单控件⾥输⼊或选择内容。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
| <body> <form action=""> <div> ⽤户名:<input type="text" name="username"> </div> <div> 密码:<input type="password" name="password"> </div> <div> 性别:<label for="male"><input id="male" type="radio" name="gender" value="male"> 男</label> <label for="female"><input id="female" type="radio" name="gender" value="female"> ⼥</label> </div> <div> 爱好: <label for="basketball"> <input id="basketball" type="checkbox" name="hobby" value="basketball"> 篮球 </label> <label for="swimming"> <input id="swimming" type="checkbox" name="hobby" value="swimming"> 游泳 </label> <label for="dancing"> <input id="dancing" type="checkbox" name="hobby" value="dancing"> 跳舞 </label> </div> <div> 出⽣⽇期:<input type="date" name="birth"> </div> <div> 城市: <select name="city"> <option value="">请选择</option> <option value="beijing">北京</option> <option value="shanghai">上海</option> <option value="guangzhou">⼴州</option> </select> </div> <div> 个⼈介绍: <textarea name="info" cols="30" rows="3"></textarea> </div> <div> <button>提交按钮</button> </div> </form> </body>
|
效果:
![image-20241113155507467]()
图像
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <style> img { width: 400px; height: 200px; } </style> </head> <body> <img src="https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fpic.jj20.com%2Fup%2Fallimg%2F11 14%2F0F620092Q5%2F200F6092Q5-6 1200.jpg&refer=http%3A%2F%2Fpic.jj20.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg ?sec=1621259882&t=62897e09599d5a6e40d740b9f865fae0" alt=""> </body> </html>
|
超链接a标签
a标签的target属性代表⽬标链接打开的⽅式,_blank代表在新⻚⾯打开
1
| <a href="http://www.baidu.com" target="_blank">这是⼀个链接</a>
|
音视频
1 2
| <audio autoplay controls loop src="./images/稻⾹.mp3"></audio>
|
1 2
| <video autoplay controls loop src="./images/1.mp4"></video>
|
iframe标签
1
| <iframe src="https://echarts.apache.org/zh/index.html" frameborder="0"></iframe
|
使用iframe标签在当前⽹⻚内嵌⼊其他⻚⾯
展示天气
1 2 3 4
| <iframe width="300" height="30" frameborder="0" scrolling="no" hspace="0" src="https://i.tianqi.com/?c=code&a=getcode&id=34&py=chongqing&icon=1"></iframe> <iframe width="280" height="300" frameborder="0" scrolling="no" hspace="0" src="https://i.tianqi.com/?c=code&a=getcode&id=55&icon=1"></iframe>
|
网页选项卡图标
1
| <link rel="icon" sizes="any" mask href="https://www.baidu.com/favicon.ico">
|