1.我们在springmvc.xml中配置的适配器和映射器,如果不配置,那么将会加载默认的映射器和适配器。
如图
但是上面两种注解方式的适配器和映射器,是已经过时的,是spring2.5的。
ps:
在spring3.1之前使用的注解映射器是:org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping
在spring3.1之后使用的注解映射器是:org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping
在spring3.1之前使用的注解适配器是:org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter
在spring3.1之后使用的注解适配器是:org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter
在springmvc.xml中我们配置一下
<!--注解映射器 -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>
<!--注解适配器 -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>
而且可以使用mvc的直接驱动代替上面的controller的bean注册,而且提供了很多参数绑定方法。
<!-- 使用 mvc:annotation-driven代替上边注解映射器和注解适配器配置
mvc:annotation-driven默认加载很多的参数绑定方法,
比如json转换解析器就默认加载了,如果使用mvc:annotation-driven不用配置上边的RequestMappingHandlerMapping和RequestMappingHandlerAdapter
实际开发时使用mvc:annotation-driven
-->
<!-- <mvc:annotation-driven></mvc:annotation-driven> -->
2.开发handler
开发注解的handler必须使用注解的适配器和映射器,不能使用非注解的
package com.ddd.ssm.controller;
import java.util.ArrayList;
import java.util.List;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import com.ddd.ssm.pojo.Items;
/**
* 使用注解开发handler
*
* @author Dan
*
*/
// 标识它是一个控制器
@Controller
public class ItemsController3 implements HttpRequestHandler {
// 查询商品列表
//@RequestMapping("/queryItems")实现了对queryItems()方法和url进行映射,一个方法对应一个url
//一般方法和url一样便于维护
@RequestMapping("/queryItems33")
public ModelAndView queryItems() {
// 调用service查找数据库,查询商品列表,这里使用静态数据模拟
List<Items> itemsList = new ArrayList<>();
// 填充静态数据
Items items_1 = new Items();
items_1.setName("皮鞋");
items_1.setPrice(698f);
items_1.setDetail("稻草人皮鞋!");
Items items_2 = new Items();
items_2.setName("水杯");
items_2.setPrice(5000f);
items_2.setDetail("特百惠水杯!");
itemsList.add(items_1);
itemsList.add(items_2);
// 返回modelAndView
ModelAndView modelAndView = new ModelAndView();
// 相当于request.setAttribute(..,..),就是在jsp页面中通过itemsList取数据
modelAndView.addObject("itemsList", itemsList);
// 指定视图
modelAndView.setViewName("/items/itemsList");
return modelAndView;
}
}
3.配置handler
使用组件扫描的方式
<!-- 对于注解的Handler可以单个配置实际开发中建议使用组件扫描 -->
<!-- <bean class="com.ddd.ssm.controller.ItemsController3"/> -->
<!-- 可以扫描controller、service、...这里让扫描controller,指定controller的包 -->
<context:component-scan base-package="com.ddd.ssm.controller">
</context:component-scan>
4.测试
测试成功!5.源码分析
通过前端控制器源码分析springmvc的执行过程:
第一步:执行这个方法:
第二步:找到handler
第三步:执行handler,得到执行的结果modelAndView
第四步:调用视图解析器,进行视图渲染,将modelAndView填充
得到view:
填充数据model到request域
渲染:
6.小结
使用注解的映射器不用在xml中配置url和handler的映射关系
使用注解的映射器和注解的适配器配对使用,也就是说不能使用非注解的映射器和注解的适配器使用。