springmvc(4)--注解的处理器映射器和适配器

来源:互联网 发布:sql分类合计 编辑:程序博客网 时间:2024/04/29 20:11

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 * */// 标识它是一个控制器@Controllerpublic 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的映射关系
使用注解的映射器和注解的适配器配对使用,也就是说不能使用非注解的映射器和注解的适配器使用。

阅读全文
0 0
原创粉丝点击