非注解的处理器映射器和适配器 处理器映射器: BeanNameUrlHandlerMapping: 上面讲过 SimpleUrlHandlerMapping: <!--简单url映射--> <bean class="SimpleUrlHandlerMapping的全限定类名"> <property> <props> <!--对itemsController_01进行url映射,url是key属性的值--> <prop key="/queryItem1_action">itemsController_01</props> <prop key="/queryItem2_action">itemsController_01</props> </props> </property> </bean> 多个映射器可以并存,前端控制器判断url能让哪些映射器映射,就让正确的映射器处理。 处理器适配器: SimpleControllerHandlerAdapter:上面讲过,要求编写的Handler要实现Controller接口 HttpRequestHandlerAdapter:要求编写的Handler实现HttpRequestHandler接口。 多个适配器可以并存。
前端控制器从DispatcherServlet.properties中加载处理器映射器、适配器、视图解析器等。如果不在springmvc中配置,则使用默认加载的。
注解的处理器映射器和适配器 处理器映射器: spring3.1之前:DefaultAnnotationHandlerMapping spring3.1之后:RequestMappingHandlerMapping
处理器适配器: spring3.1之前:AnnntationMethodHandlerAdapter spring3.1之后:RequestMappingHandlerAdapter
配置: <!--注解映射器--> <bean class="上面相应类的全限定名"/> <!--注解适配器--> <bean class="上面相应类的全限定名"/> <!-- 使用mvc:annotation-driven代替上边注解映射器和注解适配器 mvc:annotation-driven默认加载很多的参数绑定方法,比如json转换解析器。 实际开发中使用mvc:annotation-driven --> <mvc:annotation-driven></mvc;annotation-driven>
开发注解Handler: 使用注解的映射器和适配器。(必须配对使用) 使用注解开发不需要实现相应的接口(如基于配置文件则需要实现Controller接口) @Controller:类上使用该注解即可。 @RequestMapping(value="/queryItems",method={RequestMethod.POST,RequestMethod.GET}): 作用: 1、对url和Handler的方法进行映射; 2、可以窄化请求映射,设置Handler的根路径,url就是根路径+子路径请求方式; 3、可以限制http请求的方式; 映射成功后,springmvc框架生成一个Handler对象,对象中只包括一个映射成功的method.
对于注解的Handler可以单个配置,实际开发中建议使用组件扫描 单个配置:<bean class="ItemsController_01"> 注意这里就不需要id了 组建扫描:<context:component-scan base-package="要扫描的包名"></context:component-scan>
通过前端控制器源码分析springmvc执行过程: 1、前端控制器接收请求; 2、前端控制器调用处理器映射器查找Handler; 3、调用处理器适配器去执行Handler,得到执行结果ModelAndView; 4、视图渲染,将model数据填充到request域;
springmvc和struts2的区别: springmvc是面向方法的,struts2是面向类的; springmvc可以单例开发,struts2只能说多例开发;