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

时间:2014-12-15 07:06:21

标签: 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>

我的控制器正在关注

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

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

}

我的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>

然后我通过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

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

5 个答案:

答案 0 :(得分:3)

请更改控制器网址格式,如下所述

自从您在web.xml中配置

后,

.do将自动附加到所有控制器请求映射

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

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

}

JSP代码:

<a href="/searchCase.do">Click</a>

答案 1 :(得分:1)

尝试添加方法级别注释,如下所示:

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

    @RequestMapping(method = RequestMethod.GET)
    public String getCaseDetailInfo() {
        return "forward:caseDetail";
    }

}

与文档中描述的相似:Mapping Requests With @RequestMapping

  

17.3.2使用@RequestMapping映射请求

     

您可以使用@RequestMapping注释来映射网址,例如   /appointments到整个类或特定的处理程序方法。   通常,类级注释映射特定的请求路径(或   路径模式)到表单控制器上,具有额外的方法级别   注释缩小了特定HTTP方法的主映射   请求方法(&#34; GET&#34;,&#34; POST&#34;等)或HTTP请求参数   条件。

答案 2 :(得分:0)

人们在评论中建议的是docs描述的内容

  

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

但是,使用配置

<init-param>
    <param-name>namespace</param-name>
    <param-value>mvc</param-value>
</init-param>

你已经覆盖了这个,所以DispatherServlet文件将查看以下位置

DEFAULT_CONFIG_LOCATION_PREFIX + getNamespace() + DEFAULT_CONFIG_LOCATION_SUFFIX

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

/WEB-INF/mvc.xml

我根据你的评论看到你最初有正确的名字(对应你的配置)。所以要么你没有把它放在 WEB-INF 之下,要么你的问题在其他地方。

话虽如此,请考虑替代配置(在我看来更明确),基于contextConfigLocation param,例如

<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>

希望有所帮助

答案 3 :(得分:0)

我在计算机上设置了您的项目。首先,我使用 maven-jetty-plugin 运行项目。然后没有发现映射错误。经过大量的更改,我终于尝试了 maven-tomcat7-plugin ,然后就可以了。

将tomcat插件添加到您的pom.xml

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <version>2.2</version>
            </plugin>
        </plugins>
    </build>

然后启动服务器mvn tomcat7:run

你的Controller映射应该是这样的:

@RequestMapping(value="/searchCase", method = RequestMethod.GET)
public ModelAndView helloWorld() { 

答案 4 :(得分:0)

我有同样的错误。尝试了我在堆栈溢出后发现的所有内容都无济于事,我意识到我的控制器位于文件夹src/main/resources/com/controllers中,其中com.controllers是一个包。

创建另一个源文件夹src/main/java并移动com/controllers文件夹就可以了。 (它将com/controller文件夹检测为一个包,而在src/main/resources中将其视为普通目录。)