Spring MVC的default-servlet-handler和annotation-driven配置
使用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/>
一、添加<mvc:annotation-driven/>配置,添加此配置後,框架會自動註冊RequestMappingHandlerMapping和RequestMappingHandlerAdapter(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;
}
}
三、手動註冊RequestMappingHandlerMapping和RequestMappingHandlerAdapter
<!-- 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配置