У меня есть проект Java, работающий на Glassfish, который представляет некоторый ужасно выглядящий HTML. Это - побочный эффект от пользования различными внутренними и внешними библиотеками JSP. Я хотел бы настроить своего рода фильтр пострендеринга, который подаст заключительный HTML через HTMLTidy так, чтобы источник был хорош и аккуратен для помощи отладке. Действительно ли это возможно?
Существует ли созданный в механизме для выполнения некоторого действия после того, как сервер представит JSPs в HTML? То действие может получить сгенерированный HTML как строку и управлять им? Есть ли некоторая легкая встроенная опция сделать это без дополнительного кодирования?
Если вы можете изменить контрольный поток, чтобы вы получили выход HTML, прежде чем он вернутся в браузер, то JTIDY может помочь вам.
Я бы рассматривал это как худшее исправление, хотя. В долгосрочной перспективе тому, что должно помочь больше, - это отделить свой HTML-код генерации и рефакторов. Даже в крупных сложных проектах вы должны быть в состоянии сделать это на небольших частях, и вы получите постепенное улучшение. В противном случае, если ваши проблемы растут до такой степени, что опрятный не может помочь, вы вернетесь к тому, где вы начали (и с еще более ремнируемым кодом, чтобы иметь дело с).
Это поведение также может быть устранено в определенной степени путем установки свойства JSP 2.1 trimDirectiveWhitespaces
в true
. Это может быть включено в отдельных файлах JSP с помощью:
<%@page trimDirectiveWhitespaces="true" %>
Или во всех файлах JSP с помощью следующей записи в web.xml
(которая должна быть объявлена серветом 2.5!):
<jsp-config>
<jsp-property-group>
<url-pattern>*.jsp</url-pattern>
<trim-directive-whitespaces>true</trim-directive-whitespaces>
</jsp-property-group>
</jsp-config>
В файлах до версии JSP 2. 1 или в контейнерах JSP 2.1, которые на самом деле не поддерживают это по некоторым внутренним причинам, таким как Tomcat, вам необходимо обратиться к документации JspServlet
для любых параметров инициализации. Например Tomcat, вы можете настроить его также, установив trimSpaces
init-парамер JspServlet
в true
в Tomcat'е /conf/web.xml
:
<init-param>
<param-name>trimSpaces</param-name>
<param-value>true</param-value>
</init-param>
Следует отметить, что оба подхода на самом деле не "переформатируют" HTML-код. На самом деле, он только обрезает пробелы, которые оставляют тэги и скриплеты. Также смотрите эту статью о Sun. Так что, например, следующее...
<ul>
<c:forEach items="${list}" var="item">
<li>${item}</li>
</c:forEach>
</ul>
... в основном закончится в
<ul>
<li>item1</li>
<li>item2</li>
<li>item3</li>
</ul>
, таким образом, с двойным отступом. На самом деле, вы можете исправить это, переформатировав код таким образом, что JSP-тэги полу-индентифицированы:
<ul>
<c:forEach items="${list}" var="item">
<li>${item}</li>
</c:forEach>
</ul>
Но я думаю, что JTidyFilter здесь проще :)
.