Java SpringMVC测试框架:为什么';t测试调度器servlet
我得到了:平凡的Spring MVC示例应用程序。我将Java SpringMVC测试框架:为什么';t测试调度器servlet,java,spring,spring-mvc,Java,Spring,Spring Mvc,我得到了:平凡的Spring MVC示例应用程序。我将DispatcherServlet配置为处理以dispatcher/开头的所有请求 问题:部署到Tomcat后,如果我尝试转到localhost:8080页面,我会得到请求的资源(/)不可用。。但我可以通过localhost:8080/dispatcher路径 问题: 如果我们使用mockMvc.perform(get(“/”)而不是mockMvc.perform(get(“/dispatcher”),那么为什么simple测试有效 代码:
DispatcherServlet
配置为处理以dispatcher/
开头的所有请求
问题:部署到Tomcat后,如果我尝试转到localhost:8080
页面,我会得到请求的资源(/)不可用。
。但我可以通过localhost:8080/dispatcher
路径
问题:
mockMvc.perform(get(“/”)
而不是mockMvc.perform(get(“/dispatcher”)
,那么为什么simple
测试有效在
web.xml
中映射通配符条目
mvc调度器
/*
它将把所有传入的请求传递到
web.xml
映射通配符条目中的dispatcher servlet
mvc调度器
/*
它将把所有传入的请求传递到
web.xml
映射通配符条目中的dispatcher servlet
mvc调度器
/*
它将把所有传入的请求传递到
web.xml
映射通配符条目中的dispatcher servlet
mvc调度器
/*
它将把所有传入的请求传递给DispatcherServlet
问题:部署到Tomcat后,如果我尝试转到localhost:8080
获取请求的资源(/)的页面不可用。。但我可以去
通过localhost:8080/dispatcher路径
从Servlet容器的角度访问控制器—键入localhost:8080/dispatcher时所做的操作—需要url路径中的大量信息。例如,您的HelloController
是
mvc dispatcher
Servlet处理mvc dispatcher
Servlet在web应用程序中声明(由web.xml定义)mvc dispatcher
强制执行所有操作,并将其映射到/*作为默认值,最终从localhost:8080/
为您的HelloController提供服务
如果我们使用mockMvc.perform(get(“/”),为什么简单测试可以工作
是mockMvc.perform(get(“/dispatcher”)
在测试中从mockMvc访问控制器是相当本地化的。根据测试的设置方式,MockMvc实例可以通过以下方式创建:
MockMvcBuilders.standaloneSetup(controller)-在这里,您的控制器直接传递给测试进行测试,因此MockMvc对mvc调度程序及其“/dispatcher”路径一无所知
MockMvcBuilders.webAppContextSetup(webApplicationContext)-在这里,测试类用指向“mvc dispatcher”xml或@Configuration类的@ContextConfiguration
注释。在这种情况下,MockMvc将处理“mvc dispatcher”下本地化的所有内容,因此无需在路径中引用“dispatcher”
问题:部署到Tomcat后,如果我尝试转到localhost:8080
获取请求的资源(/)的页面不可用。。但我可以去
通过localhost:8080/dispatcher路径
从Servlet容器的角度访问控制器—键入localhost:8080/dispatcher时所做的操作—需要url路径中的大量信息。例如,您的HelloController
是
配置为由mvc dispatcher
Servlet处理
mvc dispatcher
Servlet在web应用程序中声明(由web.xml定义)
您的web应用程序中可能有多个servlet
web应用程序部署到Servlet容器(Tomcat)中
Servlet容器中可能有多个web应用程序
当你考虑到这一切时,在解析一个url时会有很多模糊性。正如@san krish所指出的,假设您已经将应用程序部署到Tomcat的根上下文中,您可以通过mvc dispatcher
强制执行所有操作,并将其映射到/*作为默认值,最终从localhost:8080/
为您的HelloController提供服务
如果我们使用mockMvc.perform(get(“/”),为什么简单测试可以工作
是mockMvc.perform(get(“/dispatcher”)
在测试中从mockMvc访问控制器是相当本地化的。根据测试的设置方式,MockMvc实例可以通过以下方式创建:
MockMvcBuilders.standaloneSetup(controller)-在这里,您的控制器直接传递给测试进行测试,因此MockMvc对mvc调度程序及其“/dispatcher”路径一无所知
MockMvcBuilders.webAppContextSetup(webApplicationContext)-在这里,测试类用指向“mvc dispatcher”xml或@Configuration类的@ContextConfiguration
注释。在这种情况下,MockMvc将处理“mvc dispatcher”下本地化的所有内容,因此无需在路径中引用“dispatcher”
问题:部署到Tomcat后,如果我尝试转到localhost:8080
获取请求的资源(/)的页面不可用。。但我可以去
通过localhost:8080/dispatcher路径
从Servlet容器的角度访问控制器—键入localhost:8080/dispatcher时所做的操作—需要url路径中的大量信息。例如,您的He
<servlet>
<servlet-name>mvc-dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>mvc-dispatcher</servlet-name>
<url-pattern>/dispatcher/*</url-pattern>
</servlet-mapping>
@Controller
@RequestMapping("/")
public class HelloController {
@RequestMapping(method = RequestMethod.GET)
public String printWelcome(ModelMap model) {
model.addAttribute("message", "Hello world!");
return "hello";
}
}
@Test
public void simple() throws Exception {
mockMvc.perform(get("/"))
.andExpect(status().isOk())
.andExpect(model().attribute("message", "Hello world!"))
.andExpect(view().name("hello"));
}