【问题标题】:Unable to find controller in spring web mvc在spring web mvc中找不到控制器
【发布时间】:2014-01-15 07:21:55
【问题描述】:

dispatcher-servlet 似乎无法执行组件扫描。

 <context:component-scan  base-package="abc" />

abc 包下的我的控制器文件 (HelloController.java) 中。代码编写如下:

@Controller
@RequestMapping("/hello")
public class HelloController {

@RequestMapping(method = RequestMethod.GET)
public String printHello(ModelMap model) {
    model.addAttribute("message", "Hello Spring MVC Framework!");
    return "hello"; //I have already made hello.jsp in web-inf/jsp/
 }
}

我的应用程序名称是 SpringMiddle。当尝试 url 为:

http://localhost:8080/SpringMiddle/hello.htm

我在 web.xml 中有以下 url 模式

 <servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>*.htm</url-pattern>
</servlet-mapping>

它显示错误 HTTP 404 not found。

编辑::它向我显示警告

WARNING:   No mapping found for HTTP request with URI [/SpringMiddle/hello.htm] in DispatcherServlet with name 'dispatcher'

【问题讨论】:

  • 两个问题:您的应用程序是否正确部署在服务器上?您在 stacktrace 中看到了什么错误?
  • 尝试在控制器内部进行调试并检查它是否正常工作。还要发布您的应用程序上下文文件和 web.xml,以便人们可以帮助您。
  • 您的 mvc 配置中有以下内容吗? &lt;mvc:annotation-driven /&gt;
  • @Taylor:不,我没有这样的标签。
  • 试着把它放进去。 :)

标签: java spring-mvc url-routing


【解决方案1】:

你必须在 Spring 中启用 MVC。在 xml 配置中,您可以这样做:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    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.xsd">

    <mvc:annotation-driven />

</beans>

在 JavaConfig 中:

@Configuration
@EnableWebMvc
public class WebConfig {

}

请参考Spring documentation

【讨论】:

  • 还有其他选择吗?我不知道在教程中我指的是他们在那里没有包含这样的标签。
  • 不——你总是必须告诉 Spring 你想使用 MVC 框架。当然你可以使用自动启用它的 Spring Boot 项目,但我认为这不是你的情况。
  • 非常感谢。完成..实际上我指的是这个网站mkyong.com/spring3/spring-3-mvc-hello-world-example
  • @Ritesh 如果您刚刚开始新项目,请考虑使用 JavaConfig 而不是 xml。或者甚至可以使用 SpringBoot - 你可以在这里找到很好的教程 - spring.io/guides/gs/spring-boot
【解决方案2】:

如果您指的是 mkyong 教程,我没有使用注释:@Configuration @EnableWebMvc,问题是你同时使用了注解和 xml 声明。

设置url的注解:

@Controller
@RequestMapping("/hello")

你应该删除这部分:

<servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>*.htm</url-pattern>
</servlet-mapping>

您将能够访问该网址:

http://localhost:8080/SpringMiddle/hello

还要确保你的 web.xml 中有这个:

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

<servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/dispatcher-servlet.xml</param-value> 
</context-param>
<listener>
    <listener-class>
                  org.springframework.web.context.ContextLoaderListener
            </listener-class>
</listener>

dispatcher-servlet.xml 是声明组件扫描的地方

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-05
    • 2021-04-03
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-16
    • 1970-01-01
    相关资源
    最近更新 更多