最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

如何理解SpringMVC

 更新時(shí)間:2021年06月25日 10:32:18   作者:ZhaoTingLong  
Spring Web MVC是一種基于Java的實(shí)現(xiàn)了Web MVC設(shè)計(jì)模式的請求驅(qū)動(dòng)類型的輕量級Web框架,即使用了MVC架構(gòu)模式的思想,將web層進(jìn)行職責(zé)解耦,基于請求驅(qū)動(dòng)指的就是使用請求-響應(yīng)模型,框架的目的就是幫助我們簡化開發(fā)

一、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ù)實(shí)體

V(視圖層):為用戶呈現(xiàn)數(shù)據(jù)的頁面

C(控制層):調(diào)用業(yè)務(wù)邏輯產(chǎn)生合適的數(shù)據(jù)(Model),同時(shí)傳遞數(shù)據(jù)(Model)給視圖層(View)呈現(xiàn)給用戶

MVC:是一種架構(gòu)模式,將業(yè)務(wù)邏輯和頁面展示分離,使程序分層、分工合作,既相互獨(dú)立,又協(xié)同合作。

二、SpringMVC核心組件

2.1、DispatcherServlet

前端控制器,核心

作用:接收請求,響應(yīng)結(jié)果,相當(dāng)于轉(zhuǎn)發(fā)器,中央處理器,降低了組件之間的耦合性。

用戶發(fā)送請求交給DispatcherServlet,DispatcherServlet是整個(gè)流程控制的中心,由它調(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負(fù)責(zé)根據(jù)用戶請求找到Handler即處理器,SpringMVC提供了多種不同的映射器實(shí)現(xiàn)不同的映射方式,例如:配置文件方式,實(shí)現(xiàn)接口方式,注解方式等。

2.3、HandlerInterceptor

Handler執(zhí)行前后攔截器

HandlerInterceptor是個(gè)接口,里面包含三個(gè)方法:preHandle、postHandle、afterCompletion

分別在Handler執(zhí)行前、執(zhí)行中、執(zhí)行完成后執(zhí)行的三個(gè)方法

2.4、HandlerExecutionChain

HandlerMapping返回給DispatcherServlet的執(zhí)行鏈

HandlerMapping返回給DispatcherServlet的不光有Handler,還有HandlerInterceptor

preHandle——>ControllerMethod——>postHandle——>afterCompletion

這個(gè)鏈如何實(shí)現(xiàn)的呢?使用了Java的反射機(jī)制reflection

2.5、HandlerAdapter

處理器適配器

作用:將各種Controller適配成DispatcherServlet可以使用的Handler,通過特定規(guī)則(HandlerAdapter要求的規(guī)則)去執(zhí)行Handler

通過HandlerAdapter對處理器進(jìn)行執(zhí)行,這是適配器模式的應(yīng)用,通過擴(kuò)展適配器可以對更多類型的處理器進(jìn)行執(zhí)行。

2.6、Handler

處理器(需要工程師開發(fā))

注意:編寫Handler時(shí)需要HandlerAdapter的要求去做,這樣HandlerAdapter才可以正確執(zhí)行Handler

Handler是繼DispatcherServlet前端控制器的后臺控制器,在DispatcherServlet控制下對用戶請求進(jìn)行處理,Handler涉及業(yè)務(wù)需求,所以需要工程師針對用戶需求進(jìn)行開發(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ìn)行視圖解析,根據(jù)邏輯視圖名解析成真正的視圖View

ViewResolver負(fù)責(zé)將處理結(jié)果生成View視圖,ViewResolver首先根據(jù)邏輯視圖名解析成具體的頁面地址,然后對View進(jìn)行渲染,將處理結(jié)果通過頁面展示給用戶;SpringMVC提供了很多類型View視圖,包括:jstlView、freemarkerView、pdfView、jsp、html等。

2.9、View

視圖(需要工程師開發(fā)jsp、html)

View是一個(gè)接口,實(shí)現(xiàn)類支持不同的類型(jsp、html、freemarker、pdf等)

三、配置Maven環(huán)境變量

3.1、Maven介紹

pom:pom.xml配置文件,通過配置完成依賴關(guān)系

DependencyManagement:通過<dependencies><dependency></dependency></dependencies>節(jié)點(diǎn)配置

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進(jìn)行修改:

(1)可以修改本地倉庫的存儲位置(可選),默認(rèn)存儲在home下.m2文件夾中:

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

3.2.4、用Maven創(chuàng)建項(xiàng)目

(1)首先用Eclipse集成Maven,推薦使用4.3(Kepler)及以上版本Eclipse,因?yàn)樽约杭闪薓aven插件m2e

(2)配置Eclipse使用剛剛下載的Maven,以及剛剛配置的settings.xml配置文件:

    在eclipse中選擇Window-Preferences,彈出以下窗口,然后點(diǎn)擊Installations,在右側(cè)點(diǎn)擊Add添加按鈕:

找到下載安裝的Maven文件夾根目錄,點(diǎn)擊Finish:

勾選剛剛添加的maven,點(diǎn)擊Apply,最后點(diǎn)擊OK,配置完成:

(3)創(chuàng)建一個(gè)Maven項(xiàng)目:

Eclipse中左側(cè)欄右鍵,選擇New-Project

選擇Maven Project,點(diǎn)擊Next:

再次Next:

選擇一個(gè)符合類型的,點(diǎn)擊Next:

填寫Group Id,Artifacted Id,Version,Package,點(diǎn)擊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>
 
 <!-- 配置這個(gè)項(xiàng)目所依賴的包 -->
 <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是為了方便測試運(yùn)行 -->
 <build>
 	<plugins>
 		<plugin>
 			<groupId>org.eclipse.jetty</groupId>
 			<artifactId>jetty-maven-plugin</artifactId>
 			<version>9.2.2.v20140723</version>
 		</plugin>
 	</plugins>
 </build>

如果當(dāng)前包本地倉庫,不存在,可以點(diǎn)擊項(xiàng)目,右鍵,選擇Maven-Add Dependency

填寫Group Id, Artifacted Id, Version之后,點(diǎn)擊OK,Maven就會自動(dòng)從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等標(biāo)注 -->
    <context:annotation-config/>
    
    <!-- DispatcherServlet上下文,只搜索@Controller標(biāo)注的類,不搜索其他標(biāo)注的類 -->
    <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)文件指定到某個(gè)特殊的文件夾中統(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)建一個(gè)Controller,以及對應(yīng)的頁面,寫個(gè)簡單demo

寫一個(gè)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插件來進(jìn)行啟動(dòng)測試:

使用cmd命令行,找到項(xiàng)目地址,然后找到當(dāng)前這個(gè)模塊項(xiàng)目:

當(dāng)看見Started Jetty Server時(shí),則代表啟動(dòng)完成了,可以在瀏覽器訪問了

在瀏覽器地址欄輸入http://localhost:8080/hello/sayhello進(jìn)行訪問:

以上就是如何理解SpringMVC的詳細(xì)內(nèi)容,更多關(guān)于SpringMVC的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • MyBatisPlus查詢報(bào)錯(cuò)Unknow?column?‘id‘?in?‘field?list‘解決分析

    MyBatisPlus查詢報(bào)錯(cuò)Unknow?column?‘id‘?in?‘field?list‘解決分析

    這篇文章主要為大家介紹了MyBatisPlus查詢報(bào)錯(cuò)Unknow?column?‘id‘?in?‘field?list‘解決分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09
  • Java Servlet3.0異步處理問題

    Java Servlet3.0異步處理問題

    這篇文章主要介紹了Java中Servlet3.0異步處理的原理以及遇到的問題分析,需要的朋友參考一下。
    2017-12-12
  • SpringBoot項(xiàng)目啟動(dòng)時(shí)如何讀取配置以及初始化資源

    SpringBoot項(xiàng)目啟動(dòng)時(shí)如何讀取配置以及初始化資源

    這篇文章主要給大家介紹了關(guān)于SpringBoot項(xiàng)目啟動(dòng)時(shí)如何讀取配置以及初始化資源的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者使用SpringBoot具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • java thread start()和run()方法簡析

    java thread start()和run()方法簡析

    本文以java中thread的start()和run()的區(qū)別做詳細(xì)介紹, 需要了解跟多的朋友可以參考下
    2012-11-11
  • Maven在不同的環(huán)境獲取不同配置文件的方法

    Maven在不同的環(huán)境獲取不同配置文件的方法

    這篇文章主要介紹了Maven在不同的環(huán)境獲取不同配置文件的方法,需要的朋友可以參考下
    2023-10-10
  • SpringSecurity 默認(rèn)表單登錄頁展示流程源碼

    SpringSecurity 默認(rèn)表單登錄頁展示流程源碼

    本篇主要講解 SpringSecurity提供的默認(rèn)表單登錄頁 它是如何展示流程,本文圖文并茂給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2020-01-01
  • 在ssm中使用ModelAndView跳轉(zhuǎn)頁面失效的解決

    在ssm中使用ModelAndView跳轉(zhuǎn)頁面失效的解決

    這篇文章主要介紹了在ssm中使用ModelAndView跳轉(zhuǎn)頁面失效的解決,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • 詳解Java8新特性Stream之list轉(zhuǎn)map及問題解決

    詳解Java8新特性Stream之list轉(zhuǎn)map及問題解決

    這篇文章主要介紹了詳解Java8新特性Stream之list轉(zhuǎn)map及問題解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • Java實(shí)例精煉掌握語法

    Java實(shí)例精煉掌握語法

    本章節(jié)我們將為大家介紹?Java?實(shí)現(xiàn)幾大基礎(chǔ)問題,通過實(shí)例學(xué)習(xí)我們可以更快的掌握?Java?的應(yīng)用,感興趣的朋友來看看吧
    2022-04-04
  • java中File與MultipartFile互轉(zhuǎn)代碼示例

    java中File與MultipartFile互轉(zhuǎn)代碼示例

    在Java開發(fā)中,當(dāng)需要將本地File對象轉(zhuǎn)換為MultipartFile對象以處理文件上傳時(shí),可以通過實(shí)現(xiàn)MultipartFile接口或使用CommonsMultipartFile類來實(shí)現(xiàn),本文提供了詳細(xì)的轉(zhuǎn)換方法和代碼示例,需要的朋友可以參考下
    2024-10-10

最新評論

象州县| 大竹县| 安仁县| 伊通| 郴州市| 永嘉县| 交城县| 新沂市| 兴城市| 海丰县| 江山市| 固始县| 绥化市| 太仓市| 汝州市| 常山县| 镇沅| 丰镇市| 巴青县| 金秀| 皮山县| 武鸣县| 桂林市| 日照市| 五寨县| 兴义市| 富平县| 三原县| 仙游县| 固原市| 高州市| 乌拉特中旗| 普陀区| 肇州县| 龙江县| 利辛县| 沙雅县| 静乐县| 郎溪县| 恭城| 陇川县|