是啥导致此 Spring MVC 应用程序中的映射失败?
Posted
技术标签:
【中文标题】是啥导致此 Spring MVC 应用程序中的映射失败?【英文标题】:What is causing the mapping failure in this Spring MVC app?是什么导致此 Spring MVC 应用程序中的映射失败? 【发布时间】:2012-04-20 19:14:59 【问题描述】:我正在尝试让一个非常简单的 Spring @mvc 应用程序工作,但我遇到了似乎是映射错误的问题。
来自 web.xml:
<servlet>
<servlet-name>works</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>works</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
控制器:
@Controller
@RequestMapping("/test")
public class TESTController
private static Logger appLogger = Logger.getLogger("AppLogFile");
public String serviceRequest( Model model)
appLogger.info("======================= TESTController GET ===============================");
model.addAttribute("returnString","TESTController handled the request") ;
return "SingleStringView";
works-servlet.xml:
<context:component-scan base-package="com.ami.dbconnect.controller" />
<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"/>
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"/>
<bean id="TESTController" class="com.ami.dbconnect.controller.TESTController"></bean>
<!-- view resolver not shown -->
应用程序部署到 /webapps/works 的 Tomcat 7。 Tomcat文件结构为:
webapps
/works
/WEB-INF
/classes
/lib
我正在尝试使用 url 调用控制器:localhost:8080/works/test
在 tomcat7-stdout 中我看到了:
1106 [pool-2-thread-1] 调试 org.springframework.web.servlet.DispatcherServlet - 将 servlet 'works' 的 WebApplicationContext 发布为 ServletContext 属性,名称为 [org.springframework.web.servlet.FrameworkServlet.CONTEXT.works ]
1106 [pool-2-thread-1] INFO org.springframework.web.servlet.DispatcherServlet - FrameworkServlet 'works':初始化在 728 毫秒内完成
1106 [pool-2-thread-1] 调试 org.springframework.web.servlet.DispatcherServlet - Servlet 'works' 配置成功
14068 [http-apr-8080-exec-2] 调试 org.springframework.web.servlet.DispatcherServlet - 名为“works”的 DispatcherServlet 处理 [/works/test] 的 GET 请求
14071 [http-apr-8080-exec-2] 警告 org.springframework.web.servlet.PageNotFound - 在 DispatcherServlet 中找不到带有 URI [/works/test] 的 HTTP 请求的映射,名称为“works”
所以我的问题(终于!): Spring 是否无法识别控制器中的注释?如果没有,这个简单的设置可能有什么问题?
感谢您的任何帮助或建议, 狡猾的
【问题讨论】:
【参考方案1】:您需要将 @RequestMapping
注释移动到您的 serviceRequest
方法中。
类级别的@RequestMapping
可用于为该类的所有@RequestMapping
-annotated 指定公共路径前缀,但如果没有方法级别的注释,它不会生效。
【讨论】:
【参考方案2】:也许问题出在 servlet 映射部分? 尝试改变:
<servlet-mapping>
<servlet-name>works</servlet-name>
<url-pattern>/works/*</url-pattern>
</servlet-mapping>
然后再试一次。
【讨论】:
以上是关于是啥导致此 Spring MVC 应用程序中的映射失败?的主要内容,如果未能解决你的问题,请参考以下文章
对于没有 XML 的 Spring MVC 中的双调度程序配置,URL 映射无法按预期工作