在spring3.1之前使用DefaultAnnotationHandlerMapping映射器,AnnotationMethodHandlerAdapter註解適配器
在spring3.1之後使用org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping 映射器,
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter 註解適配器
建議使用3.1之後的
使用<mvc:annotation-driven></mvc:annotation-driven>這個標籤可以代替上面註解映射器和註解適配器 的配置,而且默認加載很多參數綁定方法,比如json轉換解析器就默認加載了。實際開發一般使用<mvc:annotation-driven></mvc:annotation-driven>。
開發註解Handler
使用@org.springframework.stereotype.Controller表明他是一個控制器。
註解的映射器,適配器
對於註解的Handler可以單個配置
<bean class="com.ssm.controller.ItemsHandler3" ></bean>
在實際開發中建議使用組件掃描:(可以掃描controller,service。。。)
<context:component-scan base-package="com.ssm.controller"></context:component-scan>
聲明Controller
@org.springframework.stereotype.Controller
public class ItemsHandler3 {
//@RequestMapping實現對方法和url進行映射,一個方法對應一個url
//一般建議將url與方法名寫成一樣
@RequestMapping("/queryItems")
public ModelAndView queryItems() throws Exception{
//調用service 查詢商品列表,這裏使用靜態數據模擬
ArrayList<Items>list=new ArrayList<Items>();
list.add(new Items("小米",1244,"性價比最高"));
list.add(new Items("華爲",3999,"華爲榮耀,你值得擁有"));
ModelAndView modelAndView=new ModelAndView();
modelAndView.addObject("list", list);
modelAndView.setViewName("/items.jsp");
return modelAndView;
}
}
這裏的RequestMapping裏的參數,即指url的請求參數。訪問鏈接:http://localhost:8080/SpringStudy/queryItems.action
第一步:前端控制器接受請求
調用doDispatcher(HttpServletRequest request , HttpServletResponse response){...};
第二步:前端控制器查找Handler
HandlerExecutionChain getHandler(HttpServletRequest request){...}
第三步:執行Handler,得到執行的結果ModelAndView。
handler.handle(processedRequest,request, mappedHandler.getHandler());
第四步:視圖渲染,將model數據填充到 request 域
試圖解析得到view,然後調用view.render() 即view的渲染方法。
void exposeModelAsRequestAttributes(Map<String,Object> model ,HttpServletRequest request){...} , 然後便是把model中的屬性設置到request中。