1.1 HTML技术
1.1.1 HTML简介
HTML是英文Hyper Text Markup Language的缩写,中文译为“超文本标记语言”,其主要作用是通过HTML标记对网页中的文本、图片、声音等内容进行描述。HTML网页就是一个后缀名为“.html”或“.htm”的文件,它可以用记事本打开,所以简单的 HTML 代码可以在记事本中编写。编写完成后,将文件后缀名修改为“.html”即可生成一个HTML网页。
在实际开发中,项目的静态页面通常由网页制作人员设计和制作,开发人员只需了解页面元素,能够使用和修改页面中的元素,并在项目运行时能够展示出相应的后台数据即可。网页制作人员通常会使用一些专业软件来创建HTML页面,由于本教材中HTML技术只作为Java Web学习的辅助技术,所以这里不会详细介绍如何使用专业工具制作网页,只需要读者了解页面元素的构成,会调试基本的页面效果即可。
了解了什么是HTML后,接下来通过一个基本的HTML文档来讲解其内部的构成,如文件1-1所示。
文件1-1 htmlDemo01.html
1 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
2 "http://www.w3.org/TR/html4/loose.dtd">
3 <html>
4 <head>
5 <title>Insert title here</title>
6 </head>
7 <body>
8 </body>
9 </html>
在文件1-1中,主要包括<!DOCTYPE>文档类型声明、<html>根标记、<head>头部标记和<body>主体标记。在HTML页面中,带有“< >”符号的元素被称为HTML标记,如上面文件中<html>、<head>、<body>都是HTML标记。标记就是放在“< >”标记符中表示某个功能的编码命令,也称为HTML标签或HTML元素,本书统一称作HTML标记。文件1-1中各个标记的具体介绍如下。
1.<!DOCTYPE>标记
<!DOCTYPE>标记位于文档的最前面,用于向浏览器说明当前文档使用哪种 HTML 标准规范,如文件1-1中使用的是HTML 4.01版本。网页必须在开头处使用<!DOCTYPE>标记为所有的HTML文档指定HTML版本和类型,只有这样浏览器才能将该网页作为有效的HTML文档,并按指定的文档类型进行解析。<!DOCTYPE>标记和浏览器的兼容性相关,删除<!DOCTYPE>后,会把如何展示HTML页面的权利交给浏览器,这时,有多少种浏览器,页面就有可能有多少种显示效果,在实际开发中,这是不被允许的。
2.<html>标记
<html>标记位于<!DOCTYPE>标记之后,也称为根标记,用于告知浏览器其自身是一个HTML文档,<html>标记标志着HTML文档的开始,</html>标记标志着HTML文档的结束,在它们之间的是文档的头部和主体内容。
3.<head>标记
<head>标记用于定义HTML文档的头部信息,也称为头部标记,紧跟在<html>标记之后,主要用来封装其他位于文档头部的标记,例如<title>、<meta>、<link>及<style>等,其中<title>标记用来描述文档的标题,<meta>标记可提供有关页面的元信息,<link>标记用于定义文档与外部资源的关系,其最常见的用途是链接样式表,<style>标记用于为HTML文档定义样式信息。一个HTML文档只能含有一对<head>标记,绝大多数文档头部包含的数据都不会真正作为内容显示在页面中。
4.<body>标记
<body>标记用于定义HTML文档所要显示的内容,也称为主体标记。浏览器中显示的所有文本、图像、音频和视频等信息都必须位于<body>标记内,<body>标记中的信息才是最终展示给用户看的。一个HTML文档只能含有一对<body>标记,且<body>标记必须在<html>标记内,位于<head>头部标记之后,与<head>标记是并列关系。
了解了文件1-1中的HTML标记后,接下来讲解一下HTML文件的创建以及运行,具体如下。
以文件1-1 htmlDemo01.html为例。首先,创建一个名称为chapter01的文件夹,然后在该文件夹中新建一个.txt文本文件,将文件1-1中的内容编写到该文件中,保存文件后,将文件的名称更改为htmlDemo01,后缀名改为.html,此时该文件即是一个HTML页面,如图1-1所示。
图1-1 HTML页面
双击图1-1所示的htmlDemo01.html文件,即可通过浏览器打开页面。由于HTML页面中没有添加任何内容,此时打开的只是一个空白页面,为了查看页面效果,可以使用记事本打开该文件,在两个<body>标记之间添加一句话,具体如下。
<body>
这是我的第一个HTML
</body>
保存后,使用浏览器再次打开页面,浏览器的显示结果如图1-2所示。
图1-2 第一个HTML页面
从图1-2中可以看出,<body></body>标记中的内容在浏览器中已经显示了出来。
需要注意的是,读者在编写 HTML 文件时,可以使用系统自带的记事本编写,也可以使用EditPlus、UltraEdit或Eclipse等工具编写。当使用工具创建HTML文件时,文件中的基本标记会被自动创建,编辑工具还会有代码颜色区分或者代码提示功能,开发者只需根据需求完善功能代码即可。工具的使用有助于提高编码效率,减少出错率。本章中的HTML都是在记事本中编写的,读者学习时可自己选择是否使用工具辅助编写。
1.1.2 单标记和双标记
不同标记描述的内容在浏览器中的显示效果是不一样的。页面中的信息必须放在相应的HTML 标记中,才能被浏览器正确解析。大部分标记都是成对出现的,如头部标记<head>、主体标记<body>,然而也有单个出现的标记,如水平线标记<hr />。通常将HTML标记分为两大类,分别是“单标记”与“双标记”,对这两个标记的具体介绍如下。
1.单标记
单标记也称空标记,是指用一个标记符号即可完整地描述某个功能的标记。其基本语法格式如下。
<标记名 />
例如,标记<hr />就是单标记,该标记用于定义一条水平线。需要注意的是,在标记名与“/”之间有一个空格,虽然在显示效果上有没有空格都一样,但是按照规范的要求,建议加上空格。
2.双标记
双标记也称体标记,是指由开始和结束两个标记符组成的标记。其基本语法格式如下:
<标记名>内容</标记名>
在上述的语法中,<标记名>表示该标记的作用开始,一般称为开始标记(Start Tag),</标记名>表示该标记的作用结束,一般称为结束标记(End Tag)。和开始标记相比,结束标记只是在前面加了一个关闭符“/”。例如,文件1-1中的<html></html>、<head></head>等都是双标记。
多学一招:为什么要有单标记?
HTML标记的作用原理就是选择网页内容,从而进行描述,也就是说需要描述谁,就选择谁,所以才会有双标记的出现,用于定义标记作用的开始与结束。而单标记本身就可以描述一个功能,不需要选择谁,例如水平线标记<hr />,按照双标记的语法,它应该写成“<hr></hr>”,但是水平线标记不需要选择谁,它本身就代表一条水平线,此时写成双标记就显得有点多余,但是又不能没有结束符号。所以,单标记的语法格式就是在标记名称后面加一个关闭符,即为<标记名 />。
1.1.3 文本控制与文本样式标记
1.段落标记<p></p>和换行标记<br />
为了使网页中的文字有条理地显示出来,HTML提供了段落标记<p></p>,如果希望某段文本强制换行显示,就需要使用换行标记<br />。接下来,通过案例来演示这两种标记的使用。在chapter01文件夹中新建HTML文件htmlDemo02,其关键代码如文件1-2所示。
文件1-2 htmlDemo02.html
1 <body>
2 <p>使用HTML制作网页时通过br标记<br />可以实现换行效果</p>
3 </body>
使用浏览器打开文件1-2,显示结果如图1-3所示。
图1-3 换行标记的使用
从图1-3中可以看出,使用换行标记<br />的文本实现了强制换行的效果。
2.文本样式标记
在HTML中,使用<font>标记来控制网页中文本的样式,如字体、字号和颜色。其基本语法格式如下:
<font 属性="属性值">文本内容</font>
接下来通过一个案例来演示<font>标记的使用。在 chapter01文件夹中新建 HTML 文件htmlDemo03,其关键代码如文件1-3所示。
文件1-3 htmlDemo03.html
1 <body>
2 我是默认样式的文本<br />
3 <font face="微软雅黑" size="7" color="green"><br />
4 我是7号绿色文本,我的字体是微软雅黑哦</font>
5 </body>
在文件1-3中,第2行的文本为HTML默认文本样式,第3行代码使用<font>标记的face、size以及color属性分别设置了文本的字体、大小以及颜色。使用浏览器打开文件1-3,显示结果如图1-4所示。
图1-4 使用<font>标记设置文本样式
1.1.4 图像标记
要想在HTML网页中显示图像就需要使用图像标记<img />。其基本的语法格式如下:
<img src="图像URL" />
在上述的语法中,src属性用于指定图像文件的路径,其属性的值可以是绝对路径,也可以是相对路径,它是<img/>标记的必需属性。要想在网页中灵活地应用<img />标记,只使用src属性是不行的,还需要其他属性的配合。
接下来通过一个案例来演示<img />标记的用法。在 chapter01文件夹中添加一个名称为106.jpg的图片文件,然后创建一个HTML文件htmlDemo04,其关键代码如文件1-4所示。
文件1-4 htmlDemo04.html
1 <body>
2 显示图片:<img src="106.jpg" width="102" height="130" border="0" />
3 </body>
在文件1-4中,width和height属性分别用来设置图像的宽度和高度,单位为像素,border属性用来设置图像的边框,border="0"表示无边框。使用浏览器打开文件1-4,显示结果如图1-5所示。
图1-5 使用<img />标记显示图片
从图1-5中可以看出,浏览器中已经显示出了相应的图片。
1.1.5 表格标记
在制作网页时,为了使网页中的数据能够有条理地显示,可以使用表格对网页进行规划。在Word文档中,可通过插入表格的方式来创建表格,而在HTML网页中要想创建表格,需要使用相关的表格标记才能创建表格。
在HTML网页中创建表格的基本语法格式如下所示。
<table>
<tr>
<td>单元格内的文字</td>
</tr>
</table>
在上述的语法中,包含3对HTML标记,分别为<table></table>、<tr></tr>、<td></td>,它们是创建表格的基本标记,缺一不可。<table></table>用于定义一个表格;<tr></tr>用于定义表格中的行,必须嵌套在<table></table>标记中;<td></td>用于定义表格中的单元格,也可称为表格中的列,必须嵌套在<tr></tr>标记中。接下来,通过一个案例来演示<table>标记的使用。
在chapter01文件夹中创建一个HTML文件htmlDemo05,其关键代码如文件1-5所示。
文件1-5 htmlDemo05.html
1 <body>
2 <table border="1">
3 <tr>
4 <td>姓名</td>
5 <td>语文</td>
6 <td>数学</td>
7 <td>英语</td>
8 </tr>
9 <tr>
10 <td>itcast</td>
11 <td>95</td>
12 <td>80</td>
13 <td>90</td>
14 </tr>
15 </table>
16 </body>
在文件1-5中,<table>标记的border属性会为每个单元格应用边框,并用边框围绕表格。这里将border的属性设置为1,单位是像素,表示该表格边框的宽度为1像素。如果border属性的值发生改变,那么只有围绕表格的边框尺寸会发生变化,表格内部的边框还是1像素宽。如果将border的属性值设置为0或者删除border属性,将显示没有边框的表格。使用浏览器打开文件1-5,显示结果如图1-6所示。
图1-6 有边框表格的显示效果
将border属性值设置为0,保存后刷新页面,浏览器的显示结果如图1-7所示。
图1-7 无边框表格的显示效果
从图1-7的显示效果可以看出,表格中的内容依然整齐有序地排列着,但是这时已看不到边框。在实际开发中,建议使用CSS来添加边框样式和颜色。
1.1.6 表单标记
学习表单标记之前,首先需要理解表单的概念。简单地说,表单就是在网页上用于输入信息的区域,它的主要功能是收集数据信息,并将这些信息传递给后台信息处理模块。其实表单在互联网上随处可见,例如,注册页面中的用户名和密码输入、性别选择、提交按钮等都是用表单中的相关标记定义的。
表单主要由3部分构成,分别为表单控件、提示信息和表单域,详细介绍如下所示。
• 表单控件:包含了具体的表单功能项,如单行文本输入框、密码输入框、复选框提交按钮等。
• 提示信息:一个表单中通常还需要包含一些说明性的文字,即表单控件前的文字说明,用于提示用户进行填写和操作。
• 表单域:它相当于一个容器,用来容纳所有的表单控件和提示信息。
1.创建表单
在HTML中,<form>标记用于定义表单域,即创建一个表单,其基本语法如下所示。
<form action="url地址" method="提交方式" name="表单名称">
各种表单控件
</form>
在上述的语法中,action、method、name为<form>标记的常用属性,action属性用于指定表单提交的地址,例如 action="login.jsp"表示表单数据会提交到名为 login.jsp 的页面去处理。method属性用于设置表单数据的提交方式,其取值为GET或POST。其中,GET为默认值,这种方式提交的数据将显示在浏览器的地址栏中,保密性差且有数据量限制。而使用POST提交方式不但保密性好,还可以提交大量的数据,所以开发中通常使用POST方式提交表单。
2.表单控件<input>
浏览网页时,读者经常会看到单行文本输入框、单选按钮、复选框、重置按钮等,使用<input />控件可以在表单中定义这些元素,其基本语法格式如下。
<input type="控件类型" />
在上述语法中,type 属性为其最基本的属性,取值有多种,用来指定不同的控件类型。除type属性外,<input />控件还可以定义很多其他属性,其中,比较常用的如id、name、value、size,它们分别用来指定input控件的ID值、名称、控件中的默认值和控件在页面中的显示宽度。接下来通过一个案例来演示<input />控件的使用。
在chapter01文件夹下创建一个HTML文件htmlDemo06,在该文件中使用表单控件来显示注册页面,其关键代码如文件1-6所示。
文件1-6 htmlDemo06.html
1 <body>
2 <fieldset>
3 <legend>注册新用户</legend>
4 <!-- 表单数据的提交方式为POST -->
5 <form action="#" method="post">
6 <table cellpadding="2" align="center">
7 <tr>
8 <td align="right">用户名:</td>
9 <td>
10 <!-- 1.文本输入框控件 -->
11 <input type="text" name="username" />
12 </td>
13 </tr>
14 <tr>
15 <td align="right">密码:</td>
16 <!-- 2.密码输入框控件 -->
17 <td><input type="password" name="password" /></td>
18 </tr>
19 <tr>
20 <td align="right">性别:</td>
21 <td>
22 <!-- 3.单选输入框控件,由于无法输入value, 所以预先定义好 -->
23 <input type="radio" name="gender" value="male" /> 男
24 <input type="radio" name="gender" value="female" /> 女
25 </td>
26 </tr>
27 <tr>
28 <td align="right">兴趣:</td>
29 <td>
30 <!-- 4.复选框控件 -->
31 <input type="checkbox" name="interest" value="film" /> 看电影
32 <input type="checkbox" name="interest" value="code" /> 敲代码
33 <input type="checkbox" name="interest" value="game" /> 玩游戏
34 </td>
35 </tr>
36 <tr>
37 <td align="right">头像:</td>
38 <td>
39 <!-- 5.文件上传控件 -->
40 <input type="file" name="photo" />
41 </td>
42 </tr>
43 <tr>
44 <td colspan="2" align="center">
45 <!-- 6.提交按钮控件 -->
46 <input type="submit" value="注册" />
47 <!-- 7.重置按钮控件,单击后会清空当前form -->
48 <input type="reset" value="重填" />
49 </td>
50 </tr>
51 </table>
52 </form>
53 </fieldset>
54 </body>
在文件1-6中,分别使用<input />标记定义了文本输入框控件、密码输入框控件、单选框和复选框控件、文件上传控件以及提交和重置按钮控件。在上述控件中,name属性代表控件名称,value属性表示该控件的值。需要注意的是,单选框控件和复选框控件必须指定相同的name值,这是为了方便在处理页面数据时获取表单传递的值(表单所传递的就是该控件的value值)。上述代码中,还使用了<fieldset>和<legend>标记。<fieldset>标记的作用是将表单内的元素分组,而<legend>标记则为<fieldset>标记定义标题。
使用浏览器打开文件1-6,显示结果如图1-8所示。
图1-8 表单控件的使用
填写完图1-8中所示的表单数据后,页面如图1-9所示。
图1-9 表单控件的使用
从图1-9可以看出,密码输入框中内容为不可见状态,单选按钮只能选择一个值,而复选框可以选择多个值。
与其他语言类似,HTML 中也提供了代码注释,它以“<!--”开头,以“-->”结束,其语法如下所示。
<!--注释内容-->
在文件1-6中,就大量地使用了HTML注释,被注释的内容不会显示到浏览器页面上,但是通过查看浏览器中的源代码可以看到HTML中的注释信息。
多学一招:HTML的多行文本标记
通过前面的学习可知,使用<input />标记可以定义单行文本输入框。但是,如果需要输入大量的文本信息,单行文本框将无法显示全部的输入信息,为此 HTML 语言提供了<textarea></textarea>标记。通过此标记可以创建多行文本框,其基本语法格式如下。
<textarea cols="每行中的字符数" rows="显示的行数">
文本内容
</textarea>
接下来通过一个案例来演示<textarea></textarea>标记的使用。
在chapter01文件夹中创建一个名称为htmlDemo07的HTML文件,其关键代码如文件1-7所示。
文件1-7 htmlDemo07.html
1 <body>
2 <form action="#" method="post">
3 评论: <br />
4 <textarea cols="60" rows="5">
5 评论时,请注意文明用语。
6 </textarea>
7 <br /> <br />
8 <input type="submit" value="提交" />
9 </form>
10 </body>
在文件1-7中,cols属性用于设置文本框每行的字符数为60,rows属性用于设置文本框的行数为5行,<textarea>标记之间的文字为默认显示文本,该文字可以被用户修改或删除,这里起提示作用。使用浏览器打开文件htmlDemo07,显示结果如图1-10所示。
图1-10 多行文本框的使用
1.1.7 列表标记和超链接标记
1.无序列表<ul>
列表标记分为有序列表和无序列表,由于在HTML中无序列表较为常用,所以下面针对无序列表进行详细的讲解。为了使网页更易读,经常将网页信息以列表的形式呈现,例如淘宝商城首页的商品分类就是以列表的形式呈现的。无序列表的各个列表项之间没有顺序级别之分,通常是并列的。定义无序列表的基本语法格式如下所示。
<ul>
<li>列表项1</li>
<li>列表项2</li>
<li>列表项3</li>
...
</ul>
在上述语法中,<ul></ul>标记用于定义无序列表,<li></li>标记嵌套在<ul></ul>标记中,用于描述具体的列表项,每对<ul></ul>中至少应包含一对<li></li>。接下来通过一个案例来演示<ul></ul>标记的使用。
在chapter01文件夹中创建一个HTML文件htmlDemo08,其关键代码如文件1-8所示。
文件1-8 htmlDemo08.html
1 <body>
2 <font size="5">传智播客学科</font><br />
3 <ul>
4 <li>web前端</li>
5 <!-- 指定type属性值 ,disc为默认值-->
6 <li type="disc">JAVA</li>
7 <li type="square">PHP</li>
8 <li type="circle">.NET</li>
9 </ul>
10 </body>
在文件1-8中,<li></li>标记的type属性用来指定列表项目符号。type常用的属性值有3种:disc、square 和 circle,它们的显示效果分别是●、■和○,type 属性的默认值是 disc,在代码的第4行使用了默认值,代码的第6行显示设置的type属性值为"disc"。使用浏览器打开文件1-8,显示结果如图1-11所示。
图1-11 无序列表的显示效果
2.超链接标记
一个网站通常由多个页面构成,进入网站时首先看到的是其首页面,如果想从首页面跳转到子页面,就需要在首页面的相应位置添加超链接。在 HTML 中创建超链接非常简单,只需用<a></a>标记环绕需要被链接的对象即可。其基本语法格式如下所示。
<a href="跳转目标" target="目标窗口的弹出方式">文本或图像</a>
在上述语法中,<a></a>标记是一个行内标记,用于定义超链接,href 属性用于指定链接指向的页面的URL,当在<a></a>标记中使用href属性时,该标记就具有了超链接的功能;target属性用于指定页面的打开方式,其取值有_self、_blank、_parent和_top(_self和_blank较为常用),其中_self为默认值,意为在原窗口打开,_blank为在新窗口打开,_parent是在父框架集中打开被链接文档,_top是在整个窗口中打开被链接文档。接下来通过一个案例来演示<a></a>标记的使用。
在chapter01文件夹中创建一个HTML文件htmlDemo09,其关键代码如文件1-9所示。
文件1-9 htmlDemo09.html
1 <body>
2 在新窗口打开:
3 <a href="http://www.itcast.cn/" target="_blank">传智播客</a><br />
4 在原窗口打开:
5 <a href="http://www.baidu.com/" target="_self">百度</a>
6 </body>
在文件1-9中,使用<a></a>标记定义了两个超链接,其中传智播客首页链接的打开方式设置为在新窗口打开,百度首页面的打开方式设置为在原窗口打开,使用浏览器打开文件1-9,显示效果如图1-12所示。
图1-12 带有超链接的页面
从图1-12中可以看到两个超链接,单击“传智播客”链接后,页面跳转效果如图1-13所示。
图1-13 链接页面在新窗口打开
从图1-13中可以看出,当单击“传智播客”链接时,“传智播客”首页面在新窗口打开了。关闭新窗口,回到原窗口再单击“百度”链接时,页面跳转效果如图1-14所示。
图1-14 链接页面在原窗口打开
从图1-14中可以看出,当单击“百度”链接后,“百度”首页面会在原窗口打开。
1.1.8 <div>标记
div是英文Division的缩写,意为“分割、区域”。<div>标记简单而言就是一个区块容器标记,可以将网页分割为独立的、不同的部分,以实现网页的规划和布局。在HTML页面中,它以<div>开头,并以</div>结尾,在<div>与</div>之间可以容纳段落、标题、图像等各种网页元素,也就是说大多数HTML标记都可以嵌套在<div>标记中,并且<div>还可以嵌套多层<div>。在实际开发中<div>标记常常与 CSS 技术搭配使用,在下一小节讲解 CSS 技术的过程中会对<div>标记的使用进行举例,这里不多赘述。