zoukankan      html  css  js  c++  java
  • 02_springmvc处理器映射器和适配器(补充)

    一.非注解的处理器映射器

    HandlerMapping 负责根据request请求找到对应的Handler处理器及Interceptor拦截器,将它们封装在HandlerExecutionChain 对象中给前端控制器返回。

    非注解映射器1:org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping

    使用此映射器时:配置handler时,将handler的name属性作为url

    非注解映射器2:org.springframework.web.servlet.handler.SimpleUrlHandlerMapping

    使用此映射器时,可以在handler中加入id属性作为prop中value,可以配置多个hander。

    二 非注解的处理器适配器

    非注解处理器适配器1:org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter

    要求编写的Handler实现 Controller接口。

    非注解处理器适配器2:org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter

    要求编写的Handler实现 HttpRequestHandler接口。

    三.注解的处理器映射器和适配器

    映射器:在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注解适配器。

    注解的处理器映射器:

    注解的处理器适配器:

    注解的handler配置

    使用组件扫描器省去在spring容器配置每个controller类的繁琐。使用<context:component-scan自动扫描标记@controller的控制器类,不需要在springmvc.xml中配置handler,只需要在handle家注解@Controller

    <mvc:annotation-driven>

    springmvc使用<mvc:annotation-driven>自动加载RequestMappingHandlerMapping和RequestMappingHandlerAdapter,可用在springmvc.xml配置文件中使用<mvc:annotation-driven>替代注解处理器和适配器的配置。

    handler:

    package com.springmvc.controller;
    
    import com.springmvc.po.Items;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.HttpRequestHandler;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.servlet.ModelAndView;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.List;
    
    /**
     * Description:注解开发handler
     * User: jiatp
     * Date:2019/9/7 0007 上午 7:42
    */
    @Controller
    public class ItemsController3 {
    
        //商品信息查询
        @RequestMapping("/queryItemsByAnnotation.action")
        public ModelAndView queryItems() throws Exception{
            //调用service查找数据库,查询商品列表,这里使用静态模拟
            List<Items> itemsList = new ArrayList<Items>();
            //向list中填充静态数据
    
            Items items_1 = new Items();
            items_1.setName("联想笔记本");
            items_1.setPrice(6000f);
            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();
    
            modelAndView.addObject("itemsList",itemsList);//相当于request.setAtttributes
            modelAndView.setViewName("items/itemsList");//指定返回的视图
            return modelAndView;
        }
        //商品其它操作
    
    
    }
    

    springmvc处理流程源码分析

    1. 用户发送请求到DispatherServlet前端控制器。
    2. DispatherServlet调用HandlerMapping(处理器映射器)根据url查找Handler。
    3. DispatherServlet调用HandlerAdapter(处理器适配器)对HandlerMapping找到Handler进行包装、执行。HandlerAdapter执行Handler完成后,返回了一个ModleAndView(springmvc封装对象)  DispatherServlet 找一个合适的适配器: 适配器执行Hanlder。
    4. DispatherServlet拿着ModelAndView调用ViewResolver(视图解析器)进行视图解析,解析完成后返回一个View(很多不同视图类型的View)。
    5. DispatcherServlet进行视图渲染,将Model中数据放到request域,在页面展示。

     

  • 相关阅读:
    SQLAlchemy教程-第二章-SQL常用查询的ORM写法
    弹性数组
    C++模板
    typedef 函数名
    typedef 函数指针
    备忘录:“#ifdef __cplusplus extern "C" { #endif”的定义
    linux mmap 内存映射
    生成模型与判别模型(转)
    DL反向传播理解
    UFLDL(Unsupervised Feature Learning and Deep Learning)
  • 原文地址:https://www.cnblogs.com/jatpeo/p/11767524.html
Copyright © 2011-2022 走看看