jspx:仅输出带有PUBLIC标识符的DOCTYPE

时间:2011-10-05 01:10:48

标签: html tomcat6 jspx

我想用jspx输出以下DOCTYPE说明符:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

这似乎是不可能的。我试过的是:

<jsp:output doctype-root-element="HTML" doctype-public="-//W3C//DTD HTML 4.01 Transitional//EN" />

...导致:

org.apache.jasper.JasperException: /WEB-INF/layouts/fittopage.jspx(3,100) &lt;jsp:output&gt;: 'doctype-root-element' and 'doctype-system' attributes must appear together

(我正在使用Tomcat 6.0)。我不想包含一个包含DTD URI的SYSTEM标识符(在本例中为doctype-system =“http://www.w3.org/TR/html4/loose.dtd”),因为它可重复地导致浏览器(Firefox和Chrome)以不同方式呈现页面(或根本不呈现)。

1 个答案:

答案 0 :(得分:3)

Re:Garret Wilson的问题:“那么,如何使用JSP文档(JSPX)语法为HTML 5输出<!DOCTYPE html>?甚至有可能吗?”

这可以通过jsp:text完成。 (无法使用jsp:output完成。)

JSP规范的当前版本是JavaServer Pages规范版本2.3。 (在当前的Java EE 8(Tomcat 9.x)和以前的Java EE 7(Tomcat 8.x)中实现)。引用JSP.5.6一章的“ ”:

  

页面属性doctype-root-elementdoctype-systemdoctype-public允许页面作者指定在输出的XML序言中自动生成DOCTYPE。如果没有这些属性,则需要通过JSP文档根元素之前的<jsp:text>元素来手动输出DOCTYPE。

     

仅当doctype-system时,必须自动输出DOCTYPE   元素作为<jsp:output>动作的一部分出现在翻译单元中。 doctype-root-element必须出现,并且仅在出现doctype-system属性时出现,否则必须发生翻译错误。 doctype-public属性是可选的,但是除非出现doctype-system属性,否则必须出现,否则必须出现翻译错误。

直到有人要求规格委员会提供更大的灵活性,然后出现新版本的规格,这就是我们所拥有的全部。

使用jsp:text的示例:

<?xml version="1.0" encoding="UTF-8" ?>
<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.3">
   <jsp:directive.page contentType="text/html" />
   <jsp:text>&lt;!DOCTYPE html&gt;</jsp:text>
   <html lang="en">
     <head>
       <meta charset="${pageContext.response.characterEncoding}"/>
       <title>Hello world</title>
     </head>
     <body>
       <h1>Hello world!</h1>
     </body>
   </html>
</jsp:root>