Spring没有使用RequestMappingHandlerMapping来映射请求

时间:2018-04-21 17:58:38

标签: java spring tiles

我正在Spring MVC和tile集成上创建一个简单的应用程序。 最初我在加载静态内容页面时遇到了问题(比如img)。 因此,为了提供静态页面,我在dispatcher-servlet.xml

中包含了以下行
<mvc:resources mapping="/resources/**" location="/resources/" />

现在应用程序可以加载静态页面。但不知何故,其他请求无法到达控制器。在调试时,我发现&#34; RequestMappingHandlerMapping&#34;和&#34; RequestMappingHandlerAdapter&#34;在handlerMappings和handlerAdapters中分别缺少。 当我从dispatcher-servlet.xml中省略资源映射条目时,我的动态请求将成功提供。作为一种解决方法,我已在xml文件中手动注册了这两个bean。

调度-servlet.xml中

<context:annotation-config />
    <mvc:resources location="/images/" mapping="/images/**"></mvc:resources>
    <beans:bean id="handlerMapping"
        class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping">
    </beans:bean>
    <beans:bean id="handlerAdapter"
        class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"></beans:bean>
    <context:component-scan
        base-package="com.mds.presentation.controller"></context:component-scan>
    <bean
        class="org.springframework.web.servlet.view.UrlBasedViewResolver"
        id="tilesViewResolver">
        <property name="viewClass"
            value="org.springframework.web.servlet.view.tiles3.TilesView" />
    </bean>
    <bean id="tilesConfigurer"
        class="org.springframework.web.servlet.view.tiles3.TilesConfigurer">
        <property name="definitions">
            <list>
                <value>/WEB-INF/tiles.xml</value>
            </list>
        </property>
    </bean>

的TestController

@Controller
public class TestController {

    @RequestMapping(value="/login", method=RequestMethod.GET)
    public ModelAndView login(HttpServletRequest req, HttpServletResponse resp) {
        ModelAndView mav=new ModelAndView("login");
        mav.addObject("home","home");
        mav.addObject("buy","buy");
        mav.addObject("cart","cart");
        return mav;
    }
}

我的好奇心是,当包含 mvc:resources 时,spring无法自行注册适当的处理程序和适配器。有什么我想念的吗? 我尝试在春季文档中搜索它,谷歌却找不到任何相关内容。

1 个答案:

答案 0 :(得分:1)

我认为自己定义这些bean是没有意义的。

您的XML配置中是否有<mvc:annotation-driven />

如果没有,请尝试将其添加到XML文件中并删除:

<beans:bean id="handlerMapping" class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping">
</beans:bean>

<beans:bean id="handlerAdapter" class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
</beans:bean>

这有助于您的请求到达控制器。

基本上,mvc:annotation-driven标记会为您设置Spring上下文,以便将请求分派给控制器。

标记将配置两个bean DefaultAnnotationHandlerMappingAnnotationMethodHandlerAdapter。或者也许在新版本的Spring中有一些新的bean,但无论如何,这个标签会为你配置它们。