如何理解SpringMVC
一、SpringMVC簡介
MVC是我們開發(fā)WEB應(yīng)用程序的通用架構(gòu)方式

MVC的核心思想是業(yè)務(wù)數(shù)據(jù)抽取和業(yè)務(wù)數(shù)據(jù)呈現(xiàn)相分離。
MVC:M(Model)+V(View)+C(Controller)
M(模型層):業(yè)務(wù)數(shù)據(jù)的信息表示,通常是業(yè)務(wù)實體
V(視圖層):為用戶呈現(xiàn)數(shù)據(jù)的頁面
C(控制層):調(diào)用業(yè)務(wù)邏輯產(chǎn)生合適的數(shù)據(jù)(Model),同時傳遞數(shù)據(jù)(Model)給視圖層(View)呈現(xiàn)給用戶
MVC:是一種架構(gòu)模式,將業(yè)務(wù)邏輯和頁面展示分離,使程序分層、分工合作,既相互獨立,又協(xié)同合作。
二、SpringMVC核心組件
2.1、DispatcherServlet
前端控制器,核心
作用:接收請求,響應(yīng)結(jié)果,相當于轉(zhuǎn)發(fā)器,中央處理器,降低了組件之間的耦合性。
用戶發(fā)送請求交給DispatcherServlet,DispatcherServlet是整個流程控制的中心,由它調(diào)用其他組件處理用戶請求,分發(fā)到具體的對應(yīng)Controller,從而獲取到需要的業(yè)務(wù)數(shù)據(jù)Model,Model再通過DispatcherServlet傳遞給View完成頁面呈現(xiàn);DispatcherServlet的存在降低了組件的之間的耦合性。
2.2、HandlerMapping
處理器映射器
作用:根據(jù)請求的URL,找到對應(yīng)的Handler,幫助DispatcherServlet找到對應(yīng)的Controller
HandlerMapping負責根據(jù)用戶請求找到Handler即處理器,SpringMVC提供了多種不同的映射器實現(xiàn)不同的映射方式,例如:配置文件方式,實現(xiàn)接口方式,注解方式等。
2.3、HandlerInterceptor
Handler執(zhí)行前后攔截器
HandlerInterceptor是個接口,里面包含三個方法:preHandle、postHandle、afterCompletion
分別在Handler執(zhí)行前、執(zhí)行中、執(zhí)行完成后執(zhí)行的三個方法
2.4、HandlerExecutionChain
HandlerMapping返回給DispatcherServlet的執(zhí)行鏈
HandlerMapping返回給DispatcherServlet的不光有Handler,還有HandlerInterceptor
preHandle——>ControllerMethod——>postHandle——>afterCompletion

這個鏈如何實現(xiàn)的呢?使用了Java的反射機制reflection
2.5、HandlerAdapter
處理器適配器
作用:將各種Controller適配成DispatcherServlet可以使用的Handler,通過特定規(guī)則(HandlerAdapter要求的規(guī)則)去執(zhí)行Handler
通過HandlerAdapter對處理器進行執(zhí)行,這是適配器模式的應(yīng)用,通過擴展適配器可以對更多類型的處理器進行執(zhí)行。
2.6、Handler
處理器(需要工程師開發(fā))
注意:編寫Handler時需要HandlerAdapter的要求去做,這樣HandlerAdapter才可以正確執(zhí)行Handler
Handler是繼DispatcherServlet前端控制器的后臺控制器,在DispatcherServlet控制下對用戶請求進行處理,Handler涉及業(yè)務(wù)需求,所以需要工程師針對用戶需求進行開發(fā),最終返回業(yè)務(wù)數(shù)據(jù)
2.7、ModelAndView
SpringMVC中對Model的一種表示形式
SpringMVC中有Model、Map,但是SpringMVC都會將其轉(zhuǎn)化為ModelAndView,Model、Map都是ModelAndView的具體表現(xiàn)

2.8、ViewResolver
視圖解析器
作用:進行視圖解析,根據(jù)邏輯視圖名解析成真正的視圖View
ViewResolver負責將處理結(jié)果生成View視圖,ViewResolver首先根據(jù)邏輯視圖名解析成具體的頁面地址,然后對View進行渲染,將處理結(jié)果通過頁面展示給用戶;SpringMVC提供了很多類型View視圖,包括:jstlView、freemarkerView、pdfView、jsp、html等。
2.9、View
視圖(需要工程師開發(fā)jsp、html)
View是一個接口,實現(xiàn)類支持不同的類型(jsp、html、freemarker、pdf等)

三、配置Maven環(huán)境變量
3.1、Maven介紹
pom:pom.xml配置文件,通過配置完成依賴關(guān)系
DependencyManagement:通過<dependencies><dependency></dependency></dependencies>節(jié)點配置
3.2、Maven下載安裝
3.2.1、Maven下載
http://maven.apache.org/download.cgi

3.2.2、配置環(huán)境變量
添加M2_HOME:指向Maven解壓后文件夾所在根目錄
編輯Path:添加%M2_HOME%\bin;


3.2.3、配置Maven配置文件(本地倉庫路徑、鏡像)
將Maven安裝文件夾下conf文件夾中的settings.xml拷貝一份放在電腦home下的.m2文件夾中

對本地home下.m2中的settings.xml進行修改:
(1)可以修改本地倉庫的存儲位置(可選),默認存儲在home下.m2文件夾中:

(2)可以修改中央倉庫的訪問路徑,修改為英文的這個路徑,可以加快訪問速度,減小中央倉庫壓力:

3.2.4、用Maven創(chuàng)建項目
(1)首先用Eclipse集成Maven,推薦使用4.3(Kepler)及以上版本Eclipse,因為自己集成了Maven插件m2e
(2)配置Eclipse使用剛剛下載的Maven,以及剛剛配置的settings.xml配置文件:
在eclipse中選擇Window-Preferences,彈出以下窗口,然后點擊Installations,在右側(cè)點擊Add添加按鈕:

找到下載安裝的Maven文件夾根目錄,點擊Finish:

勾選剛剛添加的maven,點擊Apply,最后點擊OK,配置完成:

(3)創(chuàng)建一個Maven項目:
Eclipse中左側(cè)欄右鍵,選擇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倉庫下載對應(yīng)版本的jar包到本地倉庫中:

(5)配置WEB應(yīng)用,修改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/>
<!-- 將靜態(tài)文件指定到某個特殊的文件夾中統(tǒng)一處理 -->
<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)創(chuàng)建一個Controller,以及對應(yīng)的頁面,寫個簡單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的詳細內(nèi)容,更多關(guān)于SpringMVC的資料請關(guān)注腳本之家其它相關(guān)文章!
- SpringMVC集成redis配置的多種實現(xiàn)方法
- 淺談springMVC中controller的幾種返回類型
- Spring MVC獲取HTTP請求頭的兩種方式小結(jié)
- 解決SpringMVC項目連接RabbitMQ出錯的問題
- SpringMVC和rabbitmq集成的使用案例
- SpringMVC異步處理操作(Callable和DeferredResult)
- Spring MVC數(shù)據(jù)處理和亂碼問題詳解
- springmvc 結(jié)合ajax批量新增的實現(xiàn)方法
- 基于IDEA創(chuàng)建SpringMVC項目流程圖解
- SpringMVC使用@PathVariable接收參數(shù)過程解析
相關(guān)文章
java數(shù)據(jù)結(jié)構(gòu)與算法之馬踏棋盤
這篇文章主要為大家詳細介紹了java數(shù)據(jù)結(jié)構(gòu)與算法之馬踏棋盤,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-02-02
java實現(xiàn)在普通類中注入service或mapper
這篇文章主要介紹了java實現(xiàn)在普通類中注入service或mapper的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-07-07
InterlliJ IDEA2020新建java web項目找不到Static Web的解決
這篇文章主要介紹了InterlliJ IDEA2020新建java web項目找不到Static Web的解決,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧2020-09-09
Spring MVC 基于URL的映射規(guī)則(注解版)
這篇文章主要介紹了Spring MVC 基于URL的映射規(guī)則(注解版) ,詳細的介紹了幾種方式,有興趣的可以了解一下2017-05-05
詳解poi+springmvc+springjdbc導(dǎo)入導(dǎo)出excel實例
本篇文章主要介紹了poi+springmvc+springjdbc導(dǎo)入導(dǎo)出excel實例,非常具有實用價值,需要的朋友可以參考下。2017-01-01
mybatis generator只能生成insert和selectAll的操作
這篇文章主要介紹了mybatis generator只能生成insert和selectAll的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-09-09

