【问题标题】:jspx: output DOCTYPE with only a PUBLIC identifierjspx:输出 DOCTYPE 只有一个 PUBLIC 标识符
【发布时间】:2011-10-05 01:10:48
【问题描述】:

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

【问题讨论】:

  • 该网站显然最初是在 MSIE 中开发/设计的,但文档类型错误?我强烈,强烈建议使用真正的严格/标准模式文档类型,例如&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"&gt;,而不是怪癖模式文档类型(以便它在所有浏览器中看起来至少相同)并相应地修复 CSS 问题。另见hsivonen.iki.fi/doctype
  • 嗯,不是 IE(我们现在甚至不支持它),但它是一个随着时间的推移而发展起来的网站,大量使用 Javascript (dojo),而且不能在一夜之间改变。事实仍然是,该站点使用所述唯一的 PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 声明正确呈现,并且根本不使用严格声明或添加到声明的系统 dtd 呈现。拥有一个只包含一个 PUBLIC 标识符的 DOCTYPE 声明显然是合法的,所以我想知道为什么 jspx 不支持它(或者支持它?)。
  • 我不是 JSPX 专家,但请尝试指定一个空值 doctype-system=""
  • @BalusC 的建议在 Tomcat 9 上对我有用。
  • 起初我认为@BalusC 的建议在Tomcat 9 上对我有用,但它实际上产生了SYSTEM "",这是我不想要的。 :(

标签: html tomcat6 jspx


【解决方案1】:

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

这可以通过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 "":

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

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

【讨论】:

  • 这是一个快速响应和完整的答案!看起来不错。正是我想要的。感谢您清除它。不幸的是,看起来 JSP XML 格式并没有比我 15 年前最后一次使用它时更有帮助。
  • 我发现有趣的是,如果我离开 &lt;jsp:root&gt; 并将命名空间放在 &lt;html&gt; 上(下面有指令),输出会输出一个 &lt;?xml version="1.0" encoding="UTF-8" ?&gt; 我没有不想要多语种文档。所以我想我坚持使用&lt;jsp:root&gt;,我想这没问题。
  • 既然你在这里提供了这么好的答案,你也可以考虑看看我的另一个问题:stackoverflow.com/q/52819348/421049
猜你喜欢
  • 2011-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-08
  • 1970-01-01
  • 2012-03-19
  • 1970-01-01
  • 2022-07-06
相关资源
最近更新 更多