Требуется ли портлетам JSR-286 файл web.xml в их файлах WAR?
Требует ли спецификация JSR 286 наличия web.xml
файл в WAR, содержащий портлеты? Сначала я так и думал, но потом создал портлет без web.xml
развернул его в Liferay и он работал без нареканий. Так это расширение (или ошибка) Liferay, или нет необходимости иметь такой файл?
2 ответа
Как правильно сказал Олаф, портлет - это не что иное, как веб-приложение. Liferay имеет прослушиватель, который запускается при автоматическом развертывании портлета. Он взрывает войну и добавляет web.xml и необходимый контент. Вы можете проверить логику, если у вас есть источник. Имя класса - PortletDeployer, а метод - getServletContent. После добавления файла web.xml и его заполнения они просто касаются его с помощью FileUtil.touch.
Мне бы действительно пришлось покопаться в спецификации, но я предполагаю, что она соответствует спецификации сервлета в этом отношении: приложение с портлетами в первую очередь развертывается на сервере приложений. Если спецификация сервлета требует наличия файла web.xml, это требование должно быть выполнено. В противном случае Appserver не развернет WAR (более или менее вопрос, если формат файла WAR требует или рекомендует web.xml
Liferay включится только после того, как Apperver развернет веб-приложение. Самому Liferay нет дела до web.xml
Основываясь на этом утверждении (и не глядя на спецификацию - поэтому я даю обоснованное предположение здесь), я ожидаю, что JSR 286 не сделает заявление о web.xml. Тем не менее, он, вероятно, ссылается на спецификацию сервлета, а это, в свою очередь, может потребовать / рекомендует / упоминание web.xml.
И если Appservers требует этого или как они ведут себя, если он отсутствует, это еще одна история.