天天看点

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

1.我们在springmvc.xml中配置的适配器和映射器,如果不配置,那么将会加载默认的映射器和适配器。

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

如图

但是上面两种注解方式的适配器和映射器,是已经过时的,是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(f);
        items_1.setDetail("稻草人皮鞋!");

        Items items_2 = new Items();
        items_2.setName("水杯");
        items_2.setPrice(f);
        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.测试

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

测试成功!

5.源码分析

通过前端控制器源码分析springmvc的执行过程:

第一步:执行这个方法:

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

第二步:找到handler

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

第三步:执行handler,得到执行的结果modelAndView

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

第四步:调用视图解析器,进行视图渲染,将modelAndView填充

得到view:

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

填充数据model到request域

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

渲染:

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

6.小结

使用注解的映射器不用在xml中配置url和handler的映射关系

使用注解的映射器和注解的适配器配对使用,也就是说不能使用非注解的映射器和注解的适配器使用。

继续阅读