我想用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) <jsp:output>: '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)以不同方式呈现页面(或根本不呈现)。
答案 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-element
,doctype-system
和doctype-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><!DOCTYPE html></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>