2015-06-06 2 views
-1

Весеннее веб-приложение - это просто обычное веб-приложение, использующее сервлет API 3.0.
В файле сервлета API 3.0 web.xml необязательно (в большинстве случаев). Я старался не включать web.xml внутри моей утилиты Spring, но почему-то это требуется даже при использовании Servlet 3.0web.xml требуется в приложениях Spring

Единственная разница между приложениями Spring и веб-приложениями, которые я успешно выполнил без написания веб-страниц .xml, это то, что в Spring фильтры и сервлеты определены внутри jars в папке lib.

Любые подсказки, почему это происходит?

+0

«как-то кажется необходимым». Это очень расплывчато. Работает ли он без 'web.xml'? Если нет, вы получите сообщение об ошибке? –

ответ

2

Вы не можете просто исключить web.xml, так как вам (по крайней мере) необходимо определить, какую версию API сервлета вы используете.

В минимуме, вы должны были бы это в web.xml:

<web-app xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
    version="3.0"> 

Все остальное (сервлеты, фильтры и т.д.) могут быть сконфигурированы с аннотациями.

0

К счастью, вы можете создавать полностью свободные от XML приложения Spring в наши дни. Существуют различные варианты для таких конфигураций с Spring Boot или без него.

С чистой родниковой вы можете использовать AbstractAnnotationConfigDispatcherServletInitializer

С весны Ботинок, вы можете иметь SpringBootServletInitializer.

Это мой Github repository с кучей проектов на основе обоих подходов.

Версия сервлетов определяется сервлет-API, который у вас есть на пути к классу. Например .:

<dependency> 
    <groupId>org.glassfish</groupId> 
    <artifactId>javax.servlet</artifactId> 
    <version>3.0</version> 
    <scope>provided</scope> 
</dependency> 

или

<dependency> 
    <groupId>javax.servlet</groupId> 
    <artifactId>javax.servlet-api</artifactId> 
    <version>3.1.0</version> 
    <scope>provided</scope> 
</dependency> 

Вы также не уточняют сервлеты, поскольку Spring имеет собственную реализацию сервлета DispatcherServlet.

Фильтры регистрируются как фасоль в контексте Spring.

Смежные вопросы