0

今天我开始将https://github.com/spring-projects/spring-social-samples/tree/master/spring-social-showcase-sec-xml中的示例代码迁移到我的一个较大的 spring 项目中,花了一些时间直到我能够无误地编译,但我终于做到了这一点。但是现在我无法访问任何应该映射到社交控制器的 URL:

警告 [http-8080-2] PageNotFound.noHandlerFound(1108) | 在名称为“dispatcher”的 DispatcherServlet 中找不到带有 URI [/junkie/app/signin/facebook] 的 HTTP 请求的映射 WARN [http-8080-2] PageNotFound.noHandlerFound(1108) | 在名称为“dispatcher”的 DispatcherServlet 中找不到带有 URI [/junkie/app/connect/facebook] 的 HTTP 请求的映射

我检查以确保控制器已初始化,因此我将它们自动连接到控制器中,它们似乎是这样,所以我现在不知所措。在花了几个小时把我的头撞在墙上之后,我来到这里希望能找到一些帮助。以下是配置方式:http: //pastebin.com/tPi5Mtny

4

1 回答 1

0

我有同样的问题。我通过将 connectController bean 放入 dispatcher-servlet.xml 来解决它。在您的情况下,bean 是在根应用程序上下文而不是调度程序 servlet 专用上下文中实例化的。虽然根应用上下文是 servlet 上下文的父上下文,但这并不意味着 servlet 可以自动访问其父上下文中的 bean。由这个线程揭示。你的调度员永远不知道有一个 connectController。

然后您可能会问为什么展示项目有效?(展示项目 url 已更新:url)。它的 connectController bean 也在根应用程序上下文中加载的同一个 social.xml 文件中声明。它的调度程序 servlet 是如何访问控制器 bean 的?如果你仔细观察,你可能会发现这个陈列柜没有 dispatcher-servlet.xml 文件,在它的 web.xml 中,它声明了它的 dispatcher 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 没有专用的上下文,只会使用根应用程序上下文。

于 2014-06-06T08:44:34.250 回答