真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Springmvc框架是怎樣執(zhí)行的

今天小編給大家分享的是Springmvc框架的執(zhí)行流程,相信大部分人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,話不多說,一起往下看吧。

公司主營業(yè)務(wù):成都做網(wǎng)站、成都網(wǎng)站建設(shè)、移動網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。創(chuàng)新互聯(lián)建站是一支青春激揚、勤奮敬業(yè)、活力青春激揚、勤奮敬業(yè)、活力澎湃、和諧高效的團隊。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團隊有機會用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)建站推出梅縣免費做網(wǎng)站回饋大家。

先上圖:

Springmvc框架是怎樣執(zhí)行的

下面結(jié)合源代碼和上圖來說明:

一:發(fā)送請求到DispatchServlet(中央控制器)

Web.xml配置文件:

 dispatcherServlet

 org.springframework.web.servlet.DispatcherServlet

 

 dispatcherServlet

 /

是不是很熟悉的感覺,沒錯這里就是servlet的配置,只不過這個servlet是系統(tǒng)已經(jīng)實現(xiàn)好的中央控制器:DispatcherServlet.

二:DispatcherServlet(中央控制器)調(diào)用HandlerMapping(處理器映射器)根據(jù)請求url找到需要執(zhí)行的處理器(此處做了簡化實際返回的是執(zhí)行鏈)

HandlerMapping是一個接口:

public interface HandlerMapping{

 。。。

 

 @Nullable

 HandlerExecutionChaingetHandler(HttpServletRequest var1) throws Exception;

}

這個接口里面只有一個方法:getHandler,該方法可以通過傳入的參數(shù)請求對象:HttpServletRequest,得到 :HandlerExecutionChain,這里的HandlerExecutionChain里面包括了處理器對象和攔截器??梢院唵蔚睦斫鉃樵摲椒ㄍㄟ^request請求對象獲得要執(zhí)行的處理器(每種HandlerMapping實現(xiàn)類返回的處理器不一定相同,有可能是處理器中的方法,也有可能是處理器本身)。

默認(rèn)的HandlerMapping實現(xiàn)類是BeanNameUrlHandlerMapping,他的getHandler方法返回的是處理器類, 常用的HandlerMapping實現(xiàn)類有:

RequestMappingHandlerMapping:采用注解方式進行映射,使用最廣泛,也最簡單,只需要在類或方法上加上@RequestMapping()的注解就可以了,它的getHandler方法返回的是處理器類中的方法。

@Controller

public class HelloController{

    @RequestMapping("/sayHello")

   public StringsayHello(){

        System.out.println("hello");

        return "success";

   }

}

SimpleUrlHandlerMapping:采用配置文件的方式進行映射,適用性最強,需要在配置文件里面配置,它的getHandler方法返回的是處理器類。

三:DispatcherServlet(中央控制器)通過HandlerAdapter(處理器適配器)調(diào)用處理器

因為不同的HandlerMapping實現(xiàn)類返回的處理器格式不是固定的,所以處理請求時需要HandlerAdapter(處理器適配器)做適配。

public interface HandlerAdapter{

//判斷該適配器是否支持傳入的handler(處理器)

 boolean supports(Object handler);

//使用給定的handler處理請求,也就是執(zhí)行handler

 @Nullable

 ModelAndViewhandle(HttpServletRequest var1, HttpServletResponse var2, Object handler) throws Exception;

 

 long getLastModified(HttpServletRequest var1, Object var2);

}

HandlerAdapter也是一個接口,它里面有兩個重要的方法:

boolean supports(Object handler)這個方法可以判斷該適配器是否支持傳入的handler(處理器)

ModelAndView handle(HttpServletRequest var1, HttpServletResponse var2, Object handler)throws Exception;這個方法使用給定的handler處理請求,也就是執(zhí)行handler.

常用的HandlerAdapter實現(xiàn)類是RequestMappingHandlerAdapter,它是和RequestMappingHandlerMapping配合使用的。

在spring mvc的核心配置文件中加上: 就會自動幫我們注冊RequestMappingHandlerMapping和RequestMappingHandlerAdapter

 

   

   

   

   

       

       

   

 

   

 

下面是網(wǎng)上看到的一套模擬springmvc適配器的代碼:

//定義一個Adapter接口 

public interface HandlerAdapter{ 

   public boolean supports(Object handler); 

   public void handle(Object handler); 



//以下是三種Controller實現(xiàn) 

public interface Controller{ 





public class HttpControllerimplements Controller{ 

   public void doHttpHandler(){ 

        System.out.println("http..."); 

   } 



public class SimpleControllerimplements Controller{ 

   public void doSimplerHandler(){ 

        System.out.println("simple..."); 

   } 



public class AnnotationControllerimplements Controller{ 

   public void doAnnotationHandler(){ 

        System.out.println("annotation..."); 

   } 





//下面編寫適配器類 



public class SimpleHandlerAdapterimplements HandlerAdapter{ 





   public void handle(Object handler) { 

       ((SimpleController)handler).doSimplerHandler(); 

   } 



   public boolean supports(Object handler) { 

       return (handlerinstanceof SimpleController); 

   } 







public class HttpHandlerAdapterimplements HandlerAdapter{ 



   public void handle(Object handler) { 

       ((HttpController)handler).doHttpHandler(); 

   } 



   public boolean supports(Object handler) { 

       return (handlerinstanceof HttpController); 

   } 









public class AnnotationHandlerAdapterimplements HandlerAdapter{ 



   public void handle(Object handler) { 

       ((AnnotationController)handler).doAnnotationHandler(); 

   } 



   public boolean supports(Object handler) { 



       return (handlerinstanceof AnnotationController); 

   } 







//模擬一個DispatcherServlet 

import java.util.ArrayList; 

import java.util.List; 





public class DispatchServlet{ 



   public static List handlerAdapters= new ArrayList();  



   public DispatchServlet(){ 

        handlerAdapters.add(new AnnotationHandlerAdapter()); 

        handlerAdapters.add(new HttpHandlerAdapter()); 

        handlerAdapters.add(new SimpleHandlerAdapter()); 

   } 





   public void doDispatch(){ 



       //此處模擬SpringMVC從request取handler的對象,僅僅new出,可以出,              

                    //不論實現(xiàn)何種Controller,適配器總能經(jīng)過適配以后得到想要的結(jié)果 

//      HttpController controller = new HttpController(); 

//      AnnotationController controller = new AnnotationController(); 

        SimpleController controller= new SimpleController(); 

       //得到對應(yīng)適配器 

        HandlerAdapter adapter= getHandler(controller); 

       //通過適配器執(zhí)行對應(yīng)的controller對應(yīng)方法 

        adapter.handle(controller); 



   } 



   public HandlerAdaptergetHandler(Controller controller){ 

       for(HandlerAdapter adapter: this.handlerAdapters){ 

           if(adapter.supports(controller)){ 

               return adapter; 

           } 

       } 

       return null; 

   } 



   public static void main(String[] args){ 

       new DispatchServlet().doDispatch(); 

   } 





四:執(zhí)行處理器,返回ModelAndView給中央控制器

這里的ModelAndView類指的是執(zhí)行完處理器以后需要在視圖顯示的數(shù)據(jù)和視圖,Model數(shù)據(jù),View視圖這個名字就很清晰的表明了該類的作用。執(zhí)行處理器后,將數(shù)據(jù)保存在ModelAndView的Model屬性中,將要顯示的視圖(通常為邏輯視圖名)保存在View屬性中,然后返回,ModelAndView類可以將處理器和視圖渲染之間的緊密聯(lián)系解耦和。

@RequestMapping("/findModelAndView")

public ModelAndViewfindModelAndView(){

    System.out.println("modelAndView");

    ModelAndView md= new ModelAndView();

    User u1= new User();

    u1.setUid(1);

    u1.setName("zhangsan");

    u1.setAge(23);

    md.addObject("user",u1);

    md.setViewName("aa");

   return md;

}

五:中央控制器調(diào)用ViewResolver(視圖解析器)根據(jù)處理器返回的ModelAndView中的邏輯視圖名為中央控制器返回一個可用的view實例。

public interface ViewResolver{

 @Nullable

 ViewresolveViewName(String viewName, Locale var2) throws Exception;

}

接口ViewResolver里面有一個方法:resolveViewName,可以根據(jù)邏輯視圖名viewName返回一個View實例。

public interface View{

 void render(@Nullable Map model, HttpServletRequest var2, HttpServletResponse var3) throws Exception;

}

View接口里面有一個方法render,可以將數(shù)據(jù)model渲染到視圖。

六:中央控制器根據(jù)View渲染視圖(將模型填充到視圖),并響應(yīng)給用戶。

以上就是Springmvc框架的執(zhí)行流程了,看完之后是否有所收獲呢?如果想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊!


文章標(biāo)題:Springmvc框架是怎樣執(zhí)行的
標(biāo)題來源:http://weahome.cn/article/ppjsdi.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部