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

发布于 2024-12-08 04:12:00 字数 664 浏览 0 评论 0原文

我想用 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 的系统标识符(在本例中为 doctype-system="http://www.w3.org/TR/html4/loose.dtd"),因为这会重复导致浏览器(Firefox 和Chrome)以不同的方式呈现页面(或根本不呈现)。

I want to output the following DOCTYPE specifier with jspx:

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

This seems to be impossible. What I tried is:

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

...which results in:

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

(I'm using Tomcat 6.0). I don't want to include a SYSTEM identifier containing the DTD's URI (in this case doctype-system="http://www.w3.org/TR/html4/loose.dtd") because that reproducibly causes browsers (Firefox and Chrome) to render the page differently (or not at all).

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

迷鸟归林 2024-12-15 04:12:00

回复:Garret Wilson 的问题:“那么如何使用 JSP 文档 (JSPX) 语法输出 HTML 5 的 ?这可能吗?”

这可以通过 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 属性允许页面作者指定自动生成 DOCTYPE在输出的 XML 序言中生成。如果没有这些属性,则需要通过 JSP 文档的根元素之前的 元素手动输出 DOCTYPE,这很不方便。

当且仅当 doctype-system 时,DOCTYPE 必须自动输出
元素作为 操作的一部分出现在翻译单元中。 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>

Re: Garret Wilson's question: "So how do I output <!DOCTYPE html> for HTML 5 with the JSP document (JSPX) syntax? Is it even possible?"

This can be done with jsp:text. (It cannot be done with jsp:output).

The current version of JSP specification is JavaServer Pages Specification Version 2.3. (Implemented in current Java EE 8 (Tomcat 9.x) as well as previous Java EE 7 (Tomcat 8.x)). Quoting from chapter JSP.5.6 "<jsp:output\>":

The doctype-root-element, doctype-system and doctype-public properties allow the page author to specify that a DOCTYPE be automatically generated in the XML prolog of the output. Without these properties, the DOCTYPE would need to be output manually via a <jsp:text> element before the root element of the JSP document, which is inconvenient.

A DOCTYPE must be automatically output if and only if the doctype-system
element appears in the translation unit as part of a <jsp:output> action. The doctype-root-element must appear and must only appear if the doctype-system property appears, or a translation error must occur. The doctype-public property is optional, but must not appear unless the doctype-system property appears, or a translation error must occur.

Until somebody asks the specification committee for more flexibility here, and a new version of specification comes out, this is all that we have.

An example using 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>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文