Как заменить web.xml файлами конфигурации контекста приложения?
Фон
Я пытаюсь реализовать интеграционный тест для контроллера весной. Я не хочу использовать WebApplicationInitializer
(Конфигурация Java для Spring) для запуска моего веб-приложения. Я хочу использовать конфигурации на основе XML. Тем не мение, @ContextConfiguration
не мог загрузить web.xml
так я и создал application-context.xml
, Проблема в web.xml
а также application-context.xml
служат той же цели,
Вопрос
Могу ли я удалить web.xml
в пользу application-context.xml
? Если я удалю web.xml
тест пройдёт, но веб-приложение не будет работать в Tomcat.
коды
Это мой тестовый класс:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"file:path/to/application-context.xml"})
@WebAppConfiguration
public class HelloControllerIntegrationTest {
@Autowired
private WebApplicationContext context;
private WebClient webClient;
@Before
public void setup() throws Exception {
MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(context).build();
webClient = new WebClient();
webClient.setWebConnection(new MockMvcWebConnection(mockMvc));
}
@Test
public void testPrintWelcome() throws Exception {
// I'm trying to print out the page for now
UnexpectedPage welcomePage = webClient.getPage("http://localhost/");
InputStream is = welcomePage.getInputStream();
java.util.Scanner s = new java.util.Scanner(is).useDelimiter("\\A");
String a = s.hasNext() ? s.next() : "";
System.out.println(a);
}
}
Это мое application-context.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.2.xsd">
<mvc:annotation-driven/>
<mvc:default-servlet-handler/>
<context:component-scan base-package="com.company.controller"/>
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/pages/"/>
<property name="suffix" value=".jsp"/>
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
</bean>
</beans>
1 ответ
Что вам нужно понять, так это web.xml
а также application-context.xml
служить двум совершенно различным целям.
Первый используется для настройки приложения для запуска в контейнере сервлета, а второй - для настройки Spring. web.xml
конечно, может быть заменен конфигурацией на основе Java, когда контейнер поддерживает спецификацию сервлета 3.0 или новее.
При запуске теста Spring MVC для проверки контроллера Spring, web.xml
не используется вообще, так как тест не выполняется в контейнере сервлета, потому что тестовая среда макетирует все зависимости. Вы могли бы легко иметь Spring MVC тесты для кода, который проходит, но не имеет web.xml
вообще, если вы находитесь в среде TDD.
В заключение, проблемы, решаемые web.xml
а также application-context.xml
являются ортогональными, и один может использоваться, не заботясь о другом.
Также, чтобы уточнить, конфигурация предоставлена web.xml
или WebApplicationInitializer
альтернатива не может быть предоставлена в application-context.xml