本文源碼:GitHub·點這里 || GitEE·點這里
成都創(chuàng)新互聯(lián)公司主營鎮(zhèn)雄網(wǎng)站建設的網(wǎng)絡公司,主營網(wǎng)站建設方案,成都APP應用開發(fā),鎮(zhèn)雄h5重慶小程序開發(fā)公司搭建,鎮(zhèn)雄網(wǎng)站營銷推廣歡迎鎮(zhèn)雄等地區(qū)企業(yè)咨詢MVC是一種軟件設計典范,用一種業(yè)務邏輯、數(shù)據(jù)、界面顯示分離的方法組織代碼,將業(yè)務邏輯聚集到一個組件里面,在改進和個性化定制界面及用戶交互的同時,不需要重新編寫業(yè)務邏輯,MVC分層有助于管理和架構(gòu)復雜的應用程序
Model
模型就是數(shù)據(jù),應用程序的核心。
View
回顯數(shù)據(jù)的界面,例如JSP就是用來展示模型中的數(shù)據(jù)。
Controller
控制器的作用就是根據(jù)入?yún)ⅲ巡煌捻憫獢?shù)據(jù)(Model
),顯示在不同的視圖(View
)上。
SpringMVC
是一種基于Java
實現(xiàn)的MVC
設計模式的請求驅(qū)動類型的輕量級Web
框架,出自Spring
框架全家桶,與Spring
框架無縫整合,使用了MVC
架構(gòu)模式的思想,將Web
層進行職責解耦。
結(jié)構(gòu)松散,幾乎可以在SpringMVC
中使用各類視圖,各個模塊分離而且耦合度非常低,且易于擴展。與Spring
無縫集成,且簡單,靈活,容易上手。
(1)、發(fā)起請求到前端控制器DispatcherServlet
;
(2)、前端控制器請求HandlerMapping
查找,Handler
可以根據(jù)xml
配置、注解進行查找;
(3)、處理器映射器HandlerMapping
向前端控制器返回Handler
;
(4)、前端控制器調(diào)用處理器適配器去執(zhí)行Handler
;
(5)、處理器適配器去執(zhí)行Handler
;
(6)、Handler
執(zhí)行完成給適配器返回ModelAndView
;
(7)、處理器適配器向前端控制器返回ModelAndView
,ModelAndView
是springmvc
框架的一個底層對象,包括Model
和view
;
(8)、前端控制器請求視圖解析器去進行視圖解析,根據(jù)邏輯視圖名解析成真正的視圖 ;
(9)、視圖解析器向前端控制器返回View
;
(10)、前端控制器進行視圖渲染,視圖渲染將模型數(shù)據(jù)(在ModelAndView
對象中)填充到request
域中;
(11)、前端控制器向用戶響應結(jié)果 ;
DispatcherServlet
:請求離開瀏覽器后,最先到達的就是DispatcherServlet,是整個流程控制的中心,作用接收請求,響應結(jié)果,相當于轉(zhuǎn)發(fā)器,中央處理器。減少各個組件之間的耦合度。
HandlerMapping
:根據(jù)請求的url路由到指定接口,用戶請求找到Handler處理器,springmvc提供不同類型映射器,例如:Xml配置方式,注解方式等。
HandlerAdapter
:按照特定規(guī)則去執(zhí)行Handler,SpringMvc支持多種處理器,各種處理器中的處理方法各不相同,為了解決適應多種處理器,就出現(xiàn)了處理器適配器。
Handler
:處理用戶請求,涉及具體業(yè)務邏輯,需要程序員根據(jù)業(yè)務需求開發(fā)。編寫Handler時按照HandlerAdapter的規(guī)則開發(fā),這樣適配器才可以正確執(zhí)行Handler。
ViewResolver
:負責將請求的響應結(jié)果生成View,根據(jù)邏輯視圖名解析成物理視圖名,就是具體頁面地址,生成View視圖對象,對View進行渲染,通過頁面展示給用戶。
View
:SpringMvc框架提供很多的View視圖類型的支持,包括:jsp、freemarker、pdf等。通過頁面標簽或頁面模版解析模型數(shù)據(jù)回顯到頁面,需要根據(jù)業(yè)務開發(fā)具體頁面。
<!-- 掃描文件 -->
<context:component-scan base-package="com.spring.mvc.controller" />
<!-- MVC默認的注解映射的方式 -->
<mvc:annotation-driven />
<mvc:default-servlet-handler/>
<!-- 視圖解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/page/" />
<property name="suffix" value=".jsp" />
</bean>
<servlet>
<servlet-name>spring-mvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-mvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>spring-mvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
@Controller
public class HelloController {
@RequestMapping("/getInfo")
public @ResponseBody String getInfo (String name){
return name ;
}
}
@Controller
標記一個類是Handler,也就是開發(fā)的Controller,然后使用@RequestMapping或其他相關注解(@GetMapping、@PostMapping、@PutMapping、@DeleteMapping),用來關聯(lián)請求和Controller方法之間的映射關系,這樣的Controller 就可以被請求訪問。
@RequestMapping
處理請求地址映射的注解,可作用于類或方法上。用于類上,表示類中的所有響應請求的方法都是以類上標注地址作為父路徑。
@requestParam
主要用于在SpringMvc框架的控制層獲取參數(shù),三個常用參數(shù):defaultValue表示設置默認值,required 通過boolean設置是否是必須要傳入的參數(shù),value值表示傳入的參數(shù)名稱。
@RequestBody
接收請求體中傳遞給后端的Json字符串數(shù)據(jù)的,GET方式無請求體,所以使用@RequestBody接收數(shù)據(jù)時,不能使用GET方式提交數(shù)據(jù),需要用POST方式進行提交。
@ResponseBody
該注解用于方法的返回對象,可以通過配置轉(zhuǎn)換器為指定數(shù)據(jù)響應格式,如果希望返回的數(shù)據(jù)不是View試圖頁面,而是指定數(shù)據(jù)格式的時候使用,例如:Json、Xml等。
@Autowired
按照類型(byType)裝配依賴對象,默認情況下它要求依賴對象必須存在,如果允許null值,可以設置它的required屬性為false。如果想使用按照名稱(byName)來裝配,可以結(jié)合@Qualifier注解一起使用。
@Resource
按照ByName自動注入,需要導入包javax.annotation.Resource。@Resource有兩個重要的屬性:name和type,而Spring將@Resource注解的name屬性解析為bean的名字,而type屬性則解析為bean的類型。
@PathVariable
用于將請求URL中的模板變量映射到功能處理方法的參數(shù)上,即取出uri模板中的變量作為參數(shù)。
@RequestMapping("/getSum")
public Integer getSum (int a,int b){
return a+b ;
}
測試:
http://localhost:6003/getSum?a=1&b=2
傳參名稱和方法參數(shù)保持一致。
@RequestMapping("/getInfo")
public String getInfo (@RequestParam("name") String var1,
@RequestParam("say") String var2){
return var1+":"+var2 ;
}
測試:
http://localhost:6003/getInfo?name=cica&say=hello
傳參名和 @RequestParam 指定的參數(shù)名要對應。
@GetMapping("/getArray")
public String getArray (String[] ids){
return ids[0]+"-"+ids[1] ;
}
測試:
http://localhost:6003/getArray?ids=2&ids=3
傳遞并解析數(shù)組類型的參數(shù)格式。
@RequestMapping("/getMap")
public String getMap (@RequestParam Map<String,String> paramMap){
return paramMap.get("name") ;
}
測試:
http://localhost:6003/getCityEntity?province=浙江&name=杭州
這里以Post方式將相關參數(shù)傳遞CityEntity實體對象中。
@PostMapping("/getCityEntity")
public CityEntity getCityEntity (CityEntity cityEntity){
return cityEntity ;
}
測試:
http://localhost:6003/getCityEntity?province=浙江&name=杭州
這里以Post方式將相關參數(shù)傳遞CityEntity實體對象中。
@GetMapping("/getId/{id}")
public String getId (@PathVariable("id") Integer id){
return "id="+id ;
}
測試:
http://localhost:6003/getId/1
RestFul 風格參數(shù)映射。
GitHub·地址
https://github.com/cicadasmile/spring-mvc-parent
GitEE·地址
https://gitee.com/cicadasmile/spring-mvc-parent
另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。
本文標題:Spring框架基礎(06):Mvc架構(gòu)模式簡介,執(zhí)行流程詳解-創(chuàng)新互聯(lián)
文章分享:http://aaarwkj.com/article12/phdgc.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供云服務器、動態(tài)網(wǎng)站、企業(yè)建站、手機網(wǎng)站建設、建站公司、定制網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容