码迷,mamicode.com
首页 > 编程语言 > 详细

Spring MVC的default-servlet-handler和annotation-driven配置

时间:2017-10-06 21:20:15      阅读:177      评论:0      收藏:0      [点我收藏+]

标签:spring   mvc   serlvet   

使用spring通常配置url-pattern为/时,会代替web服务器的servlet成为default servlet,静态资源无法访问,添加<mvc:default-servlet-handler/>指定web服务器的servlet为default servlet,静态资源就可以访问了。当时访问@RequestMapping("/model")又不能访问了。

原因是:当未配置<mvc:default-servlet-handler/>时,框架会默认注册AnnotaitonMethodHandlerAdapter这个bean,能处理@RequestMapping;配置<mvc:default-servlet-handler/>后,框架注册的HandlerAdapter无法处理@RequestMapping,无法找到controller。解决方案有以下几种:

一、添加<mvc:annotation-driven/>配置,添加此配置后,框架会自动注册RequestMappingHandlerMappingRequestMappingHandlerAdapter(spring3.1以后的版本),就可以处理@RequestMapping

二、不使用@RequestMapping,直接指定控制类,手动<bean name="/hello" class="com.niuwolfs.controller.HelloController"/>注册

public class HelloController implements Controller{

    @Override

    public ModelAndView handleRequest(HttpServletRequest req, HttpServletResponse respthrows Exception {

        ModelAndView mv = new ModelAndView();

mv.addObject("msg""hello spring mvc!");

mv.setViewName("hello");

return mv;

    }

}

三、手动注册RequestMappingHandlerMappingRequestMappingHandlerAdapter

<!-- Spring3.1后使用此类配置Handler Mapping -->

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

<!-- Spring3.1后使用此类配置Handler Adapter -->

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

四、不配置<mvc:default-servlet-handler/>,把spring的url-pattern配置为.do等,就不会代替web服务的default servlet了,但是控制器的访问一定要和配置的.do等匹配。



Spring MVC的default-servlet-handler和annotation-driven配置

标签:spring   mvc   serlvet   

原文地址:http://wolfs.blog.51cto.com/2123151/1970518

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!