Spring MVC - 找不到请求URI的映射?

Gmx*_*Gmx 5 java spring spring-mvc

我使用spring MVC遇到了一些问题这是我的web.xml配置

<!-- config spring -->
<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/classes/applicationContext.xml,
                /WEB-INF/classes/xfire-servlet.xml,
                /WEB-INF/classes/mvc-servlet.xml,
                classpath:org/codehaus/xfire/spring/xfire.xml
    </param-value>
</context-param>
<listener>
   <listener-class>
            org.springframework.web.context.ContextLoaderListener
   </listener-class>
</listener>
 <listener> 
   <listener-class>
            org.springframework.web.util.IntrospectorCleanupListener
   </listener-class>
</listener>
<!-- spring mvc -->
<servlet>
    <servlet-name>mvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>mvc</servlet-name>
    <url-pattern>*.do</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)

我的控制器正在关注

@Controller
@RequestMapping("/searchCase.do")
public class SearchCaseController {

      public String getCaseDetailInfo() {
           return "forward:caseDetail";
      }

}
Run Code Online (Sandbox Code Playgroud)

我的mvc配置是

<!--auto scan annotation -->
<context:component-scan base-package="com.thunisoft.shxt.webservice.model.searchCase.logic" />

<bean id="viewResolver"
    class="org.springframework.web.servlet.view.UrlBasedViewResolver">
    <property name="viewClass"
        value="org.springframework.web.servlet.view.JstlView" />
    <property name="prefix" value="/WEB-INF/jsp/case" />
    <property name="suffix" value=".jsp" />
</bean>
Run Code Online (Sandbox Code Playgroud)

然后我通过url请求:http:// {address:port}/{application-name} /searchCase.do,但它无法找到控制器来解决我的请求

 No handler found in getLastModified
 DispatcherServlet with name 'mvc' processing request for [/{application-name}/searchCase.do]
 No mapping found for HTTP request with URI [/{application-name}/searchCase.do] in DispatcherServlet with name 'mvc'
 Successfully completed request
Run Code Online (Sandbox Code Playgroud)

我的春季MVC版本是2.5.6我在等你的问题来帮我解决这个问题,谢谢!

Mas*_*ave 0

人们在评论中建议的内容就是文档所描述的内容

初始化 DispatcherServlet 后,Spring MVC 会在 Web 应用程序的 WEB-INF 目录中查找名为 [servlet-name]-servlet.xml 的文件,并创建其中定义的 bean,覆盖使用相同名称定义的任何 bean 的定义在全球范围内。

但是,通过使用配置

<init-param>
    <param-name>namespace</param-name>
    <param-value>mvc</param-value>
</init-param>
Run Code Online (Sandbox Code Playgroud)

您已覆盖此设置,因此 DispatherServlet 文件将查看以下位置

DEFAULT_CONFIG_LOCATION_PREFIX + getNamespace() + DEFAULT_CONFIG_LOCATION_SUFFIX
Run Code Online (Sandbox Code Playgroud)

所以在你的例子中,它将是

/WEB-INF/mvc.xml
Run Code Online (Sandbox Code Playgroud)

我根据您的评论看到您最初拥有正确的名称(对应于您的配置)。因此,要么您没有将其放在WEB-INF下,要么您的问题在其他地方。

话虽这么说,请考虑基于contextConfigLocation参数的替代配置(我认为更明确),例如

<servlet>
    <servlet-name>springMVC</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
  </servlet>

  <servlet-mapping>
    <servlet-name>springMVC</servlet-name>
        <url-pattern>*.do</url-pattern>
  </servlet-mapping>

  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/mvc-servlet.xml</param-value>
  </context-param>
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你