JSP页面中doctype说明 2012-5-8

合集下载

DOCTYPE声明的作用

DOCTYPE声明的作用

DOCTYPE声明在CSS5中的作用要建立符合标准的网页,DOCTYPE声明是必不可少的关键组成部分;除非你的XHTML确定了一个正确的DOCTYPE,否则你的标识和CSS 都不会生效,也就是说如果没有这个DOCTYPE声明将会导致CSS失效-css无效,特别是没有声明或声明不正确将在标准浏览器下更是不能正常显示。

DOCTYPE声明开始制作符合标准的站点,第一件事情就是声明符合自己需要的DOCTYPE。

查看很多使用XHTML标准开发的网站,第一行就是:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 打开一些符合标准的站点,例如著名web设计软件开发商Macromedia,会发现同样的代码。

而另一些符合标准的站点的代码则如下:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "/TR/xhtml1/DTD/xhtml1-frameset.dtd"> 那么这些代码有什么含义?一定要放置吗?什么是DOCTYPE上面这些代码我们称做DOCTYPE声明。

DOCTYPE是document type(文档类型)的简写,用来说明你用的XHTML或者HTML是什么版本。

其中的DTD(例如上例中的xhtml1-transitional.dtd)叫文档类型定义,里面包含了文档的规则,浏览器就根据你定义的DTD来解释你页面的标识,并展现出来。

要建立符合标准的网页,DOCTYPE声明是必不可少的关键组成部分;除非你的XHTML确定了一个正确的DOCTYPE,否则你的标识和CSS 都不会生效。

XHTML 1.0 提供了三种DTD声明可供选择:* 过渡的(Transitional):要求非常宽松的DTD,它允许你继续使用HTML4.01的标识(但是要符合xhtml的写法),完整代码如下:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0Transitional//EN""/TR/xhtml1/DTD/xhtml1-transitional.dtd"> * 严格的(Strict):要求严格的DTD,你不能使用任何表现层的标识和属性,例如<br>,完整代码如下:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "/TR/xhtml1/DTD/xhtml1-strict.dtd"> * 框架的(Frameset):专门针对框架页面设计使用的DTD,如果你的页面中包含有框架,需要采用这种DTD,完整代码如下:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "/TR/xhtml1/DTD/xhtml1-frameset.dtd"> 我们选择什么样的DOCTYPE理想情况当然是严格的DTD,但对于我们大多数刚接触web标准的设计师来说,过渡的DTD(XHTML 1.0 Transitional)是目前理想选择。

DOCTYPE声明作用及用法详解

DOCTYPE声明作用及用法详解

DOCTYPE声明作⽤及⽤法详解⼀、浏览器呈现模式和doctype有的⽹页是遵循标准⽽创作的,但也有很多不是。

即使你不能创建遵循标准的⽹页,也希望浏览器根据标准来正确显⽰那些页。

⽬前,⼤量⽹页充斥着⼤量⾮标准代码,它们仍能正常地⼯作。

事实上,为旧版浏览器设计的⼤多数代码都能在新版浏览器中正确显⽰(虽然呈现⽅式可能有所区别)。

这是什么原因呢?事实上,假如严格遵循最新标准,会完全破坏那些页的⽣存基础。

对于任何希望有所作为的浏览器来说,这当然是令⼈⽆法接受的。

浏览器呈现模式现代浏览器包括不同的呈现模式,⽬的是既⽀持遵循标准的⽹页,也⽀持为⽼式浏览器⽽设计的⽹页。

其中, Standards (标准)模式(也就是严格呈现模式)⽤于呈现遵循最新标准的⽹页,⽽ Quirks (包容)模式(也就是松散呈现模式或者兼容模式)⽤于呈现为传统浏览器⽽设计的⽹页。

另外,注意Mozilla/Netscape 6新增了⼀种 Almost Standards (近似标准)模式,⽤于⽀持为标准的某个⽼版本⽽设计的⽹页。

什么是 doctype切换?放在⽹页顶部的doctype声明是让浏览器进⼊正确呈现模式的关键。

浏览器⾃动切换到恰当的呈现模式,以便正确显⽰由doctype声明所指定的⽂档种类。

理论上,这应该是⼀个⾮常直观的切换。

假如doctype指出当前⽹页是⼀个遵循标准(也就是HTML 4+或XHTML 1+)的⽂档,浏览器就会切换到Standards模式。

假如没有指定doctype,或者指定HTML 3.2以及更⽼的版本,浏览器就切换到Quirks 模式。

这样⼀来,浏览器既能正确显⽰遵循标准的⽂档,⼜不⾄于完全舍弃⽼式的、与标准不符的⽹页。

doctype切换的问题但是,doctype切换是⼀个不完善的⽅案。

即使你在Web⽂档中使⽤了⼀个doctype声明,浏览器也可能不会采取你希望的呈现模式来显⽰⽹页。

原因是多⽅⾯的,包括形式错误的doctype,以及不同<?xml version="1.0" encoding="UTF-8"?>) 开头,其中包括XHTML⽹页。

关于doctype

关于doctype

关于doctypeDOCTYPE 作为⼀个决定浏览器对于 HTML ⽂档采取何种模式“开关”,应出现在 HTML ⽂档的最前⾯。

但是某些时候需要在页⾯最前端放⼊⼀些信息。

对于普通⽂本和 HTML 标签,各浏览器均进⼊了混杂模式,这个很好理解,都看到疑似的 HTML ⽂档正⽂了,浏览器不太会往下追查DOCTYPE 在哪⾥。

对于 HTML 注释和 XML 声明,它们和上⾯的普通⽂本和 HTML 标签有些差别,它们不会在页⾯中展⽰出来,即不可视。

这时,有的浏览器则显得⼗分“智能”,⾮ IE 浏览器均会忽略它们的存在,DOCTYPE 被正确解析。

但是在 IE6 中,DOCTYPE 之前的 XML 声明会导致页⾯进⼊混杂模式,⽽所有的 IE 均会使 DOCTYPE 之前出现了 HTML 注释的页⾯进⼊混杂模式。

在 IE9 中当出现这种情况时,浏览器在控制台中给出了提⽰:“HTML1113: ⽂档模式从 IE9 标准重新启动到 Quirks ”,看来微软在这⼀点上不打算“随⼤流”,这样做也可以敦促作者尽量避免在 DOCTYPE 之前加⼊其他内容。

有的作者很聪明,他既在 DOCTYPE 之前加⼊了他需要的内容,却⼜没有使 IE 由于这些内容⽽进⼊混杂模式。

他可能会这么写:<![if !IE]><!-- some comments --><![endif]><![if false]><!-- some comments --><![endif]>⼜或者是<!--[if !IE]>some text<![endif]-->上⾯这些 IE 条件注释在⾮ IE 浏览器中,可能完全被忽略,可能被解释为普通 HTML 注释。

但是在 IE 中它们全部消失了,因为这就是 IE 条件注释的作⽤。

所以这也是⽬前⽐较合适的在 DOCTYPE 之前写点什么⼜保证所有浏览器均为标准模式的做法,但我们仍然不推荐在DOCTYPE 之前加⼊任何⾮空⽩内容。

Jsp详解

Jsp详解

Jsp详解1.简介2.Jsp的运行原理3.Jsp的语法1.Jsp模板元素2.Jsp中的脚本表达式3.Jsp中的脚本片段4.Jsp的声明5.Jsp注释6.Jsp指令1.首先我们来看一下page指令的用法2.下面在来看一下include指令3.最后来看一下taglib指令7.Jsp中内置的9个隐式对象8.JSP标签库1.jspinclude标签2.jspforward标签3.jspparam或者jspparams标签4.jspuseBean标签jspsetProperty标签jspgetProperty标签9.Jsp中怎么排查错误简介:JSP全称是JavaServer Pages,它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术。

JSP这门技术的最大的特点在于,写jsp就像在写html,但:它相比html而言,html只能为用户提供静态数据,而Jsp技术允许在页面中嵌套java代码,为用户提供动态数据。

相比servlet而言,servlet很难对数据进行排版,而jsp除了可以用java代码产生动态数据的同时,也很容易对数据进行排版。

不管是JSP还是Servlet,虽然都可以用于开发动态web资源。

但由于这2门技术各自的特点,在长期的软件实践中,人们逐渐把servlet作为web应用中的控制器组件来使用,而把JSP技术作为数据显示模板来使用。

其原因为,程序的数据通常要美化后再输出:让jsp既用java代码产生动态数据,又做美化会导致页面难以维护。

让servlet既产生数据,又在里面嵌套html代码美化数据,同样也会导致程序可读性差,难以维护。

因此最好的办法就是根据这两门技术的特点,让它们各自负责各的,servlet只负责响应请求产生数据,并把数据通过转发技术带给jsp,数据的显示jsp来做。

Jsp的运行原理:目标:Web服务器是如何调用并执行一个jsp页面的?Jsp页面中的html排版标签是如何被发送到客户端的?Jsp页面中的java代码服务器是如何执行的?Web服务器在调用jsp时,会给jsp提供一些什么java对象?思考:JSP为什么可以像servlet一样,也可以叫做动态web资源的开发技术?其实Jsp就是一个Servlet,所以我们要先介绍Servlet的相关技术,当我们第一次访问Jsp 的时候,Jsp引擎都会将这个Jsp翻译成一个Servlet,这个文件存放在Tomcat中的work目录中,这里,我们新建一个MyJsp.jsp页面,然后访问以下,我们看一下翻译后的源码:1.<%@ page language="java"import="java.util.*"pageEncoding="utf-8"%>2.3.<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML4.01 Transitional//EN">4.<html>5.<head>6.7.<title>My JSP 'MyJsp.jsp' starting page</title>8.9.</head>10.11.<body>12. This is my JSP page. <br>13.</body>14.</html>1.package org.apache.jsp;2.3.import javax.servlet.*;4.import javax.servlet.http.*;5.import javax.servlet.jsp.*;6.import java.util.*;7.8.public final class MyJsp_jsp extends org.apache.jasper.runtime.HttpJspBase9.implements org.apache.jasper.runtime.JspSourceDependent {10.11.private static final JspFactory _jspxFactory = JspFactory.getDefaultFactory();12.13.private static java.util.List _jspx_dependants;14.15.private javax.el.ExpressionFactory _el_expressionfactory;16.private org.apache.AnnotationProcessor _jsp_annotationprocessor;17.18.public Object getDependants() {19.return _jspx_dependants;20. }21.22.public void _jspInit() {23. _el_expressionfactory = _jspxFactory.getJspApplicationContext(getServletConfig().getServletContext()).getExpressionFactory();24. _jsp_annotationprocessor = (org.apache.AnnotationProcessor) getServletConfig().getServletContext().getAttribute(org.apache.AnnotationProcessor.class .getName());25. }26.27.public void _jspDestroy() {28. }29.30.public void _jspService(HttpServletRequest request, HttpServletResponse response)31.throws java.io.IOException, ServletException {32.33. PageContext pageContext = null;34. HttpSession session = null;35. ServletContext application = null;36. ServletConfig config = null;37. JspWriter out = null;38. Object page = this;39. JspWriter _jspx_out = null;40. PageContext _jspx_page_context = null;41.42.43.try {44. response.setContentType("text/html;charset=utf-8");45. pageContext = _jspxFactory.getPageContext(this, request, response,46.null, true, 8192, true);47. _jspx_page_context = pageContext;48. application = pageContext.getServletContext();49. config = pageContext.getServletConfig();50. session = pageContext.getSession();51. out = pageContext.getOut();52. _jspx_out = out;53.54. out.write("\r\n");55. out.write("\r\n");56. out.write("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\r\n");57. out.write("<html>\r\n");58. out.write(" <head>\r\n");59. out.write(" \r\n");60. out.write(" <title>My JSP 'MyJsp.jsp' starting page</title>\r\n");61. out.write(" \r\n");62. out.write(" </head>\r\n");63. out.write(" \r\n");64. out.write(" <body>\r\n");65. out.write(" This is my JSP page. <br>\r\n");66. out.write(" </body>\r\n");67. out.write("</html>\r\n");68. } catch (Throwable t) {69.if (!(t instanceof SkipPageException)){70. out = _jspx_out;71.if (out != null && out.getBufferSize() != 0)72.try { out.clearBuffer(); } catch (java.io.IOException e) {}73.if (_jspx_page_context != null) _jspx_page_context.handlePageException(t);74. }75. } finally {76. _jspxFactory.releasePageContext(_jspx_page_context);77. }78. }79.}我们看到,这个类继承了org.apache.jasper.runtime.HttpJspBase,要想看到这个类的源码,我1./*2. * Licensed to the Apache Software Foundation (ASF) under one or more3. * contributor license agreements. See the NOTICE file distributed with4. * this work for additional information regarding copyright ownership.5. * The ASF licenses this file to You under the Apache License, Version 2.06. * (the "License"); you may not use this file except in compliance with7. * the License. You may obtain a copy of the License at8. *9. * /licenses/LICENSE-2.010. *11. * Unless required by applicable law or agreed to in writing, software12. * distributed under the License is distributed on an "AS IS" BASIS,13. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.14. * See the License for the specific language governing permissions and15. * limitations under the License.16. */17.18.package org.apache.jasper.runtime;19.20.import java.io.IOException;21.22.import javax.servlet.ServletConfig;23.import javax.servlet.ServletException;24.import javax.servlet.http.HttpServlet;25.import javax.servlet.http.HttpServletRequest;26.import javax.servlet.http.HttpServletResponse;27.import javax.servlet.jsp.HttpJspPage;28.import javax.servlet.jsp.JspFactory;29.30.import piler.Localizer;31.32./**33. * This is the super class of all JSP-generated servlets.34. *35. * @author Anil K. Vijendran36. */37.public abstract class HttpJspBase38.extends HttpServlet39.implements HttpJspPage40.41.42.{43.44.protected HttpJspBase() {45. }46.47.public final void init(ServletConfig config)48.throws ServletException49. {50.super.init(config);51. jspInit();52. _jspInit();53. }54.55.public String getServletInfo() {56.return Localizer.getMessage("");57. }58.59.public final void destroy() {60. jspDestroy();61. _jspDestroy();62. }63.64./**65. * Entry point into service.66. */67.public final void service(HttpServletRequest request, HttpServletResponse response)68.throws ServletException, IOException69. {70. _jspService(request, response);71. }72.73.public void jspInit() {74. }75.76.public void _jspInit() {77. }78.79.public void jspDestroy() {80. }81.82.protected void _jspDestroy() {83. }84.85.public abstract void _jspService(HttpServletRequest request,86. HttpServletResponse response)87.throws ServletException, IOException;88.}好吧,看到了,继承了HttpServlet类,所以说其实Jsp就是一个ServletJsp的语法:1.JSP模版元素2.JSP表达式3.JSP脚本片段4.JSP注释5.JSP指令6.JSP标签7.JSP内置对象8.如何查找JSP页面中的错误Jsp模板元素JSP页面中的HTML内容称之为JSP模版元素。

JSP DTD声明

JSP  DTD声明

JSP DTD声明文档类型定义DTD中包含4种类型的声明,即元素类型的声明、属性列表声明、实体声明和符号声明。

一个文档类型定义,文件需要将所要创建的XML文档的元素结构和属性类型等预先进行定义。

1.元素类型声明第一个元素类型声明定义一个<student>元素,并规定该元素必须有name、class 和address三个子元素,并且子元素出列的次序必须与之相对应。

第二个元素类型声明也定义了一个<student>元素,并规定该元素的内容仅包含一般的字符串。

元素类型不仅声明了XML文档中可能存在的元素,而且给出了元素名称以及元素的具体类型。

根据XML的标准,按元素内容可以划分为4种类型:空元素类型、ANY元素类型、父元素类型和混合元素类型。

其中的关键字EMPTY表明该元素不包含数据以及子元素。

如果在XML文档中元素本身已经表明了含义,就可以在DTD中声明元素为空元素。

例如:ANY元素类型表明该元素的内容可以是任何字符数据和子元素,只要它们不违反XML格式的约束。

例如:的顺序和次数。

XML的解析器将使用这些正规表达式与XML文档内的数据进行区配,以判断一个文档是否是“有效的”。

正规表达式可以描述父元素和子元素之间非常复杂的关系。

父元素类型的元素声明可以有多种灵活形式,各种形式之间主要是在子元素出现顺序、出现次数,以及各个子元素之间的复合关系决定。

表7-1中列出了在父元素类型中如何规定子元素的次序和出现次。

例如,在下面的DTD父元素类型声明中使用逗号运算符“,”,用于进行一步控混合类型的元素中既可以包含子元素,也可以包含纯文本字符,同样也可以在只能使用竖线分隔#PCDA TA和子元素列表。

2.属性列表声明对于某一个元素而言,它的属性可以有零个或多个,并且每个属性的声明包括属性默认值、属性类型及属性名称等。

默认说明表示在XML文件中,元素的该属性的取值,以及属属性是否为必需。

它具有的取值和说明如表7-2所示。

什么是DOCTYPE

什么是DOCTYPE

什么是DOCTYPE:DOCTYPE,或者称为 Document Type Declaration(文档类型声明,缩写 DTD)。

通常情况下,DOCTYPE 位于一个 HTML 文档的最前面的位置,位于根元素 HTML 的起始标签之前。

这样一来,在浏览器解析 HTML 文档正文之前就可以确定当前文档的类型,以决定其需要采用的渲染模式(不同的渲染模式会影响到浏览器对于 CSS 代码甚至 JavaScript 脚本的解析)。

在写程序时我们也会经常遇到这样的问题,如何保证原来的接口不变,又提供更强大的功能,尤其是新功能不兼容旧功能时。

遇到这种问题时的一个常见做法是增加参数和分支,即当某个参数为真时,我们就使用新功能,而如果这个参数不为真时,就使用旧功能,这样就能不破坏原有的程序,又提供新功能。

IE6也是类似这样做的,它将DTD当成了这个“参数”,因为以前的页面大家都不会去写DTD,所以IE6就假定如果写了DTD,就意味着这个页面将采用对 CSS 支持更好的布局,而如果没有,则采用兼容之前的布局方式。

这就是Quirks模式(怪癖模式,诡异模式,怪异模式)。

DOCTYPE与各种模式的关系:混杂模式:不写DOCTYPE近似标准模式:<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""/TR/html4/loose.dtd"><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN""/TR/html4/frameset.dtd"><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""/TR/xhtml1/DTD/xhtml1-transitional.dtd"><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN""/TR/xhtml1/DTD/xhtml1-frameset.dtd">标准模式:<!DOCTYPE html><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN""/TR/html4/strict.dtd"><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN""/TR/xhtml1/DTD/xhtml1-strict.dtd">我们可以看到,过渡型或框架型HTML声明与过渡型或框架型XHTML声明均可使浏览器进入近似标准模式,同时,html5的DOCTYPE声明和严格型HTML声明以及严格型XHTML声明则会使浏览器进入标准模式。

html中doctype有几种类型以及doctype的作用

html中doctype有几种类型以及doctype的作用

html中doctype有⼏种类型以及doctype的作⽤htm中doctype标签是⼀种标准通⽤标记语⾔的⽂档类型声明,它的⽬的是要告诉标准通⽤标记语⾔解析器,它应该使⽤什么样的⽂档类型定义(DTD)来解析⽂档。

dotype 的特点:1. <!doctype>声明必须处于HTML⽂档的头部,在<html>标签之前,HTML5中不区分⼤⼩写2. <!doctype>声明不是⼀个HTML标签,是⼀个⽤于告诉浏览器当前HTMl版本的指令3. 现代浏览器的html布局引擎通过检查doctype决定使⽤兼容模式还是标准模式对⽂档进⾏渲染,⼀些浏览器有⼀个接近标准模型。

4. 在HTML4.01中<!doctype>声明指向⼀个DTD,由于HTML4.01基于SGML,所以DTD指定了标记规则以保证浏览器正确渲染内容5. HTML5不基于SGML,所以不⽤指定DTD常见dotype:1. HTML4.01 strict:不允许使⽤表现性、废弃元素(如font)以及frameset。

声明:<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "/TR/html4/strict.dtd">1. HTML4.01 Transitional:允许使⽤表现性、废弃元素(如font),不允许使⽤frameset。

声明:<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "/TR/html4/loose.dtd">1. HTML4.01 Frameset:允许表现性元素,废⽓元素以及frameset。

声明:<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "/TR/html4/frameset.dtd">1. XHTML1.0 Strict:不使⽤允许表现性、废弃元素以及frameset。

Doctype的作用

Doctype的作用

Doctype的作⽤
1.什么是Doctype
<!DOCTYPE>声明叫做⽂件类型定义(DTD),声明的作⽤是为了告诉浏览器该⽂件的类型。

让浏览器解析器知道应该⽤哪个规范来解析⽂档
<!DOCTYPE> 声明必须是 HTML ⽂档的第⼀⾏,位于 <html> 标签之前。

<!DOCTYPE> 声明不是 HTML 标签;它是指⽰ web 浏览器关于页⾯使⽤哪个 HTML 版本进⾏编写的指令。

在 HTML 4.01 中,<!DOCTYPE> 声明引⽤ DTD,因为 HTML 4.01 基于 SGML。

DTD 规定了标记语⾔的规则,这样浏览器才能正确地呈现内容。

HTML5 不基于 SGML,所以不需要引⽤ DTD。

提⽰:请始终向 HTML ⽂档添加 <!DOCTYPE> 声明,这样浏览器才能获知⽂档类型。

2.严格模式与混杂模式如何区分?它们有何意义?
严格模式:⼜称标准模式,是指浏览器按照W3C标准解析代码
混杂模式:⼜称怪异模式或兼容模式,是指浏览器⽤⾃⼰的⽅式解析代码
如何区分:浏览器解析时到底使⽤哪种模式,与⽹页中的DTD有关
(1)如果⽂档包含严格的DOCTYPE,以严格模式呈现
(2)包含过度DTD和URL的DOCTYPE,也以严格模式呈现,但有过度DTD⽽没有URL(统⼀资源标识符)会导致页⾯以混杂模式呈现
(3)DOCTYPE不存在或形式不正确会导致⽂档以混扎模式呈现
(4)HTML5没有DTD,因此也就没有严格模式与混杂模式的区别。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

jsp html 页面DOCTYPE
声明符合自己需要的DOCTYPE。

查看原代码,可以看到第一行就是:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"/TR/xhtml1/DTD/xhtml1-transitional.dtd">
打开一些符合标准的站点,例如著名web设计软件开发商Macromedia,设计大师Zeldman的个人网站,会发现同样的代码。

而另一些符合标准的站点(例如)的代码则如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"
"/TR/xhtml1/DTD/xhtml1-frameset.dtd">
那么这些代码有什么含义?一定要放置吗?
什么是DOCTYPE
上面这些代码我们称做DOCTYPE声明。

DOCTYPE是document type(文档类型)的简写,用来说明你用的XHTML或者HTML是什么版本。

其中的DTD(例如上例中的xhtml1-transitional.dtd)叫文档类型定义,里面包含了文档的规则,浏览器就根据你定义的DTD来解释你页面的标识,并展现出来。

要建立符合标准的网页,DOCTYPE声明是必不可少的关键组成部分;除非你的XHTML确定了一个正确的DOCTYPE,否则你的标识和CSS都不会生效。

XHTML 1.0 提供了三种DTD声明可供选择:
过渡的(Transitional):要求非常宽松的DTD,它允许你继续使用HTML4.01的标识(但是要符合xhtml的写法)。

完整代码如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"/TR/xhtml1/DTD/xhtml1-transitional.dtd">
严格的(Strict):要求严格的DTD,你不能使用任何表现层的标识和属性,例如<br>。

完整代码如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"/TR/xhtml1/DTD/xhtml1-strict.dtd">
框架的(Frameset):专门针对框架页面设计使用的DTD,如果你的页面中包含有框架,需要采用这种DTD。

完整代码如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"
"/TR/xhtml1/DTD/xhtml1-frameset.dtd">
我们选择什么样的DOCTYPE
理想情况当然是严格的DTD,但对于我们大多数刚接触web标准的设计师来说,过渡的DTD(XHTML 1.0 Transitional)是目前理想选择(包括本站,使用的也是过渡型DTD)。

因为这种DTD还允许我们使用表现层的标识、元素和属性,也比较容易通过W3C的代码校验。

注:上面说的"表现层的标识、属性"是指那些纯粹用来控制表现的tag,例如用于排版的表格、背景颜色标识等。

在XHTML中标识是用来表示结构的,而不是用来实现表现形式,我们过渡的目的是最终实现数据和表现相分离。

打个比方:人体模特换衣服。

模特就好比数据,衣服则是表现形式,模特和衣服是分离的,这样你就可以随意换衣服。

而原来HTML4中,数据和表现是混杂在一起的,要一次性换个表现形式非常困难。

呵呵,有点抽象了,这个概念需要我们在应用过程中逐步领会。

补充
DOCTYPE声明必须放在每一个XHTML文档最顶部,在所有代码和标识之上。

相关文档
最新文档