Java SpringMVC测试框架:为什么';t测试调度器servlet

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测试有效 代码:

我得到了:平凡的Spring MVC示例应用程序。我将
DispatcherServlet
配置为处理以
dispatcher/
开头的所有请求

问题:部署到Tomcat后,如果我尝试转到
localhost:8080
页面,我会得到
请求的资源(/)不可用。
。但我可以通过
localhost:8080/dispatcher
路径

问题:

  • 如果我们使用
    mockMvc.perform(get(“/”)
    而不是
    mockMvc.perform(get(“/dispatcher”)
    ,那么为什么
    simple
    测试有效
  • 代码:

    web.xml:

    测试:


    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定义)
  • 您的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路径中的大量信息。例如,您的
    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"));
    }