如何理解SpringMVC
MVC是我們開發WEB應用程序的通用架構方式
MVC的核心思想是業務數據抽取和業務數據呈現相分離。
MVC:M(Model)+V(View)+C(Controller)
M(模型層):業務數據的信息表示,通常是業務實體
V(視圖層):為用戶呈現數據的頁面
C(控制層):調用業務邏輯產生合適的數據(Model),同時傳遞數據(Model)給視圖層(View)呈現給用戶
MVC:是一種架構模式,將業務邏輯和頁面展示分離,使程序分層、分工合作,既相互獨立,又協同合作。
二、SpringMVC核心組件2.1、DispatcherServlet前端控制器,核心
作用:接收請求,響應結果,相當于轉發器,中央處理器,降低了組件之間的耦合性。
用戶發送請求交給DispatcherServlet,DispatcherServlet是整個流程控制的中心,由它調用其他組件處理用戶請求,分發到具體的對應Controller,從而獲取到需要的業務數據Model,Model再通過DispatcherServlet傳遞給View完成頁面呈現;DispatcherServlet的存在降低了組件的之間的耦合性。
2.2、HandlerMapping處理器映射器
作用:根據請求的URL,找到對應的Handler,幫助DispatcherServlet找到對應的Controller
HandlerMapping負責根據用戶請求找到Handler即處理器,SpringMVC提供了多種不同的映射器實現不同的映射方式,例如:配置文件方式,實現接口方式,注解方式等。
2.3、HandlerInterceptorHandler執行前后攔截器
HandlerInterceptor是個接口,里面包含三個方法:preHandle、postHandle、afterCompletion
分別在Handler執行前、執行中、執行完成后執行的三個方法
2.4、HandlerExecutionChainHandlerMapping返回給DispatcherServlet的執行鏈
HandlerMapping返回給DispatcherServlet的不光有Handler,還有HandlerInterceptor
preHandle——>ControllerMethod——>postHandle——>afterCompletion
這個鏈如何實現的呢?使用了Java的反射機制reflection
2.5、HandlerAdapter處理器適配器
作用:將各種Controller適配成DispatcherServlet可以使用的Handler,通過特定規則(HandlerAdapter要求的規則)去執行Handler
通過HandlerAdapter對處理器進行執行,這是適配器模式的應用,通過擴展適配器可以對更多類型的處理器進行執行。
2.6、Handler處理器(需要工程師開發)
注意:編寫Handler時需要HandlerAdapter的要求去做,這樣HandlerAdapter才可以正確執行Handler
Handler是繼DispatcherServlet前端控制器的后臺控制器,在DispatcherServlet控制下對用戶請求進行處理,Handler涉及業務需求,所以需要工程師針對用戶需求進行開發,最終返回業務數據
2.7、ModelAndViewSpringMVC中對Model的一種表示形式
SpringMVC中有Model、Map,但是SpringMVC都會將其轉化為ModelAndView,Model、Map都是ModelAndView的具體表現
視圖解析器
作用:進行視圖解析,根據邏輯視圖名解析成真正的視圖View
ViewResolver負責將處理結果生成View視圖,ViewResolver首先根據邏輯視圖名解析成具體的頁面地址,然后對View進行渲染,將處理結果通過頁面展示給用戶;SpringMVC提供了很多類型View視圖,包括:jstlView、freemarkerView、pdfView、jsp、html等。
2.9、View視圖(需要工程師開發jsp、html)
View是一個接口,實現類支持不同的類型(jsp、html、freemarker、pdf等)
pom:pom.xml配置文件,通過配置完成依賴關系
DependencyManagement:通過<dependencies><dependency></dependency></dependencies>節點配置
3.2、Maven下載安裝3.2.1、Maven下載http://maven.apache.org/download.cgi
添加M2_HOME:指向Maven解壓后文件夾所在根目錄
編輯Path:添加%M2_HOME%bin;
將Maven安裝文件夾下conf文件夾中的settings.xml拷貝一份放在電腦home下的.m2文件夾中
對本地home下.m2中的settings.xml進行修改:
(1)可以修改本地倉庫的存儲位置(可選),默認存儲在home下.m2文件夾中:
(2)可以修改中央倉庫的訪問路徑,修改為英文的這個路徑,可以加快訪問速度,減小中央倉庫壓力:
(1)首先用Eclipse集成Maven,推薦使用4.3(Kepler)及以上版本Eclipse,因為自己集成了Maven插件m2e
(2)配置Eclipse使用剛剛下載的Maven,以及剛剛配置的settings.xml配置文件:
在eclipse中選擇Window-Preferences,彈出以下窗口,然后點擊Installations,在右側點擊Add添加按鈕:
找到下載安裝的Maven文件夾根目錄,點擊Finish:
勾選剛剛添加的maven,點擊Apply,最后點擊OK,配置完成:
(3)創建一個Maven項目:
Eclipse中左側欄右鍵,選擇New-Project
選擇Maven Project,點擊Next:
再次Next:
選擇一個符合類型的,點擊Next:
填寫Group Id,Artifacted Id,Version,Package,點擊Finish:
(4)修改pom.xml
<!-- 加入變量,替代我們用到的工程版本 --> <properties> <commons-lang-version>2.6</commons-lang-version> <slf4j-version>1.7.6</slf4j-version> <spring-version>4.1.3.RELEASE</spring-version> </properties> <!-- 配置依賴管理:讓maven幫我們管理傳遞依賴 --> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-framework-bom</artifactId> <version>${spring.version}</version> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <!-- 配置這個項目所依賴的包 --> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>4.1.3.RELEASE</version> </dependency> <dependency> <groupId>commons-lang</groupId> <artifactId>commons-lang</artifactId> <version>2.6</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.6</version> <exclusions> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> </exclusion> </exclusions> </dependency> </dependencies> <!-- 添加組件:jetty是為了方便測試運行 --> <build> <plugins> <plugin> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-maven-plugin</artifactId> <version>9.2.2.v20140723</version> </plugin> </plugins> </build>
如果當前包本地倉庫,不存在,可以點擊項目,右鍵,選擇Maven-Add Dependency
填寫Group Id, Artifacted Id, Version之后,點擊OK,Maven就會自動從Maven倉庫下載對應版本的jar包到本地倉庫中:
(5)配置WEB應用,修改web.xml
<?xml version='1.0' encoding='UTF-8'?><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-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd'><!-- 激活@Required @Autowired @Resource等標注 --> <context:annotation-config/><!-- DispatcherServlet上下文,只搜索@Controller標注的類,不搜索其他標注的類 --> <context:component-scan base-package='com.ztl.springmvc.controller'> <context:include-filter type='annotation' expression='org.springframework.stereotype.Controller'/> </context:component-scan> <!-- 讓DispatcherServlet啟用基于Annotation的HandlerMapping --> <mvc:annotation-driven/><!-- 將靜態文件指定到某個特殊的文件夾中統一處理 --> <mvc:resources location='/resources/' mapping='/resources/**'/><bean class='org.springframework.web.servlet.view.InternalResourceViewResolver'> <property name='viewClass' value='org.springframework.web.servlet.view.JstlView'/> <property name='prefix' value='/WEB-INF/jsp/'/> <property name='suffix' value='.jsp'/> </bean><bean class='org.springframework.web.servlet.handler.SimpleMappingExceptionResolver'> <property name='exceptionMappings'> <props> <prop key='com.ztl.springmvc.UserException'>error</prop> <prop key='java.lang.NullPointException'>exception</prop> </props> </property> </bean></beans>
(6)創建一個Controller,以及對應的頁面,寫個簡單demo
寫一個HelloMvcController類:
package com.ztl.springmvc.controller; import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping; @Controller@RequestMapping('/hello')public class HelloMvcController {@RequestMapping('/sayhello')public String sayHello(){return 'home';}}
通過pom.xml中配置的jetty插件來進行啟動測試:
使用cmd命令行,找到項目地址,然后找到當前這個模塊項目:
當看見Started Jetty Server時,則代表啟動完成了,可以在瀏覽器訪問了
在瀏覽器地址欄輸入http://localhost:8080/hello/sayhello進行訪問:
以上就是如何理解SpringMVC的詳細內容,更多關于SpringMVC的資料請關注好吧啦網其它相關文章!
相關文章: