1. 程式人生 > >Spring MVC的default-servlet-handler和annotation-driven配置

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

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 resp) throws 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配置