一、各司其职

   (1)HandlerMapping映射器
  根据客户端请求的url,找到处理本次请求的处理器,即将请求的路径和controller关联起来
  (2)HandlerAdapter适配器
  对映射器查找到的controller中的方法进行调用,包括对实现了Controller接口的控制器适配,HttpRequestHandler适配,和Controller注解适配等
  (3)HandlerController控制器
  执行核心的业务逻辑

二、部分功能概述

  (1)映射器 org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping:通过所配置的Action的name属性路径,路由到指定的控制器。

<bean name="/beanurl.action" class="com.jyk.springmvc.BeanNameUrlHanderMapping.HelloHAE"></bean>
<bean name="/delete.action" class="com.jyk.springmvc.BeanNameUrlHanderMapping.HelloHAE"></bean>
<bean name="/update.action" class="com.jyk.springmvc.BeanNameUrlHanderMapping.HelloHAE"></bean>
<bean name="/find.action" class="com.jyk.springmvc.BeanNameUrlHanderMapping.HelloHAE"></bean>

  (2)映射器 org.springframework.web.servlet.handler.SimpleUrlHandlerMapping:xx.action,yy.action,oo.action等请求路径都交由标签为id的控制器处理,即多个路径映射到一个Action

<!--
映射器,此部分配置用以取代上面复杂配置
1、首先注册业务实现类
2、接着配置映射器(Simple)
-->
<bean id="userAction" class="com.jyk.springmvc.BeanNameUrlHanderMapping.HelloHAE">
</bean> <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<prop key="/beanurl.action">userAction</prop>
<prop key="/delete.action">userAction</prop>
<prop key="/update.action">userAction</prop>
<prop key="/find.action">userAction</prop>
</props>
</property>
</bean>

  (2)适配器 org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter:因此Spring定义了一个适配接口,使得每一种Controller有一种对应的适配器实现类, 
让适配器代替controller执行相应的方法。这样在扩展Controller 时,只需要增加一个适配器类就完成了SpringMVC的扩展了,springmvc适配器的精妙设计详情请见https://www.cnblogs.com/tongkey/p/7919401.html或https://blog.csdn.net/u010288264/article/details/53835185,感谢作者。

  (3)控制器 org.springframework.web.servlet.mvc.ParameterizableViewController 如果请求是A.jsp的请求路径,希望跳转到B.jsp页面,不经过定义的控制器处理

<!--  jsp到jsp页面的转发控制器  -->
<bean name="/index.action" class="org.springframework.web.servlet.mvc.ParameterizableViewController">
<property name="viewName" value="/index.jsp"/>
</bean>

  (4)控制器 org.springframework.web.servlet.mvc.AbstractCommandController : 能够以实体的形式,收集客户端参数

<bean name="/add.action" class="com.jyk.springmvc.controller.AdminAction"> </bean>
public class AdminAction extends AbstractCommandController{
public AdminAction(){
this.setCommandClass(Admin.class);
}
@Override
protected ModelAndView handle(HttpServletRequest request,HttpServletResponse response, Object obj, BindException bindException)throws Exception {
System.out.println("AdminAction::handle");
ModelAndView modelAndView = new ModelAndView();
Admin admin = null;
if(obj instanceof Admin){
admin = (Admin) obj;
}
modelAndView.addObject("username",admin.getUsername());
modelAndView.addObject("gender",admin.getGender());
modelAndView.addObject("hiredate",admin.getHiredate());
modelAndView.setViewName("/jsp/success.jsp");
return modelAndView;
}
}

SpringMVC的映射器,适配器,控制器的更多相关文章

  1. SpringMVC的映射器、适配器、解析器

    1.处理器和适配器 1.1springmvc的映射器 根据客户端请求的url,找到处理本次请求的handler(处理器),将url和controller关联起来 1.2springmvc的适配器 对映 ...

  2. SpringMVC处理器映射器和方法名称解析器

    所谓配置式开发是指,“处理器类是程序员手工定义的,实现了特定接口的类,然后再在SpringMVC配置文件中对该类进行显式的,明确的注册”的开发方式” 1.处理器映射器HandlerMapping Ha ...

  3. springMVC入门(三)------springMVC的处理器映射器和处理器适配器配置

    简介 springMVC的处理器映射器和处理器适配器存在多种配置,因此在此专门做一个总结 常见处理器映射器.适配器的配置 springmvc多个映射器多个处理器可以并存 所有的映射器都实现了Handl ...

  4. Spring映射器、适配器、解析器

    1 springmvc的映射器和适配器 1.1springmvc的映射器 根据客户端请求的url,找到处理本次请求的handler(处理器),将url和controller关联起来 1.2spring ...

  5. SpringMVC 学习笔记(处理器映射器的配置)

    前端控制器(dispatchServlet) 在web.xml中配置前端控制器,在服务器启动时就被创建,用来对请求和响应进行接收 和 分发处理,其在配置时可以设置一个初始化参数,用来定位SpringM ...

  6. springmvc(2)处理器设配器和映射器

     非注解的处理器 映射器 和 适配器 一.处理器映射器 1.BeanNameUrlHandlerMapping <bean class="org.springframework.web ...

  7. springMVC控制器,处理器,映射器,适配器

    前端控制器DispatcherServlet <!--定义spring mvc 的前端控制器Servlet --><servlet> <!--Servlet的名称--&g ...

  8. springMVC非注解常用的"处理器映射器"、"适配器"、"处理器"

    非注解处理器映射器1. org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping url 到bean name的映射2. or ...

  9. SpringMVC由浅入深day01_5注解的处理器映射器和适配器

    5 注解的处理器映射器和适配器 在spring3.1之前使用org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandle ...

随机推荐

  1. 矩阵hash + KMP - UVA 12886 The Big Painting

    The Big Painting Problem's Link: http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=88791 M ...

  2. 关于对象序列化json 说说

    下面一个json格式图(说一下,json 其实就是js 数组和对象的一种字符串表现形式 var obj=[] 或者var obj={}  ) var json= {} 如下 从图中看 json中有两个 ...

  3. Ubuntu之No module named cv2

    最简单的方法是:pip install opencv-python 另外,从源码安装的方法: 1下载opencv源码:http://opencv.org/releases.html  推荐2.4.13 ...

  4. 【BZOJ】1696: [Usaco2007 Feb]Building A New Barn新牛舍(贪心)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1696 原题要求min(sum{|x-xi|+|y-yi|}),且一定要看题:“没有两头牛的吃草位置是 ...

  5. poj3301--Texas Trip(最小正方形覆盖)

    题目链接:点击打开链接 题目大意:给出n个点的坐标.如今要求一个正方形,全然包围n个点.而且正方形面积最小,求最小的正方形面积. 表示不能理解为什么面积随着角度的变化是一个单峰的函数,等待大牛告诉一下 ...

  6. sql语法:从一个表update到另外一个表

    sql语法:从一个表update到另外一个表 一. update a set a.name=b.name1 from a,b where a.id=b.id 二. update table1 set ...

  7. ios 将图片做成圆形

    UIImageView * imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"oiuyfdsa.png ...

  8. LeetCode 笔记系列八 Longest Valid Parentheses [lich你又想多了]

    题目:Given a string containing just the characters '(' and ')', find the length of the longest valid ( ...

  9. chrome不支持字体12px

    如果网页字体小于12px的话,人眼看着会不太舒服,所以chrome的最小字体为12px. 如果想要缩小字体,可以尝试用CSS3中的 transform: scale(相应的缩小倍数)来实现. 不过不推 ...

  10. 查看环境变量CLASSPATH, PATH ,JAVA_HOME-------->mac

    终端(命令行)操作 推荐两篇博客:http://elf8848.iteye.com/blog/1582137 http://blog.csdn.net/done58/article/details/5 ...