今天我开始将https://github.com/spring-projects/spring-social-samples/tree/master/spring-social-showcase-sec-xml中的示例代码迁移到我的一个较大的spring项目中,它做了一些操作,直到我能够无错误地编译,但我终于做到了这一点。但是现在我无法访问应该映射到社交控制器的任何URL:
WARN [http-8080-2] PageNotFound.noHandlerFound(1108)|没有映射 找到带有URI [/ junkie / app / signin / facebook]的HTTP请求 DispatcherServlet,名称为“dispatcher”WARN [http-8080-2] PageNotFound.noHandlerFound(1108)|找不到HTTP请求的映射 在带有名称的DispatcherServlet中使用URI [/ junkie / app / connect / facebook] '调度'
我检查确保控制器已经初始化,所以我在控制器中自动装配它们,看起来它们现在让我感到茫然。 花了几个小时撞到墙上后,我来到这里希望找到一些帮助。 以下是配置的方式: http://pastebin.com/tPi5Mtny
答案 0 :(得分:0)
我遇到了同样的问题。我通过将connectController bean放入dispatcher-servlet.xml来解决它。在您的情况下,bean在根应用程序上下文中实例化,而不是在调度程序servlet专用上下文中实例化。虽然根应用程序上下文是servlet上下文的父上下文,但它并不意味着servlet可以在其父上下文中自动访问bean。由thread揭示。你的调度员永远不知道有一个connectController。
然后你可能会问为什么展示项目有效? (展示项目网址已更新:url)。它的connectController bean也在同一个social.xml文件中声明,该文件加载在根应用程序上下文中。为什么它的调度程序servlet可以访问控制器bean?如果仔细观察,可能会发现showcase没有dispatcher-servlet.xml文件,并且在其web.xml中,它声明了它的调度程序servlet,如下所示:
<servlet>
<servlet-name>appServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value></param-value>
</init-param>
...
</servlet>
如果contextConfigLocation为空值,则表示servlet没有专用上下文,只会使用根应用程序上下文。