Мне действительно нужен web.xml для веб-приложения Java на основе сервлета?

Я не работал над реальными веб-проектами. В университете мы использовали как сервлеты, так и Spring для веб-разработки на Java. В обоих проектах нам были предоставлены уже настроенные файлы web.xml, и мы вносили в них лишь незначительные изменения. Теперь мне нужно создать веб-приложение с нуля. Я создал новый класс Servlet в Eclipse, и он не создал автоматически никакого web.xml. Затем я погуглил и прочитал на нескольких ресурсах, что web.xml на самом деле не нужен, но это рассуждение было изложено в нескольких предложениях, поэтому я не уверен, что использование аннотаций вместо web.xml не будет проблемой. Я буду очень рад, если нет необходимости настраивать web.xml, потому что я не настраивал его сам и хочу больше сосредоточиться на бизнес-логике.

Заранее спасибо!


person giliev    schedule 15.05.2015    source источник
comment
Если вы используете Spring, вы вряд ли вообще будете писать какие-либо сервлеты.   -  person biziclop    schedule 15.05.2015
comment
Поскольку спецификация сервлета 3 (IIRC) больше не нужна web.xml.   -  person fge    schedule 15.05.2015
comment
тем не менее, в зависимости от того, какой сервер приложений он в конечном итоге будет использовать, и в какой степени он хочет использовать Spring OP, он будет обречен писать не только web.xml, но и другие файлы xml. web.xml — один из самых простых.   -  person BigMike    schedule 15.05.2015
comment
@BigMike Вы не использовали Spring с версии 2.5, не так ли?   -  person chrylis -cautiouslyoptimistic-    schedule 15.05.2015
comment
@chrylis да, и я все еще немного травмирован количеством раздутого бесполезного, сложного и неубедительного xml-дерьма, которое мне пришлось использовать. Если упростили, то хорошо.   -  person BigMike    schedule 15.05.2015
comment
@BigMike Тогда ты делал это неправильно. Единственный Spring XML, который у меня есть, предназначен для Web Flow, определения конечных автоматов и планов интеграции, которые очень понятны в XML.   -  person chrylis -cautiouslyoptimistic-    schedule 15.05.2015
comment
@chrylis не может этого исключить, никогда не пользовалась им до этого времени, и вы знаете, все должно было быть готово быстро, не было времени углубляться. Впечатление осталось, слишком много настроек вкупе с неорганизованной документацией. Надеюсь, они улучшили его, и если мне понадобится использовать его снова, я углублюсь в него.   -  person BigMike    schedule 15.05.2015
comment
настройка web.xml (копирование и настройка сервлета) - это не то, что я бы назвал большой работой. вы просто берете базовую настройку и адаптируете ее максимум за 5 минут.   -  person Joeblade    schedule 15.05.2015
comment
@BigMike - не волнуйтесь, со временем все всегда будет усложняться :) создание синтаксического сахара, чтобы скрыть сложность, - это здорово, просто вам нужно выучить еще одну вещь.   -  person ZhongYu    schedule 15.05.2015
comment
@bayou.io Я искренне на это надеюсь, я искал просто MVC-фреймворк, и до сих пор ни один меня полностью не удовлетворил, есть хорошие, но часто они слишком сложны для работы, которую мы должны делать. В то же время у нас есть ASP.NET MVC, который идеально подходит для этой роли. Интересно, почему аналоги Java де-факто настолько сложны.   -  person BigMike    schedule 15.05.2015


Ответы (7)


Вам не нужен файл web.xml, если у вас есть контейнер, поддерживающий последние спецификации j2ee. Здесь — это ссылка на пример простого сервлета, в котором используется аннотация и здесь вы можете найти то же самое для Spring MVC; Я размещаю пример здесь для вашего удобства

public class MyWebApplicationInitializer implements WebApplicationInitializer {

    @Override
    public void onStartup(ServletContext container) {
        ServletRegistration.Dynamic registration = container.addServlet("dispatcher", new DispatcherServlet());
        registration.setLoadOnStartup(1);
        registration.addMapping("/example/*");
    }

}

Вот еще одна ссылка, показывающая, как использовать другие доступные аннотации(@ServletFilter, @ прослушиватель контекста веб-сервера); вы можете загрузить форму спецификаций здесь чтобы получить более подробное представление об аннотациях, доступных через j2ee.

person Giovanni    schedule 15.05.2015
comment
Последняя спецификация называется Java EE. J2EE был исключен с 2006 года. - person Utku; 21.06.2017

Начиная с Servlet 3, файл web.xml не требуется. Вы захотите использовать что-то вроде Tomcat 7 или 8 (лучший выбор). Для необработанных сервлетов это хорошая отправная точка.

Если вы хотите использовать современный Spring, Grails 3 — отличный вариант. Он обходит стороной все эти проблемы, и Grails является очень продуктивной средой для веб-разработки. Вы можете думать об этом как о Ruby on Rails, созданном поверх Spring и Hibernate.

На этом этапе вам не нужно писать какой-либо файл web.xml для настройки, если только вы не используете платформу, которая в этом нуждается. Я не знаю о Spring MVC, но Grails не требует от вас этого, и он использует большую часть того, к чему вы уже привыкли.

person Mike Thomsen    schedule 15.05.2015
comment
Привет, но если мы не используем xml, тогда может быть какая-то внутренняя реализация того, как действия привязываются к сервлетам. Где это? - person Vikram Saini; 10.08.2017
comment
@VikramSaini, привязка действий к сервлетам теперь выполняется в аннотациях, как здесь: docs.spring.io/spring-boot/docs/1.5.8.RELEASE/reference/ - person Sorin Postelnicu; 27.10.2017

Другой способ (Весна 3.1+) -

Реализация абстрактного базового класса WebApplicationInitializer с именем AbstractDispatcherServletInitializer еще больше упрощает регистрацию DispatcherServlet, просто переопределяя методы для указания сопоставления сервлета и расположения конфигурации DispatcherServlet.

public class MyWebAppInitializer extends AbstractDispatcherServletInitializer {

    @Override
    protected WebApplicationContext createRootApplicationContext() {
        return null;
    }

    @Override
    protected WebApplicationContext createServletApplicationContext() {
        XmlWebApplicationContext cxt = new XmlWebApplicationContext();
        cxt.setConfigLocation("/WEB-INF/spring/dispatcher-config.xml");
        return cxt;
    }

    @Override
    protected String[] getServletMappings() {
        return new String[] { "/" };
    }

}
person Aniket Thakur    schedule 26.01.2016

Нужен ли вам файл web.xml, зависит от того, какую спецификацию сервлета вы указываете в своем приложении. Если вы будете создавать приложение с использованием спецификации 3.0, вы можете использовать аннотации для объявления своих сервлетов и развертывания их в контейнере без необходимости в файле web.xml. Это было сделано в рамках JSR-315.

person Chris    schedule 15.05.2015

Здесь я нашел пример веб-приложения без использования файла дескриптора развертывания (web.xml). Единственный момент, который следует учитывать, это то, что это будет работать с последними версиями tomcat> = 7.0.

Посетите http://java-demos.blogspot.com/2014/01/servlet-web-application-without-webxml.html

Посетите https://www.baeldung.com/java-web-app-without-web-xml

person Vimal Panchal    schedule 24.03.2019

Используйте Spring Boot, который будет управлять контейнером и всей стандартной конфигурацией за вас. Вы можете создать готовый к запуску скелет с помощью Initializr.

person chrylis -cautiouslyoptimistic-    schedule 15.05.2015

Нет, web.xml для servlet based application не понадобится, если вы используете версии сервлетов >3.0 и tomcat 7, так как они не будут работать в предыдущих версиях tomcat.

Аннотация представляет собой метаданные. Если вы используете аннотацию, дескриптор развертывания (файл web.xml) не требуется. Посмотрите здесь все доступные аннотация.

person Naman    schedule 15.05.2015