Предстои ми да избера начин да организирам изгледа си (с spring-mvc, но това не би трябвало да има голямо значение)
Има 6 опции, доколкото виждам (въпреки че не се изключват взаимно):
- Плочки
- Sitemesh
- Freemarker
- Скорост
<jsp:include>
<%@ include file="..">
Плочки и Sitemesh могат да бъдат групирани; както и Freemarker и Velocity. Кой във всяка група да се използва не е въпрос на тази дискусия, има достатъчно въпроси и дискусии за това.
Това е интересно четиво, но може да не ме убеди да използвам плочки.
Въпросът ми е - какво дават тези рамки, което не може да се направи правилно с <@ include file="..">
и JSTL. Основни точки (някои взети от статията):
Включително части от страници, като горен и долен колонтитул – няма разлика между:
<%@ include file="header.jsp" %>
и
<tiles:insert page="header.jsp" />
Дефиниране на параметри в заглавката - като заглавие, мета тагове и т.н. Това е много важно, особено от гледна точка на SEO. С опциите за шаблони можете просто да дефинирате контейнер, който всяка страница трябва да дефинира. Но за да можете в jsp с JSTL, като използвате
<c:set>
(във включващата страница) и<c:out>
(във включената страница)Реорганизация на оформлението - ако искате да преместите навигационния път над менюто или полето за вход над друг страничен панел. Ако включванията на страници (с jsp) не са добре организирани, може да се наложи да промените всяка отделна страница в такива случаи. Но ако оформлението ви не е прекалено сложно и поставяте обичайните неща в горния/долния колонтитул, няма за какво да се притеснявате.
Свързване между общите компоненти и конкретното съдържание – не намирам проблем в това. Ако искате да използвате повторно някой фрагмент, преместете го на страница, която не включва горен/долен колонтитул, и го включете където е необходимо.
Ефективност -
<%@ include file="file.jsp" %>
е по-ефективен от всичко друго, защото се компилира веднъж. Всички други опции се анализират/изпълняват много пъти.Сложност – всички не-jsp решения изискват допълнителни xml файлове, допълнителни включвания, предпроцесорни конфигурации и т.н. Това е както крива на обучение, така и въвеждане на повече потенциални точки на неуспех. Освен това прави поддръжката и промяната по-досадни - трябва да проверите редица файлове/конфигурации, за да разберете какво се случва.
Заместители - velocity/freemarker дават ли нещо повече от JSTL? В JSTL поставяте контейнер и използвате модела (поставен в обхвата на заявка или сесия, от контролери), за да попълните тези контейнери.
Така че, убеди ме, че трябва да използвам някоя от горните рамки вместо/в допълнение към обикновен JSP.