JSPX: выходной DOCTYPE только с открытым идентификатором - PullRequest
1 голос
/ 05 октября 2011

Я хочу вывести следующий спецификатор DOCTYPE с помощью jspx:

<!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). Я не хочу включать идентификатор SYSTEM, содержащий URI DTD (в данном случае doctype-system = "http://www.w3.org/TR/html4/loose.dtd"), потому что это воспроизводимо заставляет браузеры (Firefox и Chrome) отображать страницу по-разному (или вообще не отображать).

1 Ответ

3 голосов
/ 14 октября 2018

Re: вопрос Гаррета Уилсона: «Так как мне вывестидля HTML 5 с синтаксисом документа JSP (JSPX)?Это вообще возможно? "

Это может быть сделано с 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 позволяют автору страницы указывать, что DOCTYPE будет автоматически генерироваться в прологе XML вывода. Без этих свойств DOCTYPEпотребуется выводить вручную через элемент <jsp:text> перед корневым элементом документа JSP, что неудобно.

DOCTYPE должен автоматически выводиться тогда и только тогда, когда в переводе появляется элемент doctype-systemединица как часть действия <jsp:output>. doctype-root-element должен появляться и должен появляться только в том случае, если появляется свойство doctype-system или возникает ошибка перевода. Свойство doctype-public является необязательным, но не должно появляться, если не указано *Появляется свойство 1021 *, или должна произойти ошибка перевода.

Пока кто-нибудь не попросит комитет по спецификации о большей гибкости здесь, и не выйдет новая версия спецификации, это все, что у нас есть.

Пример использования 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>
...