1. 程式人生 > >SpringMVC的映射器,適配器,控制器

SpringMVC的映射器,適配器,控制器

只需要 man per print abstract 感謝 prope jsp article

一、各司其職

  (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的映射器,適配器,控制器