我正在尝试使用一个非常简单的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";
}
作品-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 -->
该应用程序部署到Tomcat 7 / webapps / works。 Tomcat文件结构是:
webapps
/works
/WEB-INF
/classes
/lib
我正在尝试使用url调用控制器:localhost:8080 / works / test
在tomcat7-stdout中,我看到了:
1106 [pool-2-thread-1] DEBUG org.springframework.web.servlet.DispatcherServlet - servlet的已发布WebApplicationContext'作为'具有名称的ServletContext属性[org.springframework.web.servlet.FrameworkServlet.CONTEXT.works ]
1106 [pool-2-thread-1] INFO org.springframework.web.servlet.DispatcherServlet - FrameworkServlet'works':初始化在728 ms完成
1106 [pool-2-thread-1] DEBUG org.springframework.web.servlet.DispatcherServlet - Servlet'works'已成功配置
14068 [http-apr-8080-exec-2] DEBUG org.springframework.web.servlet.DispatcherServlet - 名为'works'的DispatcherServlet处理[/ works / test]的GET请求
14071 [http-apr-8080-exec-2] WARN org.springframework.web.servlet.PageNotFound - 在名为'works'的DispatcherServlet中找不到带有URI [/ works / test]的HTTP请求的映射
所以我的问题(终于!): Spring没有识别控制器中的注释吗?如果没有,这个简单的设置会出现什么问题?
感谢您提供任何帮助或建议, beeky
答案 0 :(得分:2)
您需要将@RequestMapping
注释移至serviceRequest
方法。
@RequestMapping
可用于为所有@RequestMapping
指定公共路径前缀 - 注释该类,但如果没有方法级别的注释,它不会产生任何效果。
答案 1 :(得分:1)
也许问题在servlet映射部分? 尝试改变:
<servlet-mapping>
<servlet-name>works</servlet-name>
<url-pattern>/works/*</url-pattern>
</servlet-mapping>
再试一次。