1

我想用 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)以不同的方式呈现页面(或根本不呈现)。

4

1 回答 1

3

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

这可以通过jsp:text. (不能用 来完成jsp:output)。

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

doctype-root-element和属性允许页面作者指定在输出doctype-systemdoctype-publicXML 序言中自动生成 DOCTYPE。如果没有这些属性,则需要通过<jsp:text>JSP 文档的根元素之前的元素手动输出 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>
于 2018-10-14T16:14:02.347 回答