Требуется ли портлетам 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 требует этого или как они ведут себя, если он отсутствует, это еще одна история.

Другие вопросы по тегам