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

springMVC RequestMapping注解的實(shí)現(xiàn)過(guò)程

 更新時(shí)間:2026年02月25日 08:53:10   作者:NE_STOP  
springMVC是一個(gè)實(shí)現(xiàn)了mvc架構(gòu)模式的web框架,底層基于servlet實(shí)現(xiàn),本文給大家介紹springMVC RequestMapping注解的相關(guān)知識(shí),感興趣的朋友跟隨小編一起看看吧

什么是springMVC

springMVC是一個(gè)實(shí)現(xiàn)了mvc架構(gòu)模式的web框架。底層基于servlet實(shí)現(xiàn)。

springMVC幫我們做了什么

springMVC幫我們做了什么?與傳統(tǒng)的servlet開(kāi)發(fā)有什么區(qū)別?

  • 入口控制:springMVC通過(guò)DispatcherServlet作為入口控制器。負(fù)責(zé)接收請(qǐng)求和分發(fā)請(qǐng)求。而在servlet中。需要自己編寫servlet程序,并在web.xml中配置,才能接收和處理請(qǐng)求。
  • 在springMVC中,表單提交時(shí)可以自動(dòng)將表單數(shù)據(jù)綁定到對(duì)應(yīng)的JavaBean對(duì)象中。只需要在控制器方法的參數(shù)列表中聲明該JavaBean對(duì)象即可。無(wú)需手動(dòng)獲取和賦值表單數(shù)據(jù)。而在servlet中需要手動(dòng)完成。
  • IoC容器:springMVC通過(guò)IOC容器管理對(duì)象。只需要在配置文件中進(jìn)行相應(yīng)的配置即可獲取實(shí)例對(duì)象。而在servlet中需要手動(dòng)創(chuàng)建對(duì)象實(shí)例。
  • 統(tǒng)一處理請(qǐng)求:springMVC提供了攔截器、異常處理器等統(tǒng)一處理請(qǐng)求的機(jī)制。并且可以靈活的配置這些處理器。而在servlet中。需要自行編寫過(guò)濾器、異常處理器等,增加了代碼復(fù)雜度和開(kāi)發(fā)難度。
  • 視圖解析:springMVC提供多種視圖模板,如jsp、Freemarker等,并且支持國(guó)際化、主題等特性。而在servlet中需要手動(dòng)處理視圖,增加了代碼復(fù)雜度。

第一個(gè)springmvc程序

  • 引入依賴
    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>6.1.14</version>
        </dependency>
        <dependency>
            <groupId>jakarta.servlet</groupId>
            <artifactId>jakarta.servlet-api</artifactId>
            <version>6.1.0</version>
<!--            指定依賴范圍,provided表示依賴由第三方容器提供-->
<!--            打war包的時(shí)候,這個(gè)依賴不會(huì)打進(jìn)包內(nèi)。-->
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.5.25</version>
        </dependency>
        <dependency>
            <groupId>org.thymeleaf</groupId>
            <artifactId>thymeleaf-spring6</artifactId>
            <version>3.1.2.RELEASE</version>
        </dependency>
    </dependencies>
  • 在web.xml文件中配置:前端控制器(DispatcherServlet類),所有請(qǐng)求都應(yīng)應(yīng)該經(jīng)過(guò)這個(gè)DispatcherServlet的處理。
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
<!--        / 表示:除xxx.jsp結(jié)尾的請(qǐng)求路徑之外的所有請(qǐng)求路徑-->
<!--        /* 表示:所有的請(qǐng)求路徑-->
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>

DispatcherServlet是springmvc最核心的類。他是springmvc的前端控制器,主要職責(zé)包括:

  • 接收客戶端的HTTP請(qǐng)求:DispatcherServlet監(jiān)聽(tīng)來(lái)自web瀏覽器的HTTP請(qǐng)求。然后根據(jù)強(qiáng)求的url將請(qǐng)求數(shù)據(jù)解析為request對(duì)象
  • 處理請(qǐng)求的url:DispatcherServlet將請(qǐng)求的url與處理程序進(jìn)行匹配。確定要調(diào)用哪個(gè)controller來(lái)處理請(qǐng)求
  • 調(diào)用相應(yīng)的控制器:DispatcherServlet將強(qiáng)求發(fā)送給控制器處理??刂破鲌?zhí)行業(yè)務(wù)邏輯。然后返回一個(gè)模型對(duì)象(Model)
  • 渲染視圖:DispatcherServlet調(diào)用視圖引擎。將模型對(duì)象呈現(xiàn)為用戶可以查看的html頁(yè)面
  • 返回響應(yīng)給客戶端:DispatcherServlet將響應(yīng)發(fā)送回瀏覽器。響應(yīng)包括表單、json、xml、html以及其他類型數(shù)據(jù)。
  • 編寫控制器
// @Controller 納入ioc容器管理,
// @Controller 是@Component的別名
@Controller
public class FirstController {
    @RequestMapping("/test")
    public String say(){
        // 返回邏輯視圖名稱,會(huì)通過(guò)配置文件設(shè)置的前綴和后綴將邏輯視圖解析成物理視圖進(jìn)行返回。
        return "first";
    }
}

編寫springmvc配置文件(springmvc-servlet.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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
<!--    組件掃描-->
    <context:component-scan base-package="com.ali.controller" />
<!--    配置視圖解析器-->
    <bean id="thymeleafViewResolver" class="org.thymeleaf.spring6.view.ThymeleafViewResolver">
<!--        設(shè)置視圖編碼字符集-->
        <property name="characterEncoding" value="UTF-8" />
<!--        如果配置多個(gè)視圖解析器,它來(lái)決定優(yōu)先使用哪個(gè)視圖解析器,值越小優(yōu)先級(jí)越高-->
        <property name="order" value="1" />
<!--        使用該模板引擎來(lái)解析、編譯、渲染模板-->
        <property name="templateEngine">
            <bean class="org.thymeleaf.spring6.SpringTemplateEngine">
<!--            指定thymeleaf使用的模板解析器。模板解析器負(fù)責(zé)根據(jù)模板位置、模板資源名稱、文件編碼等信息,加載模板并對(duì)其進(jìn)行解析。-->
                <property name="templateResolver">
                    <bean class="org.thymeleaf.spring6.templateresolver.SpringResourceTemplateResolver" >
<!--                        設(shè)置模板文件位置(前綴)-->
                        <property name="prefix" value="/WEB-INF/templates/" />
<!--                        設(shè)置模板文件后綴,文件擴(kuò)展名不一定是html。也可以是其他。比如txt。大部分是html-->
                        <property name="suffix" value=".html" />
<!--                        設(shè)置模板類型-->
                        <property name="templateMode" value="HTML" />
<!--                        設(shè)置編碼字符集-->
                        <property name="characterEncoding" value="UTF-8" />
                    </bean>
                </property>
            </bean>
        </property>
    </bean>
</beans>

配置tomcat,啟動(dòng)tomcat后,訪問(wèn)http://localhost:8080/springmvc/test 。

執(zhí)行流程總結(jié):

  • 瀏覽器發(fā)送請(qǐng)求:http://localhost:8080/springmvc/test
  • springmvc前端控制器DispatcherServlet接收到請(qǐng)求
  • DispatcherServlet根據(jù)請(qǐng)求路徑/test映射到FirstController,調(diào)用該方法
  • FirstController處理請(qǐng)求
  • FirstController返回視圖邏輯名稱first給視圖解析器
  • 視圖解析器找到/WEB-INF/templates/first.html文件,并進(jìn)行解析。生成視圖解析對(duì)象返回給前端控制器DispatcherServlet
  • 前端控制器DispatcherServlet響應(yīng)結(jié)果到瀏覽器。

一個(gè)控制器里可以編寫多個(gè)方法。

實(shí)現(xiàn)springmvc的首頁(yè)功能

在controller里添加跳轉(zhuǎn)首頁(yè)的方法。請(qǐng)求路徑設(shè)為“/”

@RequestMapping("/")
public String toIndex(){
    return "index";
}

這樣就會(huì)默認(rèn)跳轉(zhuǎn)到index.html這個(gè)首頁(yè)里面,因?yàn)閣eb.xml文件里配置了/屬性。

指定springmvc配置文件的名字和路徑

在web.xml文件中??梢匀缦屡渲?/p>

   <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
        <!--    指定springmvc配置文件的名字是springmvc.xml
            指定springmvc配置文件存放的路徑是類的根路徑-->
            <param-value>classpath:springmvc.xml</param-value>
        </init-param>
<!--        在web服務(wù)器啟動(dòng)的時(shí)候,就初始化DispatcherServlet
        這樣在第一次訪問(wèn)請(qǐng)求的時(shí)候,速度就比較快-->
        <load-on-startup>0</load-on-startup>
    </servlet>

RequestMapping注解

RequestMapping的作用

@RequestMapping用于將請(qǐng)求映射到相應(yīng)的處理方法上,可以將指定url的請(qǐng)求綁定到一個(gè)方法或者類上,從而實(shí)現(xiàn)對(duì)請(qǐng)求的處理和相應(yīng)。

@RequestMapping可以標(biāo)注在類和方法上。

在同一個(gè)web應(yīng)用中,不允許有2個(gè)相同的RequestMapping,否則啟動(dòng)報(bào)錯(cuò)。

RequestMapping注解的value屬性

value屬性填寫的是請(qǐng)求路徑。value屬性是一個(gè)字符串?dāng)?shù)組。表示可以提供多個(gè)路徑。

也就是說(shuō),在springmvc中,可以將多個(gè)不同的請(qǐng)求路徑映射到一個(gè)控制器的同一個(gè)方法上。

@RequestMapping({"/test01","/test_01","test1"})
public String testRequest(){
    return "test_01";
}

ant風(fēng)格的value(路徑支持模糊匹配)

ant風(fēng)格的value支持路徑模糊匹配。關(guān)于路徑中的通配符包括:

  • ? ?:代表任意一個(gè)字符(除/ ? 之外的其他字符,不能空著)
  • *:代表0到n個(gè)任意字符(除/ ? 之外的其他字符)
  • ** :代表0到n個(gè)任意字符,并且路徑中可以出現(xiàn)路徑分隔符/

注意: 通配符在使用時(shí),左右不能出現(xiàn)字符,只能是/(spring5及以前的版本適用,spring6會(huì)報(bào)錯(cuò))**

在spring6中 通配符只能出現(xiàn)在末尾。比如:/testAnt/****

@RequestMapping("/x?y/test")
public String testAntValue(){
    return "test_ant";
}

value中的占位符

// restful風(fēng)格的url
@RequestMapping("/test/restful/{id}/{name}")
public String testRestful(@PathVariable("id") int id,
                          @PathVariable("name") String name){
    return "test_restful";
}

RequestMapping注解的method屬性

用來(lái)指定請(qǐng)求方式。

method屬性是一個(gè)數(shù)組,所以可以設(shè)置多種請(qǐng)求方式。

// 請(qǐng)求路徑是/test/login,且請(qǐng)求方式是post
@RequestMapping(value = "/test/login", method = RequestMethod.POST)
public String testLogin(){
    return "test_login";
}

衍生的Mapping

@PostMapping 默認(rèn)采用post方式處理。

@GetMapping 默認(rèn)采用get方式處理。

web的請(qǐng)求方式

  • get(查):獲取資源,不影響數(shù)據(jù)的狀態(tài)和功能。使用url中傳遞參數(shù),或者在HTTP請(qǐng)求的頭部使用參數(shù),服務(wù)器返回請(qǐng)求資源。
  • post(增):向服務(wù)器提交資源,可能會(huì)改變數(shù)據(jù)的狀態(tài)和功能。通過(guò)表單方式提交請(qǐng)求體。服務(wù)器接收請(qǐng)求體后,進(jìn)行數(shù)據(jù)處理。
  • put(改):更新資源,用于更新指定的資源上所有可編輯內(nèi)容。通過(guò)請(qǐng)求體發(fā)送需要被更新的全部?jī)?nèi)容,服務(wù)器接收數(shù)據(jù)后,將被更新的資源進(jìn)行修改或替換。
  • delete(刪):刪除資源。用于刪除指定的資源。將要被刪除的資源標(biāo)識(shí)符放在url中或請(qǐng)求體中。
  • head:請(qǐng)求服務(wù)器返回資源的頭部,與get類似。但是返回的信息是頭部信息,不能包含數(shù)據(jù)體。主要用于資源檢測(cè)和緩存控制。
  • patch:部分更改請(qǐng)求。當(dāng)請(qǐng)求的資源是可被更改的資源時(shí),請(qǐng)求服務(wù)器對(duì)該資源進(jìn)行部分更新,即每次更新一部分。
  • options:請(qǐng)求獲得服務(wù)器支持的請(qǐng)求方法類型。以及支持的請(qǐng)求頭標(biāo)志。“OPTIONS”則返回支持全部方法類型的服務(wù)器標(biāo)志。
  • trace:服務(wù)器響應(yīng)客戶端HTTP請(qǐng)求,主要用于調(diào)試和測(cè)試。
  • connect:建立網(wǎng)絡(luò)連接。通常用于加密ssl/TLS連接。

get與post的區(qū)別

getpost
數(shù)據(jù)會(huì)掛在url后面,并且在url后面添加一個(gè)?。數(shù)據(jù)會(huì)回顯在瀏覽器地址欄數(shù)據(jù)在請(qǐng)求體中,不會(huì)回顯在瀏覽器地址欄
只能發(fā)送普通字符串,并且有長(zhǎng)度限制,不同的瀏覽器限制不同可以發(fā)送任何類型數(shù)據(jù),包括字符串、流媒體等信息。理論上沒(méi)有長(zhǎng)度限制
適合從服務(wù)端獲取數(shù)據(jù)適合向服務(wù)端傳送數(shù)據(jù)
請(qǐng)求是安全的,因?yàn)槭谦@取數(shù)據(jù)危險(xiǎn)的。因?yàn)槭切薷姆?wù)器資源
支持緩存,二次請(qǐng)求會(huì)走瀏覽器緩存,不去請(qǐng)求真正的服務(wù)器不支持緩存

RequestMapping注解的params屬性

params用來(lái)設(shè)置請(qǐng)求參數(shù)映射。

params屬性也是一個(gè)數(shù)組,要求請(qǐng)求參數(shù)必須和params數(shù)組中要求的所有參數(shù)完全一致后,才能映射成功。

RequestMapping注解的headers屬性

headers和params原理相同。用法也相同。

當(dāng)前端提交的請(qǐng)求頭信息和后端要求的請(qǐng)求頭信息一致時(shí),才能映射成功。

 // 請(qǐng)求路徑是/test/headers,且請(qǐng)求頭中必須包含Referer和Host
    @RequestMapping(value = "/test/headers", headers = {"Referer", "Host"})
    public String testHeaders(){
        return "test_headers";
    }

到此這篇關(guān)于springMVC RequestMapping注解的實(shí)現(xiàn)過(guò)程的文章就介紹到這了,更多相關(guān)springMVC RequestMapping注解內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java中實(shí)現(xiàn)訂單超時(shí)自動(dòng)取消功能(最新推薦)

    Java中實(shí)現(xiàn)訂單超時(shí)自動(dòng)取消功能(最新推薦)

    本文介紹了Java中實(shí)現(xiàn)訂單超時(shí)自動(dòng)取消功能的幾種方法,包括定時(shí)任務(wù)、JDK延遲隊(duì)列、Redis過(guò)期監(jiān)聽(tīng)、Redisson分布式延遲隊(duì)列、RocketMQ延遲消息和RabbitMQ死信隊(duì)列,每種方法都有其優(yōu)缺點(diǎn),可以根據(jù)具體需求選擇合適的方法,感興趣的朋友一起看看吧
    2025-02-02
  • Java 讀取PDF中的文本和圖片的方法

    Java 讀取PDF中的文本和圖片的方法

    本文將介紹通過(guò)Java程序來(lái)讀取PDF文檔中的文本和圖片的方法。分別調(diào)用方法extractText()和extractImages()來(lái)讀取,需要的朋友可以參考下
    2019-07-07
  • 修改xml文件再也不用重啟項(xiàng)目mybatis-xmlreload方法

    修改xml文件再也不用重啟項(xiàng)目mybatis-xmlreload方法

    這篇文章主要為大家介紹了修改xml文件再也不用重啟項(xiàng)目mybatis-xmlreload,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • Mybatis Plus框架項(xiàng)目落地實(shí)踐分析總結(jié)

    Mybatis Plus框架項(xiàng)目落地實(shí)踐分析總結(jié)

    這篇文章主要為大家介紹了Mybatis Plus框架項(xiàng)目落地實(shí)踐分析總結(jié),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • SpringBoot actuator 健康檢查不通過(guò)的解決方案

    SpringBoot actuator 健康檢查不通過(guò)的解決方案

    這篇文章主要介紹了SpringBoot actuator 健康檢查不通過(guò)的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Java線上死鎖問(wèn)題從定位到解決的全鏈路指南

    Java線上死鎖問(wèn)題從定位到解決的全鏈路指南

    在分布式系統(tǒng)高并發(fā)場(chǎng)景下,死鎖如同定時(shí)炸彈,隨時(shí)可能引發(fā)服務(wù)雪崩,本文將分享一套完整的死鎖應(yīng)對(duì)策略,結(jié)合實(shí)戰(zhàn)案例與生產(chǎn)級(jí)解決方案,助你快速化解危機(jī),需要的朋友可以參考下
    2025-06-06
  • java如何使用redis加鎖

    java如何使用redis加鎖

    這篇文章主要介紹了java如何使用redis加鎖問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • 基于Java和Lua實(shí)現(xiàn)IP鎖定功能

    基于Java和Lua實(shí)現(xiàn)IP鎖定功能

    本文主要介紹了?Lua?語(yǔ)言的特點(diǎn)、應(yīng)用場(chǎng)景、基本語(yǔ)法,以及使用?Redis?+?Lua?腳本實(shí)現(xiàn)限制?IP?多次輸入錯(cuò)誤密碼功能,包括?Lua?腳本示例、參數(shù)解釋、邏輯流程、執(zhí)行方式,并給出了?Java?應(yīng)用示例及代碼解釋,還闡述了參數(shù)傳遞和使用,需要的朋友可以參考下
    2025-01-01
  • 基于令牌桶的限流器注解的簡(jiǎn)單實(shí)現(xiàn)詳解

    基于令牌桶的限流器注解的簡(jiǎn)單實(shí)現(xiàn)詳解

    令牌桶算法是一種常用的流量控制算法,用于限制請(qǐng)求或事件的發(fā)生速率,這篇文章主要介紹了如何基于令牌桶實(shí)現(xiàn)限流器注解,需要的可以參考一下
    2023-08-08
  • SpringBoot注解機(jī)制實(shí)現(xiàn)API多版本共存和灰度發(fā)布的方案

    SpringBoot注解機(jī)制實(shí)現(xiàn)API多版本共存和灰度發(fā)布的方案

    在快速迭代的產(chǎn)品開(kāi)發(fā)中,API接口的更新迭代是常態(tài),然而,舊版本接口往往已經(jīng)有大量用戶依賴,無(wú)法立即停用,那么如何在不影響現(xiàn)有用戶的前提下平滑引入新版本API,本文將介紹如何通過(guò)Spring Boot注解機(jī)制實(shí)現(xiàn)API多版本共存,并基于此實(shí)現(xiàn)灰度發(fā)布,需要的朋友可以參考下
    2025-06-06

最新評(píng)論

随州市| 泰来县| 岫岩| 广元市| 锡林郭勒盟| 顺义区| 新安县| 建始县| 香格里拉县| 黑山县| 阿拉善盟| 白山市| 宁国市| 武宁县| 吉首市| 密云县| 竹北市| 葵青区| 凉山| 清涧县| 卢龙县| 外汇| 道真| 嘉黎县| 区。| 桂阳县| 米易县| 福安市| 密云县| 大冶市| 兴安县| 黄浦区| 靖远县| 虎林市| 崇信县| 江陵县| 山阴县| 陆河县| 新邵县| 耿马| 元朗区|