В Eclipse + Glassfish v3 нет файла web.xml? - PullRequest
8 голосов
/ 24 февраля 2011

Я создал простой сервлет "hello world" в Eclipse (helios) + Glassfish v3. Я использую плагин Glassfish для затмения. Кажется, что в папке WEB-INF / нет web.xml, а есть sun-web.xml. Это мой первый раз с Glassfish, но я был немного удивлен отсутствием web.xml - вот некоторые из проблем:

  1. Где я могу проверить отображение URL для сервлета? При создании нового сервлета в Eclipse он запрашивает сопоставление URL-адреса, но я не могу найти его где-либо в любом XML-файле, где я могу настроить параметры.
  2. Если нет файла web.xml, создание его с нуля будет весьма подвержено ошибкам. Что ты предлагаешь? Google для образца и тренироваться? Разве нельзя создавать автоматически?
  3. Кто-нибудь сталкивался с этим? Я попытался найти разницу между web.xml и sun-web.xml, но результаты не были поразительными. Я не хотел бы изучать другой xml для целей конфигурации, и это слишком специфично для Glassfish.

Мы должны настроить контексты сервлетов, отображения и т. Д., Особенно во время разработки / тестирования, но полное отсутствие файла web.xml поставило меня в тупик.

Ответы [ 5 ]

12 голосов
/ 24 февраля 2011

Eclipse позволяет вам не создавать файл web.xml при создании Dynamic Web Project для Java EE 6, поскольку спецификация Java EE 6 (в целом) и Servlet 3.0 (в частности) пытаются де-акцентировать дескрипторы развертывания.

Вы можете использовать аннотацию для предоставления всех данных, которые были включены в файл web.xml. Javadoc для аннотаций Servlet 3.0 довольно тупой.Вы должны прочитать спецификацию Servlet 3.0 с сайта jcp.org , чтобы получить немного больше пояснительного текста.

Чтобы изменить отображение URL для сервлета Servlet 3.0, в первую очередьсмотрите в исходном коде для сервлета.Найдите (и измените) значение элемента urlPatterns.

Если вы пытаетесь создать веб-приложение на основе Servlet 3.0, старайтесь избегать создания файла web.xml.

Файл sun-web.xml / glassfish-web.xml используется для «завершения» описания файла war для развертывания в контейнере GlassFish.

Еще одно замечание о аннотациях, таких как WebServlet ... они делаютне интегрируйте аннотированный класс в иерархию классов, поэтому правильное использование @WebServlet будет выглядеть так:

@WebServlet(
    name = "MyServlet", 
    urlPatterns = {"/path_to_servlet"}
)
public class MyServlet extends HttpServlet {}
10 голосов
/ 25 мая 2012

Если вы обнаружите, что вам нужен файл web.xml, вы можете щелкнуть по контексту дескриптора развертывания в представлении Project Explorer, и там должна быть опция «Создать заглушку дескриптора развертывания». Это создаст для вас web.xml с элементами display-name и welcome-file-list.

4 голосов
/ 24 февраля 2011

Кажется плохой привычкой нажимать «Готово», когда вы создаете «Новый> Динамический веб-проект». Вы должны продолжать нажимать «Далее» и переходить на последнюю оконную панель, где вы выбираете «создать развертывание web.xml». дескриптор "- кажется, по умолчанию он не отмечен.

Ну, это говорит о том, что я немного заржавел от создания веб-приложений. И тут я подумал, что это особая проблема стеклянной рыбы.

3 голосов
/ 24 февраля 2011

Поскольку Glassfish 3.x является полностью сертифицированным сервером Java EE 6, он поддерживает Servlets 3.0. Начиная с Servlets 3.0, можно задавать настройки web.xml с помощью аннотаций.

Например

@WebServlet(
    name = "MyServlet", 
    urlPatterns = {"/path_to_servlet"}
)
public class MyServlet {}
0 голосов
/ 25 сентября 2012

В дополнение к тому, что сказал TMN, я заметил, что проводник проекта не будет показывать дескриптор развертывания, пока я по какой-то причине не выполню обновление SVN. Если у вас возникла эта проблема, попробуйте обновить код. Я уже был на ревизии HEAD, но по какой-то причине обновление показало это представление.

...