一、URL编码类型
对于Get方法,参数是直接通过URL传递的,那这个参数又是根据什么进行编码的呢?对于JSP网页,这个编码是通过第一句描述:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="UTF-8"%>
来进行设置的,charset就是URL参数使用的编码。
而HTML网页则是根据浏览器设置进行编码的,不同的浏览器可能会有不同,所以尽量避免在URL中传递中文参数。当然如果需要传递的话,可以先用Javascript进行编码。
其实原理是这样的,URL编码是根据传进来的HTTP头中的ContentType决定的,JSP中第一句话的意思就是把HTTP相应头中的ContentType设置为后面的内容(因为其实访问一个网页也是一个Get请求,服务器会根据这个Get请求自动返回一个响应,响应的内容为请求的网页)。
在<head>中有一个标签叫<meta>,在<meta>中可以设置一些头部信息。如:
<meta http-equiv="content-Type" content="text/html; charset=gb2312">
<meta http-equiv="Content-Language" content="zh-cn" />
<meta http-equiv="Set-Cookie" content="cookievalue=xxx; expires=Friday,12-Jan-2001 18:18:18 GMT; path=/">
等等,但是其中的Content-Type并不控制URL编码,他只是控制页面显示的编码。他可以控制的是POST方式发送的内容的编码。
上面说的可能有点问题,经试验,如果单纯是HTML文件,通过meta中的Content-Type是可以控制表单提交的编码的,如果是JSP等,则会根据JSP的页头设置进行编码,会覆盖掉meta的定义。最终试验得出:如果是HTML文件,meta中的Content-Type控制的是查询字符串的值那里的编码,查询字符串的名称的编码还是根据浏览器决定的。
二、文档类型
<!DOCTYPE>标签,不属于HTML文档,所以不需要有关闭标签。他用于声明HTML文档的文档类型,常见的有以下几种:
HTML 5
<!DOCTYPE html>
HTML 4.01 Strict
该 DTD 包含所有 HTML 元素和属性,但不包括展示性的和弃用的元素(比如 font)。不允许框架集(Framesets)。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
HTML 4.01 Transitional
该 DTD 包含所有 HTML 元素和属性,包括展示性的和弃用的元素(比如 font)。不允许框架集(Framesets)。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
HTML 4.01 Frameset
该 DTD 等同于 HTML 4.01 Transitional,但允许框架集内容。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"
"http://www.w3.org/TR/html4/frameset.dtd">
XHTML 1.0 Strict
该 DTD 包含所有 HTML 元素和属性,但不包括展示性的和弃用的元素(比如 font)。不允许框架集(Framesets)。必须以格式正确的 XML 来编写标记。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
XHTML 1.0 Transitional
该 DTD 包含所有 HTML 元素和属性,包括展示性的和弃用的元素(比如 font)。不允许框架集(Framesets)。必须以格式正确的 XML 来编写标记。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "
http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
XHTML 1.0 Frameset
该 DTD 等同于 XHTML 1.0 Transitional,但允许框架集内容。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
XHTML 1.1
该 DTD 等同于 XHTML 1.0 Strict,但允许添加模型(例如提供对东亚语系的 ruby 支持)。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
三、头部<head>
头部虽然不参与网页页面显示,但是其中有些标签非常重要。他有以下几部分:
1、<title>
<title>标题</title>,设置在浏览器标题中显示的文本,在HTML5中是必选标签。
2、<base>
为页面上的所有链接规定默认地址或默认目标(target)
<base href="http://www.w3school.com.cn/images/" />
<base target="_blank" />
3、<link>
用于引用外部资源,如CSS等等。
<link rel="stylesheet" type="text/css" href="/html/csstest1.css" >
更多引用内容(摘自w3cschool)
属性 | 值 | 描述 |
---|---|---|
charset | char_encoding | HTML5 中不支持。 |
href | URL | 规定被链接文档的位置。 |
hreflang | language_code | 规定被链接文档中文本的语言。 |
media | media_query | 规定被链接文档将被显示在什么设备上。 |
rel | alternate,author,help,icon,licence,next,pingback prefetch,prevsearch,sidebar,stylesheet,tag | 规定当前文档与被链接文档之间的关系。 |
rev | reversed relationship | HTML5 中不支持。 |
sizes | heightxwidth,any | 规定被链接资源的尺寸。仅适用于 rel="icon"。 |
target | _blank,_self,_top,_parent,frame_name | HTML5 中不支持。 |
type | MIME_type | 规定被链接文档的 MIME 类型。 |
4、<style>
<style> 标签用于为 HTML 文档定义样式信息。优先级比外部样式表高,比内联样式低。
<head>
<style type="text/css">
body {background-color:yellow}
p {color:blue}
</style>
</head>
5、<meta>
<meta>元数据(metadata)是关于数据的信息。
<meta> 标签提供关于 HTML 文档的元数据。元数据不会显示在页面上,但是对于机器是可读的。
典型的情况是,meta 元素被用于规定页面的描述、关键词、文档的作者、最后修改时间以及其他元数据。
<meta> 标签始终位于 head 元素中。
元数据可用于浏览器(如何显示内容或重新加载页面),搜索引擎(关键词),或其他 web 服务。
一些搜索引擎会利用 meta 元素的 name 和 content 属性来索引您的页面。
语法如下:
<meta name="keywords" content="HTML,ASP,PHP,SQL">
<meta http-equiv="charset" content="iso-8859-1">
<meta http-equiv="expires" content="31 Dec 2008">
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<meta http-equiv="Refresh" content="5;url=http://www.w3school.com.cn" />
<meta scheme="dreamdu tutorial" name="url" content="http://www.dreamdu.com">
其中http-equiv是设置request中的头信息的,浏览器接收到的该页面的头信息会直接更改为后面的属性值,发送时也是一样的。
name 属性提供了名称/值对中的名称。HTML 和 XHTML 标签都没有指定任何预先定义的 <meta> 名称。通常情况下,您可以自由使用对自己和源文档的读者来说富有意义的名称。
"keywords" 是一个经常被用到的名称。它为文档定义了一组关键字。某些搜索引擎在遇到这些关键字时,会用这些关键字对文档进行分类。
scheme 属性用于指定要用来翻译属性值的方案。此方案应该在由 <head> 标签的 profile 属性指定的概况文件中进行了定义。
6、<script>
用于编写脚本,网页中最常用的脚本语言是javascript,使用方法:
<script> 标签用于定义客户端脚本,比如 JavaScript。
script 元素既可包含脚本语句,也可通过 src 属性指向外部脚本文件。
必需的 type 属性规定脚本的 MIME 类型。
JavaScript 最常用于图片操作、表单验证以及内容动态更新。
下面的脚本会向浏览器输出“Hello World!”。
<script type="text/javascript">
document.write("Hello World!")
</script>
<script type="text/javascript" src="myscripts.js" defer="defer" charset="UTF-8"></script>
<noscript>Your browser does not support JavaScript!</noscript>
src可以引用外部脚本文件,defer是延迟执行,在页面加载完成之后再执行,charset设置代码编码。
其中<noscript>是在网页把脚本语言禁用是显示的内容。
7、HTML实体
一些预留符号是无法被表示出来的,这个时候就要借助实体了,可以用&name;或者&#ascii;表示。或者在URL编码中,把无法表示的内容解析为实体来进行表示。
四、HTML<body>
1、标签
<body>是显示在网页中的部分,他由很多标签构成,所有标签及版本支持见下表(摘自w3school)
标签 | HTML5 | HTML 4.01 / XHTML 1.0 | XHTML 1.1 | ||
---|---|---|---|---|---|
Transitional | Strict | Frameset | |||
<a> | Yes | Yes | Yes | Yes | Yes |
<abbr> | Yes | Yes | Yes | Yes | Yes |
<acronym> | No | Yes | Yes | Yes | Yes |
<address> | Yes | Yes | Yes | Yes | Yes |
<applet> | No | Yes | No | Yes | No |
<area> | Yes | Yes | Yes | Yes | No |
<article> | Yes | No | No | No | No |
<aside> | Yes | No | No | No | No |
<audio> | Yes | No | No | No | No |
<b> | Yes | Yes | Yes | Yes | Yes |
<base> | Yes | Yes | Yes | Yes | Yes |
<basefont> | No | Yes | No | Yes | No |
<bdi> | Yes | No | No | No | No |
<bdo> | Yes | Yes | Yes | Yes | No |
<big> | No | Yes | Yes | Yes | Yes |
<blockquote> | Yes | Yes | Yes | Yes | Yes |
<body> | Yes | Yes | Yes | Yes | Yes |
<br> | Yes | Yes | Yes | Yes | Yes |
<button> | Yes | Yes | Yes | Yes | Yes |
<canvas> | Yes | No | No | No | No |
<caption> | Yes | Yes | Yes | Yes | Yes |
<center> | No | Yes | No | Yes | No |
<cite> | Yes | Yes | Yes | Yes | Yes |
<code> | Yes | Yes | Yes | Yes | Yes |
<col> | Yes | Yes | Yes | Yes | No |
<colgroup> | Yes | Yes | Yes | Yes | No |
<command> | Yes | No | No | No | No |
<datalist> | Yes | No | No | No | No |
<dd> | Yes | Yes | Yes | Yes | Yes |
<del> | Yes | Yes | Yes | Yes | No |
<details> | Yes | No | No | No | No |
<dfn> | Yes | Yes | Yes | Yes | Yes |
<dir> | No | Yes | No | Yes | No |
<div> | Yes | Yes | Yes | Yes | Yes |
<dl> | Yes | Yes | Yes | Yes | Yes |
<dt> | Yes | Yes | Yes | Yes | Yes |
<em> | Yes | Yes | Yes | Yes | Yes |
<embed> | Yes | No | No | No | No |
<fieldset> | Yes | Yes | Yes | Yes | Yes |
<figcaption> | Yes | No | No | No | No |
<figure> | Yes | No | No | No | No |
<font> | No | Yes | No | Yes | No |
<footer> | Yes | No | No | No | No |
<form> | Yes | Yes | Yes | Yes | Yes |
<frame> | No | No | No | Yes | No |
<frameset> | No | No | No | Yes | No |
<head> | Yes | Yes | Yes | Yes | Yes |
<header> | Yes | No | No | No | No |
<h1> to <h6> | Yes | Yes | Yes | Yes | Yes |
<hr> | Yes | Yes | Yes | Yes | Yes |
<html> | Yes | Yes | Yes | Yes | Yes |
<i> | Yes | Yes | Yes | Yes | Yes |
<iframe> | Yes | Yes | No | Yes | No |
<img> | Yes | Yes | Yes | Yes | Yes |
<input> | Yes | Yes | Yes | Yes | Yes |
<ins> | Yes | Yes | Yes | Yes | No |
<keygen> | Yes | No | No | No | No |
<kbd> | Yes | Yes | Yes | Yes | Yes |
<label> | Yes | Yes | Yes | Yes | Yes |
<legend> | Yes | Yes | Yes | Yes | Yes |
<li> | Yes | Yes | Yes | Yes | Yes |
<link> | Yes | Yes | Yes | Yes | Yes |
<map> | Yes | Yes | Yes | Yes | No |
<mark> | Yes | No | No | No | No |
<menu> | Yes | Yes | No | Yes | No |
<meta> | Yes | Yes | Yes | Yes | Yes |
<meter> | Yes | No | No | No | No |
<nav> | Yes | No | No | No | No |
<noframes> | No | Yes | No | Yes | No |
<noscript> | Yes | Yes | Yes | Yes | Yes |
<object> | Yes | Yes | Yes | Yes | Yes |
<ol> | Yes | Yes | Yes | Yes | Yes |
<optgroup> | Yes | Yes | Yes | Yes | Yes |
<option> | Yes | Yes | Yes | Yes | Yes |
<output> | Yes | No | No | No | No |
<p> | Yes | Yes | Yes | Yes | Yes |
<param> | Yes | Yes | Yes | Yes | Yes |
<pre> | Yes | Yes | Yes | Yes | Yes |
<progress> | Yes | No | No | No | No |
<q> | Yes | Yes | Yes | Yes | Yes |
<rp> | Yes | No | No | No | No |
<rt> | Yes | No | No | No | No |
<ruby> | Yes | No | No | No | No |
<s> | Yes | Yes | No | Yes | No |
<samp> | Yes | Yes | Yes | Yes | Yes |
<script> | Yes | Yes | Yes | Yes | Yes |
<section> | Yes | No | No | No | No |
<select> | Yes | Yes | Yes | Yes | Yes |
<small> | Yes | Yes | Yes | Yes | Yes |
<source> | Yes | No | No | No | No |
<span> | Yes | Yes | Yes | Yes | Yes |
<strike> | No | Yes | No | Yes | No |
<strong> | Yes | Yes | Yes | Yes | Yes |
<style> | Yes | Yes | Yes | Yes | Yes |
<sub> | Yes | Yes | Yes | Yes | Yes |
<summary> | Yes | No | No | No | No |
<sup> | Yes | Yes | Yes | Yes | Yes |
<table> | Yes | Yes | Yes | Yes | Yes |
<tbody> | Yes | Yes | Yes | Yes | No |
<td> | Yes | Yes | Yes | Yes | Yes |
<textarea> | Yes | Yes | Yes | Yes | Yes |
<tfoot> | Yes | Yes | Yes | Yes | No |
<th> | Yes | Yes | Yes | Yes | Yes |
<thead> | Yes | Yes | Yes | Yes | No |
<time> | Yes | No | No | No | No |
<title> | Yes | Yes | Yes | Yes | Yes |
<tr> | Yes | Yes | Yes | Yes | Yes |
<track> | Yes | No | No | No | No |
<tt> | No | Yes | Yes | Yes | Yes |
<u> | No | Yes | No | Yes | No |
<ul> | Yes | Yes | Yes | Yes | Yes |
<var> | Yes | Yes | Yes | Yes | Yes |
<video> | Yes | No | No | No | No |
<wbr> | Yes | No | No | No | No |
2、属性
大部分标签都是有属性的,以下是一些全局属性(摘自w3school)
属性 | 描述 |
---|---|
accesskey | 规定激活元素的快捷键。 |
class | 规定元素的一个或多个类名(引用样式表中的类)。 |
contenteditable | 规定元素内容是否可编辑。 |
contextmenu | 规定元素的上下文菜单。上下文菜单在用户点击元素时显示。 |
data-* | 用于存储页面或应用程序的私有定制数据。 |
dir | 规定元素中内容的文本方向。 |
draggable | 规定元素是否可拖动。 |
dropzone | 规定在拖动被拖动数据时是否进行复制、移动或链接。 |
hidden | 规定元素仍未或不再相关。 |
id | 规定元素的唯一 id。 |
lang | 规定元素内容的语言。 |
spellcheck | 规定是否对元素进行拼写和语法检查。 |
style | 规定元素的行内 CSS 样式。 |
tabindex | 规定元素的 tab 键次序。 |
title | 规定有关元素的额外信息。 |
translate | 规定是否应该翻译元素内容。 |
3、事件
大部分可显示标签都是有其事件的,如鼠标滑过,鼠标点击。可以把事件与javascript脚本或者函数进行挂钩,以达到处理事件的目的。
所有事件如下(摘自w3school)
Window 事件属性
针对 window 对象触发的事件(应用到 <body> 标签):
属性 | 值 | 描述 |
---|---|---|
onafterprint | script | 文档打印之后运行的脚本。 |
onbeforeprint | script | 文档打印之前运行的脚本。 |
onbeforeunload | script | 文档卸载之前运行的脚本。 |
onerror | script | 在错误发生时运行的脚本。 |
onhaschange | script | 当文档已改变时运行的脚本。 |
onload | script | 页面结束加载之后触发。 |
onmessage | script | 在消息被触发时运行的脚本。 |
onoffline | script | 当文档离线时运行的脚本。 |
ononline | script | 当文档上线时运行的脚本。 |
onpagehide | script | 当窗口隐藏时运行的脚本。 |
onpageshow | script | 当窗口成为可见时运行的脚本。 |
onpopstate | script | 当窗口历史记录改变时运行的脚本。 |
onredo | script | 当文档执行撤销(redo)时运行的脚本。 |
onresize | script | 当浏览器窗口被调整大小时触发。 |
onstorage | script | 在 Web Storage 区域更新后运行的脚本。 |
onundo | script | 在文档执行 undo 时运行的脚本。 |
onunload | script | 一旦页面已下载时触发(或者浏览器窗口已被关闭)。 |
Form 事件
由 HTML 表单内的动作触发的事件(应用到几乎所有 HTML 元素,但最常用在 form 元素中):
属性 | 值 | 描述 |
---|---|---|
onblur | script | 元素失去焦点时运行的脚本。 |
onchange | script | 在元素值被改变时运行的脚本。 |
oncontextmenu | script | 当上下文菜单被触发时运行的脚本。 |
onfocus | script | 当元素失去焦点时运行的脚本。 |
onformchange | script | 在表单改变时运行的脚本。 |
onforminput | script | 当表单获得用户输入时运行的脚本。 |
oninput | script | 当元素获得用户输入时运行的脚本。 |
oninvalid | script | 当元素无效时运行的脚本。 |
onreset | script | 当表单中的重置按钮被点击时触发。HTML5 中不支持。 |
onselect | script | 在元素中文本被选中后触发。 |
onsubmit | script | 在提交表单时触发。 |
Keyboard 事件
属性 | 值 | 描述 |
---|---|---|
onkeydown | script | 在用户按下按键时触发。 |
onkeypress | script | 在用户敲击按钮时触发。 |
onkeyup | script | 当用户释放按键时触发。 |
Mouse 事件
由鼠标或类似用户动作触发的事件:
属性 | 值 | 描述 |
---|---|---|
onclick | script | 元素上发生鼠标点击时触发。 |
ondblclick | script | 元素上发生鼠标双击时触发。 |
ondrag | script | 元素被拖动时运行的脚本。 |
ondragend | script | 在拖动操作末端运行的脚本。 |
ondragenter | script | 当元素元素已被拖动到有效拖放区域时运行的脚本。 |
ondragleave | script | 当元素离开有效拖放目标时运行的脚本。 |
ondragover | script | 当元素在有效拖放目标上正在被拖动时运行的脚本。 |
ondragstart | script | 在拖动操作开端运行的脚本。 |
ondrop | script | 当被拖元素正在被拖放时运行的脚本。 |
onmousedown | script | 当元素上按下鼠标按钮时触发。 |
onmousemove | script | 当鼠标指针移动到元素上时触发。 |
onmouseout | script | 当鼠标指针移出元素时触发。 |
onmouseover | script | 当鼠标指针移动到元素上时触发。 |
onmouseup | script | 当在元素上释放鼠标按钮时触发。 |
onmousewheel | script | 当鼠标滚轮正在被滚动时运行的脚本。 |
onscroll | script | 当元素滚动条被滚动时运行的脚本。 |
Media 事件
由媒介(比如视频、图像和音频)触发的事件(适用于所有 HTML 元素,但常见于媒介元素中,比如 <audio>、<embed>、<img>、<object> 以及 <video>):
属性 | 值 | 描述 |
---|---|---|
onabort | script | 在退出时运行的脚本。 |
oncanplay | script | 当文件就绪可以开始播放时运行的脚本(缓冲已足够开始时)。 |
oncanplaythrough | script | 当媒介能够无需因缓冲而停止即可播放至结尾时运行的脚本。 |
ondurationchange | script | 当媒介长度改变时运行的脚本。 |
onemptied | script | 当发生故障并且文件突然不可用时运行的脚本(比如连接意外断开时)。 |
onended | script | 当媒介已到达结尾时运行的脚本(可发送类似“感谢观看”之类的消息)。 |
onerror | script | 当在文件加载期间发生错误时运行的脚本。 |
onloadeddata | script | 当媒介数据已加载时运行的脚本。 |
onloadedmetadata | script | 当元数据(比如分辨率和时长)被加载时运行的脚本。 |
onloadstart | script | 在文件开始加载且未实际加载任何数据前运行的脚本。 |
onpause | script | 当媒介被用户或程序暂停时运行的脚本。 |
onplay | script | 当媒介已就绪可以开始播放时运行的脚本。 |
onplaying | script | 当媒介已开始播放时运行的脚本。 |
onprogress | script | 当浏览器正在获取媒介数据时运行的脚本。 |
onratechange | script | 每当回放速率改变时运行的脚本(比如当用户切换到慢动作或快进模式)。 |
onreadystatechange | script | 每当就绪状态改变时运行的脚本(就绪状态监测媒介数据的状态)。 |
onseeked | script | 当 seeking 属性设置为 false(指示定位已结束)时运行的脚本。 |
onseeking | script | 当 seeking 属性设置为 true(指示定位是活动的)时运行的脚本。 |
onstalled | script | 在浏览器不论何种原因未能取回媒介数据时运行的脚本。 |
onsuspend | script | 在媒介数据完全加载之前不论何种原因终止取回媒介数据时运行的脚本。 |
ontimeupdate | script | 当播放位置改变时(比如当用户快进到媒介中一个不同的位置时)运行的脚本。 |
onvolumechange | script | 每当音量改变时(包括将音量设置为静音)时运行的脚本。 |
onwaiting | script | 当媒介已停止播放但打算继续播放时(比如当媒介暂停已缓冲更多数据)运行脚本 |
补充:在HTML元素中有一个比较重要的概念,叫做块级元素和内联元素。
块级元素:在通常情况下占据整行,前后有回车,内联元素则相反,他是在行内的元素,前后直接接其他元素。这个概念在CSS中用的比较多,请参考CSS中内容。