Spring MVC
Spring MVC特性
- 清晰的角色劃分:控制器(controller)、驗證器(validator)、 命令對象(command object)、表單對象(form object)、模型對象(model object)、 分發器(DispatcherServlet)、 處理器映射(handler mapping)、視圖解析器(view resolver)等等。 每一個角色都可以由一個專門的對象來實現。
- 強大而直接的配置方式:將框架類和業務類都能作爲Bean配置,支持跨多個context的引用,例如,在web控制器中對業務對象和驗證器(validator)的引用。
- 可適配、非侵入、靈活:使用一個簡單的帶參數註解,即可定義控制器方法簽名。參數傳入用@RequestParam,@RequestHeader,@PathVariable等
- 可重用的業務代碼:可以使用現有的業務對象作爲命令或表單對象,而不需要去擴展某個特定框架的基類。
- 可定製的綁定(binding) 和驗證(validation):比如將類型不匹配作爲應用級的驗證錯誤, 這可以保存錯誤的值。再比如本地化的日期和數字綁定等等。在其他某些框架中,你只能使用字符串表單對象, 需要手動解析它並轉換到業務對象。
- 控制映射和視圖解析:控制映射轉換,從最簡單的URL映射, 到複雜的、專用的定製策略映射均可。與某些web MVC框架強制開發人員使用單一特定技術相比,Spring顯得更加靈活。
- 靈活的model轉換:在SpringMVC框架中,使用基於Map的 鍵/值對來達到輕易地與各種視圖技術的集成。
- 可定製本地化(locale),定製時間區域和主題(theme)解析。支持在JSP中使用無Spring標籤庫的JSP,支持JSTL,支持Velocity等等。
- 簡單而強大的JSP標籤庫(Spring Tag Library):支持包括諸如數據綁定和主題之類的許多功能。
- 支持JSP表單標籤庫
- Spring Bean的生命週期可以與當前的HTTP Request或者HTTP Session綁定
MVC架構
Spring MVC ——HelloWorld案例
一、創建maven web工程
二、引入spring-webmvc依賴
三、web.xml配置前端控制器
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- springmvc默認的配置文件在WEB-INF下的名稱爲servlet的名字-servelt.xml -->
<!-- 如果修改默認的位置和名字需要配置servlet的init-param在這裏修改 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
<!-- 配置tomcat啓動時啓動前端控制器 -->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
四、Springmvc的配置文件
<context:component-scan base-package="com.tjetc"></context:component-scan>
<!-- 視圖解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
五、HelloController
@Controller//控制層,納入spring容器管理
public class HelloController {
@RequestMapping("/hello")
public String hello(String name,Model model) {
System.out.println(name);
model.addAttribute("name","Hello "+ name);
return "hello";//視圖物理位置:/hello.jsp
}
}
六、hello.jsp
<body>
${name}
</body>
什麼是SpringMVC框架
Spring MVC屬於SpringFrameWork的後續產品,已經融合在Spring Web Flow裏面。Spring 框架提供了構建 Web 應用程序的全功能 MVC 模塊。
Spring MVC是一種基於Java的實現了Web MVC設計模式的請求驅動類型的輕量級Web框架,即使用了MVC架構模式的思想,將Web層進行職責解耦,基於請求驅動指的就是使用請求-響應模型,SpringMVC框架的目的就是幫助我們簡化開發。
Spring MVC執行流程
- 用戶發送請求至前端控制器DispatcherServlet。
- DispatcherServlet收到請求調用HandlerMapping處理器映射器。
- 處理器映射器找到具體的處理器(可以根據xml配置、註解進行查找),生成處理器對象及處理器攔截器(如果有則生成)一併返回給DispatcherServlet。
- DispatcherServlet調用HandlerAdapter處理器適配器。
- HandlerAdapter經過適配調用具體的處理器(Controller,也叫後端控制器)。
- Controller執行完成返回ModelAndView。
- HandlerAdapter將controller執行結果ModelAndView返回給DispatcherServlet。
- DispatcherServlet將ModelAndView傳給ViewReslover視圖解析器。
- ViewReslover解析後返回具體View。
- DispatcherServlet根據View進行渲染視圖(即將模型數據填充至視圖中)。
- DispatcherServlet響應用戶。
SpringMVC組件功能介紹
1、前端控制器DispatcherServlet(不需要工程師開發),由框架提供
作用:接收請求,響應結果,相當於轉發器,中央處理器。有了dispatcherServlet減少了其它組件之間的耦合度。
用戶請求到達前端控制器,它就相當於mvc模式中的c,dispatcherServlet是整個流程控制的中心,由它調用其它組件處理用戶的請求,dispatcherServlet的存在降低了組件之間的耦合性。
2、處理器映射器HandlerMapping(不需要工程師開發),由框架提供
作用:根據請求的url查找Handler
HandlerMapping負責根據用戶請求找到Handler即處理器,springmvc提供了不同的映射器實現不同的映射方式,例如:配置文件方式,實現接口方式,註解方式等。
3、處理器適配器HandlerAdapter(不需要工程師開發)
作用:按照特定規則(HandlerAdapter要求的規則)去執行Handler
通過HandlerAdapter對處理器進行執行,這是適配器模式的應用,通過擴展適配器可以對更多類型的處理器進行執行。
4、處理器Handler(需要工程師開發)
注意:編寫Handler時按照HandlerAdapter的要求去做,這樣適配器纔可以去正確執行Handler
Handler 是繼DispatcherServlet前端控制器的後端控制器,在DispatcherServlet的控制下Handler對具體的用戶請求進行處理。由於Handler涉及到具體的用戶業務請求,所以一般情況需要工程師根據業務需求開發Handler。
5、視圖解析器View resolver(不需要工程師開發),由框架提供
作用:進行視圖解析,根據邏輯視圖名解析成真正的視圖(view)
View Resolver負責將處理結果生成View視圖,View Resolver首先根據邏輯視圖名解析成物理視圖名即具體的頁面地址,再生成View視圖對象,最後對View進行渲染將處理結果通過頁面展示給用戶。springmvc框架提供了很多的View視圖類型,包括:jstlView、freemarkerView、pdfView等。
一般情況下需要通過頁面標籤或頁面模版技術將模型數據通過頁面展示給用戶,需要由工程師根據業務需求開發具體的頁面。
6、視圖View(需要工程師開發jsp…)
View是一個接口,實現類支持不同的View類型(jsp、freemarker、pdf…)