@artman328
2020-07-28T11:18:10.000000Z
字数 8325
阅读 1424
WSC
世界技能大赛
Web技术
基于 HTTP/HTTPS 协议的“请求-响应(Request/Response)”模型的应用程序。典型的如网站、手机APP等。它由以下几个部分构成。
客户端程序是那些在计算机或移动设备上与人直接交互的应用程序,如:浏览器、基于 HTTP 协议的其它应用程序等。这些应用程序接受用户输入,将用户的请求(Request)发送到服务器端。
最常用的客户端是各种浏览器。现代浏览器都内置了一个计算机语言编程平台——JavaScript,它包括了一个语言解释器(用于解释并执行程序指令)和常用的程序库(一些通用功能函数和对象)。在这个平台上编程,浏览器就可以和用户直接互动(如用户输入的数据验证,拖拽操作,互动特效等),必要时才将请求发往服务器。在这个平台上的编程叫客户端编程。
Web 服务器程序是接受来自客户端请求(Request)并给出响应(Response)的应用程序。Web服务器的主要任务是根据请求将服务器上的各种资源发送给客户端。这些资源包括各种文件,如:网页、图片、音乐、视频等。
在服务器上,根据预定规则,服务器会将一些请求的特定资源(一般为程序文件)再发送给特定的程序解释器进行处理,在处理过程中可能会和数据库服务器进行交互以便对数据库中的数据进行增、删、改、查等操作。程序解释器处理完后将结果交给 Web 服务器,Web 服务器再将其发往客户端。
数据库服务器用以存储WEB应用的数据。
世界技能大赛的 Web 技术项目涉及Web应用设计与开发的各个方面,主要内容有:
UI(User Interface,用户界面)设计,主要考查选手根据企业文化、网站内容、目标受众等使用图形图像工具对用户界面(网页、移动APP界面等)进行设计的能力。
未来就业方向:UI设计、广告设计
主要考查选手使用 HTML/CSS/JavaScript 对设计好的UI进行实现的能力。
未来就业方向:UI实现
主要考查选手使用前端框架开发AJAX应用的能力。
未来就业方向:前端开发
主要考查选手使用 PHP WEB 框架开发 WEB 应用以及 API 的能力(含数据库的设计和使用能力)。
未来就业方向:后端开发
主要考查选手对业界著名的内容管理系统进行使用、主题开发、插件开发的能力。
* 第45届世界技能大赛还包含了增强现实(Augment Reality, AR)应用的制作能力。
WEB 应用的运作过程可以下图来说明。
在web应用程序中,浏览器和服务器之间是通过 HTTP/HTTPS 协议来交互的。
HTTP 协议,称为超文本传输协议,HTTPS 协议,称为安全的 HTTP 协议。超文本传输协议定义了客户端与服务器端通信的规范。HTTP 是一种无状态协议,意思是服务器端在接受请求并给出响应的过程中,并没有记住客户端任何信息的规范和机制,客户端的每一次访问,对服务器端来说,客户端都是陌生的。
请求由请求的资源地址(URL) 和请求数据段(请求头和请求体)构成。
客户端向服务器端发出请求,是基于 URL 进行的,URL(Universal Resource Locator) 叫做统一资源定位器。
URL 的基本形式是:
http://域名(或 IP 地址):端口/到资源/的具体/路径/资源名
如:
http://www.mysite.com:80/products/images/computer.jpg
浏览器是以 IP 地址的形式发出请求的。人们输入的域名首先被浏览器发送到远程DNS(Domain Name Server)域名服务器,从那里得到对应的 IP 地址,再通过这个地址发出请求。事实上,系统在真正向 DNS 发出查询前,先会向操作系统中的一个特殊配置文件进行查询,如果查询到了对应的 IP ,就不再向 DNS 发出请求了。在 Windows 系统中,这个文件是 C:\Windows\System32\drivers\etc\hosts。在 Linux 和 Unix 系统中,这个文件是 /etc/hosts。
这个文件以如下形式定义了 IP 与 域名的对应关系:
ip 域名
如:
127.0.0.1 www.mysite.com
127.0.0.1 www.example.net
134.179.210.2 www.domywork.org
请求数据段是请求的描述(请求头)和数据(请求体)的集合。
在请求描述中,最关键的是请求的行为。
请求的基本行为有 GET(获取)、POST(粘贴)、PUT(放置)、DELETE(删除)等。最为常用的是前面两者。
响应由服务器给出。响应由响应头和响应数据构成。响应头用于描述响应。在响应头中,有关于响应的状态码。常用状态码是:
如果请求得到正常响应,响应数据就是具体的资源。
HTML文档用标签表示内容结构。标签格式如下:
<开始标签 属性1="值1-1 值1-2 ..." 属性2="值2-1 值2-2 ..." ...>内容</结束标签>
对于没有内容的标签,可写为:
<开始标签 属性1="值1-1 值1-2 ..." 属性2="值2-1 值2-2 ..." ... />
<!doctype html>
<html>
<head>
<!-- 头部内容,用于描述和定义文档 -->
</head>
<body>
<!-- 体部内容,用于展现网页内容 -->
</body>
</html>
<meta charset="编码名称" />
<meat name="名称" content="值" />
<title>标题</title>
<link href="文件URL" rel="关系" type="类型" media="媒体" ... />
<script src="文件URL"></script>
<style>
...
</style>
<script>
...
</script>
h: headline (标题行)
<h1>这是一级标题</h1>
p: paragraph (段落)
<p>
这是段落1。
</p>
<p>这是段落2。</p><p>这是段落3。</p>
这是段落1。
这是段落2。
这是段落3。
span (跨度)
世界上最高的山峰是<span style="color:red;">珠穆朗玛峰</span>,这我是知道的。
世界上最高的山峰是珠穆朗玛峰,这我是知道的。
ul: unordered list (无序列表)
ol: ordered list (有序列表)
li: list item (列表项)
<ul>
<li>列表项 1</li>
<li>列表项 2</li>
<li>列表项 3</li>
</ul>
<ol>
<li>列表项 1</li>
<li>列表项 2</li>
<li>列表项 3</li>
</ol>
table: 表格
thead: table head, 表头
tbody: table body, 表体
tr: table row, 表格行
th: table head cell, 表头单元格
td: table data cell, 表格数据单元格
<table>
<thead>
<tr>
<th>序号</th>
<th>姓名</th>
<th>性别</th>
<th>出生日期</th>
<th>部门</th>
</tr>
<thead>
<tbody>
<tr>
<td>1</td>
<td>李明</td>
<td>男</td>
<td>1987-08-20</td>
<td>人事</td>
</tr>
<tr>
<td>2</td>
<td>张小敏</td>
<td>女</td>
<td>1989-12-10</td>
<td>公关</td>
</tr>
<tr>
<td>3</td>
<td>周娜</td>
<td>女</td>
<td>1990-02-10</td>
<td>公关</td>
</tr>
</tbody>
</table>
序号 | 姓名 | 性别 | 出生日期 | 部门 |
---|---|---|---|---|
1 | 李明 | 男 | 1987-08-20 | 人事 |
2 | 张小敏 | 女 | 1989-12-10 | 公关 |
3 | 周娜 | 女 | 1990-02-10 | 公关 |
form: 表单
<form action="/add-contact.php" method="post">
标签和输入域
</form>
label: 标签
<label for="">文字内容</label>
input: 输入
<input type="text" id="name" name="name" value="" />
password: 密码
<input type="passowrd" id="password" name="password" value=""/>
<select id="book" name="book">
<option value="1">Java 面向对象程序设计</option>
<option value="1">关系数据库基础</option>
<option value="1">Git 应用基础</option>
<option value="1">Linux 操作系统基础</option>
<option value="1">Laravel 框加编程</option>
</select>
<select id="book" name="book" multiple>
<option value="1">Java 面向对象程序设计</option>
<option value="1">关系数据库基础</option>
<option value="1">Git 应用基础</option>
<option value="1">Linux 操作系统基础</option>
<option value="1">Laravel 框加编程</option>
</select>
<input type="radio" name="gender" value="M" /> 男
<input type="radio" name="gender" value="F" /> 女
<input type="checkbox" name="hobbie" value="运动"> 运动
<input type="checkbox" name="hobbie" value="阅读"> 阅读
<input type="checkbox" name="hobbie" value="看电影"> 看电影
<input type="checkbox" name="hobbie" value="听音乐"> 听音乐
出生日期:<input type="date" value="" />
数量:<input type="number" name="quantity">
<input type="file" name="uplaod_file" />
div: division, 部分,区域
<div class="important">
<h2>Hello</h2>
<p>...</p>
</div>
<img src="/img/avatar.jpg" alt="avatar" />
<a href="链接地址">内容</a>
<button>文字内容</button>
选择器 {属性1: 值1; 属性2: 值2; ...}
为便于阅读,通常写成:
选择器 {
属性1: 值1;
属性2: 值2;
...
}
其中,选择器用于指定选择的标签(或标签集合),值可以是单值或空格分隔的多值。
CSS选择器格式
(a)基本选择器语法
选择器 | 类型 | 功能描述 |
---|---|---|
* | 通配选择器 | 选择文档中所有HTML元素 |
E | 元素选择器 | 选择指定类型的HTML元素 |
#id | ID选择器 | 选择指定ID属性值为“id”的任意类型元素 |
.class | 类选择器 | 选择指定class属性值为“class”的任意类型的任意多个元素 |
selector1,selectorN | 群组选择器 | 将每一个选择器匹配的元素集合并 |
(b) 层次选择器语法
选择器 | 类型 | 功能描述 |
---|---|---|
E F | 后代选择器(包含选择器) | 选择匹配的F元素,且匹配的F元素被包含在匹配的E元素内 |
E>F | 子选择器 | 选择匹配的F元素,且匹配的F元素所匹配的E元素的子元素 |
E+F | 相邻兄弟选择器 | 选择匹配的F元素,且匹配的F元素紧位于匹配的E元素的后面 |
E~F | 通用选择器 | 选择匹配的F元素,且位于匹配的E元素后的所有匹配的F元素 |
(c) 动态伪类选择器语法
选择器 | 类型 | 功能描述 |
---|---|---|
E:link | 链接伪类选择器 | 选择匹配的E元素,而且匹配元素被定义了超链接并未被访问过。常用于链接描点上 |
E:visited | 链接伪类选择器 | 选择匹配的E元素,而且匹配元素被定义了超链接并已被访问过。常用于链接描点上 |
E:active | 用户行为选择器 | 选择匹配的E元素,且匹配元素被激活。常用于链接描点和按钮上 |
E:hover | 用户行为选择器 | 选择匹配的E元素,且用户鼠标停留在元素E上。IE6及以下浏览器仅支持a:hover |
E:focus | 用户行为选择器 | 选择匹配的E元素,而且匹配元素获取焦点 |
(d) 目标伪类选择器
选择器 | 功能描述 |
---|---|
E:target | 选择匹配E的所有元素,且匹配元素被相关URL指向 |
(e) UI元素状态伪类选择器语法
选择器 | 类型 | 功能描述 |
---|---|---|
E:checked | 选中状态伪类选择器 | 匹配选中的复选按钮或者单选按钮表单元素 |
E:enabled | 启用状态伪类选择器 | 匹配所有启用的表单元素 |
E:disabled | 不可用状态伪类选择器 | 匹配所有禁用的表单元素 |
(f) 结构伪类选择器使用语法
选择器 | 功能描述 |
---|---|
E:first-child | 作为父元素的第一个子元素的元素E。与E:nth-child(1)等同 |
E:last-child | 作为父元素的最后一个子元素的元素E。 |
E:root | 选择匹配元素E所在文档的根元素。在HTML文档中,根元素始终是html,此时该选择器与html类型选择器匹配的内容相同 |
E F:nth-child(n) | 选择父元素E的第n个子元素F。其中n可以是整数(1,2,3)、关键字(even,odd)、可以是公式(2n+1),而且n值起始值为1,而不是0. |
E F:nth-last-child(n) | 选择父元素E的倒数第n个子元素F。此选择器与E:nth-child(n)选择器计算顺序刚好相反,但使用方法都是一样的,其中:nth-last-child(1)始终匹配最后一个元素,与last-child等同 |
E:nth-of-type(n) | 选择父元素内具有指定类型的第n个E元素 |
E:nth-last-of-type(n) | 选择父元素内具有指定类型的倒数第n个E元素 |
E:first-of-type | 选择父元素内具有指定类型的第一个E元素,与E:nth-of-type(1)等同 |
E:last-of-type | 选择父元素内具有指定类型的最后一个E元素,与E:nth-last-of-type(1)等同 |
E:only-child | 选择父元素只包含一个子元素,且该子元素匹配E元素 |
E:only-of-type | 选择父元素只包含一个同类型子元素,且该子元素匹配E元素 |
E:empty | 选择没有子元素的元素,而且该元素也不包含任何文本节点 |
注1:“ul>li:nth-child(3)”表达的并不是一定选择列表ul元素中的第3个子元素li,仅有列表ul中第3个li元素前不存在其他的元素,命题才有意义,否则不会改变列表第3个li元素的样式。
注2::nth-child(n) 中参数只能是n,不可以用其他字母代替。
注3::nth-child(odd) 选择的是奇数项,而使用:nth-last-child(odd) 选择的却是偶数项
(g) 否定伪类选择器
选择器 | 功能描述 |
---|---|
E:not(F) | 匹配所有除元素F外的E元素 |
(h) 属性选择器语法
选择器 | 功能描述 |
---|---|
[attribute] | 用于选取带有指定属性的元素。 |
[attribute=value] | 用于选取带有指定属性和值的元素。 |
[attribute~=value] | 用于选取属性值中包含指定词汇的元素。 |
[attribute | =value] |
[attribute^=value] | 匹配属性值以指定值开头的每个元素。 |
[attribute$=value] | 匹配属性值以指定值结尾的每个元素。 |
[attribute*=value] | 匹配属性值中包含指定值的每个元素。 |
注:例<div class="links item"></div>
其中a[class="links"]{……} 是找不到匹配元素,只有a[class="links item"]{……}才匹配