成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

SpringMVC框架概覽

IT那活兒 / 2011人閱讀
SpringMVC框架概覽

點擊上方“IT那活兒”公眾號,關(guān)注后了解更多內(nèi)容,不管IT什么活兒,干就完了?。?! 




主流的軟件設計思想——MVC


MVC(Model&View&Controller)是一種軟件設計的思想,它采用持久層模型(Model)-服務層視圖(View)-控制層控制器(controller)的方法把業(yè)務邏輯、數(shù)據(jù)與界面顯示分開。把眾多的業(yè)務邏輯聚集到一個個部件里面,MVC的理念就是把數(shù)據(jù)處理、數(shù)據(jù)展示(界面)和程序/用戶的交互三者分離開的一種編程模式。
  • Model(模型)

    又被稱為數(shù)據(jù)庫持久層,存儲項目所有的數(shù)據(jù)庫文件,獨立于視圖層和控制層。一個模型可以為多個視圖來提供數(shù)據(jù),所以模型的代碼重復性比較低。

  • View(視圖)

    作用是呈現(xiàn)模型,視圖會從模型中拿到需要展現(xiàn)的狀態(tài)以及數(shù)據(jù),對于相同的數(shù)據(jù)可以有多種不同的顯示形式(視圖)。

  • Controller(控制器)

    負責獲取前端頁面請求信息,進行解析并反饋給視圖層,通常情況下一個視圖具有一個控制器,控制器不會輸出也不會做出任何處理,只會接受請求并調(diào)用模型構(gòu)件去處理用戶的請求,然后在確定用哪個視圖去顯示返回的數(shù)據(jù)。

 


Web程序中MVC模式的優(yōu)點

 

1. 耦合性低:視圖(頁面)和業(yè)務層(數(shù)據(jù)處理)分離,一個應用的業(yè)務流程或者業(yè)務規(guī)則的改變只需要改動MVC中的模型即可,不會影響到控制器與視圖。
2. 部署快,成本低:MVC使開發(fā)和維護用戶接口的技術(shù)含量降低。使用MVC模式使開發(fā)時間得到相當大的縮減,它使開發(fā)人員集中精力于業(yè)務邏輯,前端開發(fā)人員集中精力于表現(xiàn)形式上。
3. 方便測試。MVC把一個應用程序按功能分為不同的層次,每個層次獨立性高,在測試時,可以根據(jù)不同層分開測試,大大增加了測試任務的邏輯性。
4. 快速定位錯誤。由于每層之間獨立性高,每層出現(xiàn)錯誤的原因也大不相同,可以根據(jù)錯誤報告迅速定位出哪一層出現(xiàn)錯誤。



Web程序中MVC模式的缺點


1. 不適合小型,中等規(guī)模的應用程序
在一個中小型的應用程序中,強制性的使用MVC進行開發(fā),往往會花費大量時間,并且不能體現(xiàn)MVC的優(yōu)勢,同時會使開發(fā)變得繁瑣。
2. 增加系統(tǒng)結(jié)構(gòu)和實現(xiàn)的復雜性
對于簡單的界面,嚴格遵循MVC,使模型、視圖與控制器分離,會增加結(jié)構(gòu)的復雜性,并可能產(chǎn)生過多的更新操作,降低運行效率。
3. 視圖與控制器間的過于緊密的連接并且降低了視圖對模型數(shù)據(jù)的訪問
視圖與控制器是相互分離,但卻是聯(lián)系緊密的部件,視圖沒有控制器的存在,其應用是很有限的,反之亦然,這樣就妨礙了他們的獨立重用。依據(jù)模型操作接口的不同,視圖可能需要多次調(diào)用才能獲得足夠的顯示數(shù)據(jù)。對未變化數(shù)據(jù)的不必要的頻繁訪問,也將損害操作性能 。



Spring MVC框架

 

現(xiàn)在MVC框架已經(jīng)有很多了,Struts、Webwork,新興的MVC框架有Spring MVC、JSF等等。
Struts1.0是基于webwork的MVC框架,里面有很多類的繼承關(guān)系,耦合性太高,之后推出了struts2.0,但是這個MVC框架對于視圖的解析還是存在一些小的不妥之處,所以產(chǎn)生了Spring MVC。
Spring MVC簡介及特點
Spring MVC采用了松散耦合的可插拔組件結(jié)構(gòu),比其他的MVC框架更具有靈活性和擴展性,Spring MVC通過使用一套注解,使一個Java類成為前端控制器(Controller),不需要實現(xiàn)任何接口,同時,Spring MVC支持RESTFUL形式的URL請求,除此之外,Spring MVC在在數(shù)據(jù)綁定、視圖解析、本地化處理及靜態(tài)資源處理上都有許多不俗的表現(xiàn)。
Spring MVC圍繞DispatcherServlet(前端控制器)為中心展開,DispatcherServlet(前端控制器)是Spring MVC的中樞,和MVC的思想一樣,它負責從視圖獲取用戶請求并且分派給相應的處理器處理,并決定用哪個視圖去把數(shù)據(jù)呈現(xiàn)給給用戶。 



SpringMVC的九大組件

 

1. MultipartResolver(文件處理器),對應的初始化方法是initMultipartResolver(context),用于處理上傳請求。處理方法是將普通的request包裝成MultipartHttpServletRequest,后者可以直接調(diào)用getFile方法獲取File。
2. LocaleResolver(當前環(huán)境處理器),對應的初始化方法是initLocaleResolver(context),這就相當于配置數(shù)據(jù)庫的方言一樣,有了這個就可以對不同區(qū)域的用戶顯示不同的結(jié)果。
SpringMVC主要有兩個地方用到了Locale:一是ViewResolver視圖解析的時候;二是用到國際化資源或者主題的時候。
3. ThemeResolver(主題處理器),對應的初始化方法是initThemeResolver(context),用于解析主題。SpringMVC中一個主題對應一個properties文件,里面存放著跟當前主題相關(guān)的所有資源,如圖片、css樣式等。SpringMVC的主題也支持國際化。
4. HandlerMappings(處理器映射器),對應的初始化方法是initHandlerMappings(context),這就是根據(jù)用戶請求的資源uri來查找Handler的。在SpringMVC中會有很多請求,每個請求都需要一個Handler處理,具體接收到一個請求之后使用哪個Handler進行處理就需要處理器映射器來映射。
5. HandlerAdapters(處理器適配器),對應的初始化方法是initHandlerAdapters(context),從名字上看,它就是一個適配器。Servlet需要的處理方法的結(jié)構(gòu)卻是固定的,都是以request和response為參數(shù)的方法。HandlerAdapters要做的事情是如何讓固定的Servlet處理方法調(diào)用靈活的Handler來進行處理。
6. HandlerExceptionResolvers(異常處理器),對應的初始化方法是initHandlerExceptionResolvers(context),在SpringMVC中就是HandlerExceptionResolver對異常情況進行處理。
7. RequestToViewNameTranslator(視圖名稱翻譯器),對應的初始化方法是initRequestToViewNameTranslator(context),有的Handler處理完后并沒有設置View也沒有設置ViewName,這時就需要從request獲取ViewName了,如何從request中獲取ViewName就是RequestToViewNameTranslator要做的事情了。
8. ViewResolvers(頁面渲染處理器),對應的初始化方法是initViewResolvers(context),ViewResolver用來將String類型的視圖名和Locale解析為View類型的視圖。View是用來渲染頁面的,也就是將程序返回的參數(shù)填入模板里,生成html(也可能是其它類型)文件。
9. FlashMapManager(參數(shù)傳遞管理器),對應的初始化方法是initFlashMapManager(context),用來管理FlashMap的,F(xiàn)lashMap主要用在redirect重定向中傳遞參數(shù)。

 


Spring MVC的執(zhí)行步驟

 

  • 發(fā)起請求到前端控制器(DispatcherServlet)。

  • 前端控制器請求HandlerMapping查找 Handler,可以根據(jù)xml配置、注解進行查找。

  • 處理器映射器HandlerMapping向前端控制器返回Handler。

  • 前端控制器調(diào)用處理器適配器去執(zhí)行Handler。

  • 處理器適配器去執(zhí)行Handler。

  • Handler執(zhí)行完成給適配器返回ModelAndView。

  • 處理器適配器向前端控制器返回ModelAndView,ModelAndView是springmvc框架的一個底層對象,包括 Model和view。

  • 前端控制器請求視圖解析器去進行視圖解析,根據(jù)邏輯視圖名解析成真正的視圖(jsp)。

  • 視圖解析器向前端控制器返回View。

  • 前端控制器進行視圖渲染,視圖渲染將模型數(shù)據(jù)(在ModelAndView對象中)填充到request域。

  • 前端控制器向用戶響應結(jié)果。

 


SpringMVC在IDEA中的配置

 

1. 首先,導入SpringMVC需要的jar包。
2. 添加Web.xml配置文件中關(guān)于SpringMVC的配置。
<servlet>
<servlet-name>springmvcservlet-name>

<servlet-class>org.springframework.web.servlet.DispatcherServletservlet-class>
<init-param>
<param-name>contextConfigLocationparam-name>
<param-value>classpath:springmvc-servlet.xmlparam-value>
init-param>

servlet>

<servlet-mapping>
<servlet-name>springmvcservlet-name>
<url-pattern>/url-pattern>
servlet-mapping>
3. 在resources下添加springmvc-servlet.xml配置文件。
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd"
>


<context:component-scan base-package="test.SpringMVC"/>

<mvc:default-servlet-handler />

<mvc:annotation-driven />


<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
id="internalResourceViewResolver">


<property name="prefix" value="/WEB-INF/jsp/" />

<property name="suffix" value=".jsp" />
bean>

beans>
4. 在WEB-INF文件夾下創(chuàng)建名為jsp的文件夾,用來存放jsp視圖。創(chuàng)建一個hello.jsp,在body中添加“Hello World”。
5. 建立包及Controller。
6. 編寫Controller代碼,如下所示:
@Controller
@RequestMapping("/mvc")
public class mvcController {
@RequestMapping("/hello")
public String hello(){
return "hello";
}
}

 


SpringMVC的注解

 

@Controller
    負責注冊一個bean 到spring 上下文中。
@RequestMapping
    注解為控制器指定可以處理哪些 URL 請求。
@RequestBody
    該注解用于讀取Request請求的body部分數(shù)據(jù),使用系統(tǒng)默認配置的HttpMessageConverter進行解析,然后把相應的數(shù)據(jù)綁定到要返回的對象上 ,再把HttpMessageConverter返回的對象數(shù)據(jù)綁定到 controller中方法的參數(shù)上。
@ResponseBody
    該注解用于將Controller的方法返回的對象,通過適當?shù)腍ttpMessageConverter轉(zhuǎn)換為指定格式后,寫入到Response對象的body數(shù)據(jù)區(qū)。
@ModelAttribute    
    在方法定義上使用 @ModelAttribute 注解:Spring MVC 在調(diào)用目標處理方法前,會先逐個調(diào)用在方法級上標注了@ModelAttribute 的方法。
    在方法的入?yún)⑶笆褂?@ModelAttribute 注解:可以從隱含對象中獲取隱含的模型數(shù)據(jù)中獲取對象,再將請求參數(shù)綁定到對象中,再傳入入?yún)⒎椒ㄈ雲(yún)ο筇砑拥侥P椭小?/span>
@RequestParam 
    在處理方法入?yún)⑻幨褂?@RequestParam 可以把請求參數(shù)傳遞給請求方法。
@PathVariable
    綁定 URL 占位符到參數(shù)。
@ExceptionHandler
    注解到方法上,出現(xiàn)異常時會執(zhí)行該方法。
@ControllerAdvice
    使一個Contoller成為全局的異常處理類,類中用@ExceptionHandler方法注解的方法可以處理所有Controller發(fā)生的異常。

END



本文作者:朱凱方

本文來源:IT那活兒(上海新炬王翦團隊)

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/129476.html

相關(guān)文章

  • 貓頭鷹的深夜翻譯:為什么要使用Spring Boot?

    摘要:初次使用的人往往會困惑,不知道該使用哪種方法。目前來說,團隊推薦使用基于的方法來提供更高的靈活性。配置,從而在應用啟動時執(zhí)行腳本來初始化數(shù)據(jù)庫。目前為止我們沒有任何消息需要配置,所以只在文件夾中創(chuàng)建一個空的文件。將配置為,它包含的上下文。 前言 spring是一個用于創(chuàng)建web和企業(yè)應用的一個很流行的框架。和別的只關(guān)注于一點的框架不同,Spring框架通過投資并組合項目提供了大量的功能...

    Jaden 評論0 收藏0
  • 兩年了,我寫了這些干貨!

    摘要:開公眾號差不多兩年了,有不少原創(chuàng)教程,當原創(chuàng)越來越多時,大家搜索起來就很不方便,因此做了一個索引幫助大家快速找到需要的文章系列處理登錄請求前后端分離一使用完美處理權(quán)限問題前后端分離二使用完美處理權(quán)限問題前后端分離三中密碼加鹽與中異常統(tǒng)一處理 開公眾號差不多兩年了,有不少原創(chuàng)教程,當原創(chuàng)越來越多時,大家搜索起來就很不方便,因此做了一個索引幫助大家快速找到需要的文章! Spring Boo...

    huayeluoliuhen 評論0 收藏0
  • 不用 Spring Security 可否?試試這個小而美的安全框架

    摘要:寫在前面在一款應用的整個生命周期,我們都會談及該應用的數(shù)據(jù)安全問題。用戶的合法性與數(shù)據(jù)的可見性是數(shù)據(jù)安全中非常重要的一部分。 寫在前面 在一款應用的整個生命周期,我們都會談及該應用的數(shù)據(jù)安全問題。用戶的合法性與數(shù)據(jù)的可見性是數(shù)據(jù)安全中非常重要的一部分。但是,一方面,不同的應用對于數(shù)據(jù)的合法性和可見性要求的維度與粒度都有所區(qū)別;另一方面,以當前微服務、多服務的架構(gòu)方式,如何共享Sessi...

    toddmark 評論0 收藏0
  • 手撕面試官系列(二):開源框架面試題Spring+SpringMVC+MyBatis

    摘要:跳槽時時刻刻都在發(fā)生,但是我建議大家跳槽之前,先想清楚為什么要跳槽。切不可跟風,看到同事一個個都走了,自己也盲目的開始面試起來期間也沒有準備充分,到底是因為技術(shù)原因影響自己的發(fā)展,偏移自己規(guī)劃的軌跡,還是錢給少了,不受重視。 跳槽時時刻刻都在發(fā)生,但是我建議大家跳槽之前,先想清楚為什么要跳槽。切不可跟風,看到同事一個個都走了,自己也盲目的開始面試起來(期間也沒有準備充分),到底是因為技...

    Flink_China 評論0 收藏0
  • springmvc簡介和快速搭建

    摘要:簡介和眾多其他框架一樣,它基于的設計理念,此外,它采用可松散耦合可插拔組件結(jié)構(gòu),比其他框架更具擴展性和靈活性。框架圍繞核心展開,是框架的總導演,總策劃,它負責截獲請求并將其分派給相應的處理器處理。 springmvc簡介 springmvc和眾多其他web框架一樣,它基于MVC的設計理念,此外,它采用可松散耦合可插拔組件結(jié)構(gòu),比其他MVC框架更具擴展性和靈活性。 springmvc通過...

    Sike 評論0 收藏0

發(fā)表評論

0條評論

IT那活兒

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<