gpt4 book ai didi

java - 如何用应用程序上下文配置文件替换 web.xml?

转载 作者:行者123 更新时间:2023-12-02 05:49:53 27 4
gpt4 key购买 nike

背景

我正在尝试在 Spring 中实现 Controller 的集成测试。我不想想要使用WebApplicationInitializer(Spring 的 Java 配置)来运行我的 Web 应用程序。我想使用基于 xml 的配置。但是,@ContextConfiguration 无法加载 web.xml,因此我创建了 application-context.xml。问题是 web.xmlapplication-context.xml 具有相同的目的,

问题

我可以删除 web.xml 以支持 application-context.xml 吗?如果我删除 web.xml,测试会通过,但 Web 应用程序不会在 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>

最佳答案

您需要了解的是web.xmlapplication-context.xml有两个完全不同的目的。

第一个用于配置应用程序以在 servlet 容器中运行,而第二个用于提供 Spring 配置。 web.xml当容器支持 servlet 规范 3.0 或更高版本时,当然可以替换为基于 Java 的配置。

当运行 Spring MVC 测试以测试 Spring Controller 时,web.xml根本没有使用,因为测试不是在 servlet 容器中运行,因为测试框架模拟了所有依赖项。您可以轻松地对通过的代码进行 Spring MVC 测试,但没有 web.xml如果您处于 TDD 环境中,则完全可以。

总之,web.xml 解决的问题和application-context.xml是正交的,可以使用其中之一而无需关心另一个。

还要澄清一下,web.xml 提供的配置或WebApplicationInitializer application-context.xml 中无法提供替代方案

关于java - 如何用应用程序上下文配置文件替换 web.xml?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23661878/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com