zoukankan      html  css  js  c++  java
  • SpringMVC的映射器,适配器,控制器

    一、各司其职

       (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;
        }
    }
  • 相关阅读:
    Pwn-level0
    Pwn-level2
    【php】php从多个数组中取出最大的值
    【算法】php计算数字k在一段数字范围出现的次数
    【算法】php计算出丑数
    【php】php常用函数代码封装(一)数组篇
    【Golang】go语言设计模式
    什么是RPC
    【php】 php获取文件路径中的文件名和文件后缀方法
    【php】php目录路径函数系列
  • 原文地址:https://www.cnblogs.com/jiyukai/p/9404760.html
Copyright © 2011-2022 走看看