1,映射器

1.1 ControllerBean +BeanNameUrlHandlerMapping
             其中ControllerBean 需要指明name(url)通过url找到对应的Controller

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"  xmlns:p="http://www.springframework.org/schema/p"  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xmlns:context="http://www.springframework.org/schema/context"  xmlns:mvc="http://www.springframework.org/schema/mvc"  xsi:schemaLocation="  http://www.springframework.org/schema/beans  http://www.springframework.org/schema/beans/spring-beans-4.2.xsd  http://www.springframework.org/schema/context  http://www.springframework.org/schema/context/spring-context-4.2.xsd  http://www.springframework.org/schema/mvc  http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd"><!-- 配置Handle handle:分发请求 --><bean name="/hello" class="com.xiaohui.controller.HelloController"/><!-- 处理映射器将bean的name作为url进行查找,需要在配置Handle是指定name(即url) --><bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" /><!-- SimpleControllerHandlerAdapter 是一个处理器适配器,所有的适配都要实现HandlerAdapter --><bean class="org.springframework.web.portlet.mvc.SimpleControllerHandlerAdapter" /><!-- 配置视图渲染器 --><bean id="jspViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"/></beans>

              1.2 ControllerBean + SimpleUrlHandlerMapping
              通过给bean定义id,在SimpleUrlHandlerMapping 中配置键值对进行关联url与对应的Controller。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"  xmlns:p="http://www.springframework.org/schema/p"  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xmlns:context="http://www.springframework.org/schema/context"  xmlns:mvc="http://www.springframework.org/schema/mvc"  xsi:schemaLocation="  http://www.springframework.org/schema/beans  http://www.springframework.org/schema/beans/spring-beans-4.2.xsd  http://www.springframework.org/schema/context  http://www.springframework.org/schema/context/spring-context-4.2.xsd  http://www.springframework.org/schema/mvc  http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd"><!-- 配置Handle handle:分发请求 --><bean id="hellobeanid" class="com.xiaohui.controller.HelloController"/><bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping" ><property name="mappings"><props><prop key="/hello1">hellobeanid</prop></props></property></bean><!-- SimpleControllerHandlerAdapter 是一个处理器适配器,所有的适配都要实现HandlerAdapter --><bean class="org.springframework.web.portlet.mvc.SimpleControllerHandlerAdapter" /><!-- 配置视图渲染器 --><bean id="jspViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"/></beans>

 由以上两个映射器可以看出适配器在spring中主要用来解析url。
2,适配器
        2.1 SimpleControllerHandlerAdapter 
        <bean class="org.springframework.web.portlet.mvc.SimpleControllerHandlerAdapter" />
         该适配器所能掉起的Controller必须实现org.springframework.web.servlet.mvc.Controller 接口。

<!-- SimpleControllerHandlerAdapter 是一个处理器适配器,所有的适配都要实现HandlerAdapter,
该适配器对应的Controller 必须实现org.springframework.web.servlet.mvc.Controller 接口 -->
bean class="org.springframework.web.portlet.mvc.SimpleControllerHandlerAdapter" />

SimpleControllerHandlerAdapter源码如下:

public class SimpleControllerHandlerAdapter implements HandlerAdapter, PortletContextAware {private PortletContext portletContext;@Overridepublic void setPortletContext(PortletContext portletContext) {this.portletContext = portletContext;}@Overridepublic boolean supports(Object handler) {return (handler instanceof Controller);}//省略下面代码....
}handler instanceof Controller);}//省略下面代码....
}

该适配器对应的Controller如下:

package com.xiaohui.controller;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;public class HelloController  implements Controller{@Overridepublic ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {ModelAndView modelAndView = new ModelAndView();//添加数据模型modelAndView.addObject("msg", "hello springmvc");//设置逻辑试图名,视图解析器会根据改名字解析到具体的视图页面modelAndView.setViewName("/WEB-INF/jsp/hello.jsp");return modelAndView;}}

2.2     HttpRequestHandlerAdapter
         
 该适配器源码如下:

public class HttpRequestHandlerAdapter implements HandlerAdapter {@Overridepublic boolean supports(Object handler) {return (handler instanceof HttpRequestHandler);}@Overridepublic ModelAndView handle(HttpServletRequest request, HttpServletResponse response, Object handler)throws Exception {((HttpRequestHandler) handler).handleRequest(request, response);return null;}@Overridepublic long getLastModified(HttpServletRequest request, Object handler) {if (handler instanceof LastModified) {return ((LastModified) handler).getLastModified(request);}return -1L;}
}handler instanceof HttpRequestHandler);}@Overridepublic ModelAndView handle(HttpServletRequest request, HttpServletResponse response, Object handler)throws Exception {((HttpRequestHandler) handler).handleRequest(request, response);return null;}@Overridepublic long getLastModified(HttpServletRequest request, Object handler) {if (handler instanceof LastModified) {return ((LastModified) handler).getLastModified(request);}return -1L;}
}

通过源码既可以看出该适配器所能掉起的Controller必须实现 HttpRequestHandler接口

controller代码如下:

public class HelloController2  implements HttpRequestHandler{@Overridepublic void handleRequest(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//添加数据模型req.setAttribute("msg", "hello springmvc22222");//设置逻辑试图名,视图解析器会根据改名字解析到具体的视图页面req.getRequestDispatcher("/WEB-INF/jsp/hello.jsp").forward(req, resp);}
}

此类控制器可以通过response设置相应内容比如返回json数据等。

而通过上面两例适配器则可以看出SpringMvc根据适配器规则去调用对应规则的Controller;

所以在SpringMvc 中 当用户通过一个Url请求后,在springmvc中则通过sprignmvc解析器 及 springMvc解析器在确定执行哪一个Controller;
如上例子使用的为非注解映射器和适配器,其中Controller通过实现接口,所以内部只有一个实现方法。后面通过注解形式实现则可以有多个方法,供多个请求访问调用。

SpringMvc 03 非注解形式下的映射器与适配器相关推荐

  1. SpringMVC中注解和非注解形式配置

    目录 一.注解形式 1.各组件的配置文件 springmvc1.xml 2.Controller类 二.非注解形式实现 1.各组件的配置文件 springmvc2.xml 2.User1Control ...

  2. 非注解和注解的处理器映射器和适配器---SpringMVC学习笔记(三)

    非注解的处理器映射器和适配器 非注解的处理器映射器 之前的入门Demo中使用的就是非注解的处理器映射器: org.springframework.web.servlet.handler.BeanNam ...

  3. 【SpringMVC框架】非注解的处理器映射器和适配器

    非注解的处理器映射器和适配器 1.非注解的处理器映射器 之前的处理器映射器: org.springframework.web.servlet.handler.BeanNameUrlHandlerMap ...

  4. SpringMVC学习记录二——非注解和注解的处理器映射器和适配器

    3      非注解的处理器映射器和适配器 3.1      非注解的处理器映射器 处理器映射器: org.springframework.web.servlet.handler.BeanNameUr ...

  5. SpringMVC - 非注解的处理器映射器和适配器

    为什么80%的码农都做不了架构师?>>>    一.非注解的处理器映射器 提供的处理器有两个属性.一个是id属性,一个是name属性.分别对应两种不同的映射器. <bean i ...

  6. SpringMVC 实例 --非注解【过时的,留作回忆】

    练习项目:test SpringMVC 实例 --非注解,只用于学习理解.到了spring 3.0以后或许部分东西已经过时了,在实际工作中并不一定好用. 但对于理解SpringMVC的实现方式很有帮助 ...

  7. 【SpringMVC框架】注解的处理器映射器和适配器配置

    下面我们来探讨注解的处理器映射器和适配器 1.注解的处理器映射器和适配器 在spring3.1之前使用org.springframework.web.servlet.mvc.annotation.De ...

  8. SpringMvc 04 基于注解的映射器与适配器配置

    SpringMvc的两种基于注解的映射器与适配器配置: 1.通过显式的配置映射器与适配器,并通过自动扫描标签去加载Controller类. <?xml version="1.0&quo ...

  9. SpringMVC 配置注解的映射器、适配器(重点)

    开发中实际用到的方式,是配置注解的映射器适配器. >配置 mvc:annotation-driven元素 在3.1之后的注解的处理器映射器.适配器添加了很多的优化以及参数设置,所以在开发时,推荐 ...

最新文章

  1. 在C++中加载TorchScript模型
  2. linux下面显示所有正在运行的线程
  3. opencv 实现进度控制
  4. thinkphp环境变量.env配置
  5. 腾讯光子《黎明觉醒》技术美术负责人:如何制作超真实的开放世界?
  6. 2012年最后一天,终于盼到公司发报卡了
  7. 淘宝主站Cgroup资源控制
  8. iOS把UIImage保存到沙盒目录下以及少盒目录概述
  9. ArrayList和LinkedList的插入删除性能差距到底有多大
  10. win7怎么重置计算机,win7系统怎么重置网络?win7重置网络到初始状态的方法
  11. 希腊字母读音及科学上的应用
  12. 鸿蒙系统国内厂商,谷歌自食其果,华为鸿蒙系统已经被启用,国内厂商或将弃用安卓...
  13. 杨超越杯编程大赛,参赛作品过100个,工程师评论:杨超越是谁?
  14. excel批注不显示批注框_批注和批注处理器入门指南[解释]
  15. LA@二次型和标准化
  16. Unity用代码批量修复材质球shader丢失的问题
  17. 管理咨询的甲方和乙方
  18. OSChina 周六乱弹 ——单身程序员怎么回复漂亮妹子的悲伤心情
  19. 安卓仓库管理系统源码
  20. go reflect Elem() 深入学习

热门文章

  1. maven+Spring boot 打包发布运行
  2. python爬取某人所有微博_Python爬取博客的所有文章并存为带目录的word文档(实例67)
  3. React hooks + antd前台实现input搜索框实时搜索table表格
  4. 第十七届“科大讯飞杯”高校网络友谊赛——F-排列计算
  5. POJ 3126-Prime Path
  6. android 自定义 打包文件类型,Android Studio配置打包生成自定义文件名
  7. DDGScreenShot —图片加各种滤镜高逼格操作
  8. python-玉米(小米)商城作业
  9. SQL Server -- 如何书写优雅、漂亮的SQL脚本?
  10. 五大常用算法:分治、动态规划、贪心、回溯、分支限界