欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot中的server.context-path的實現(xiàn)

 更新時間:2024年08月30日 09:15:45   作者:棒棒糖的糖不含糖  
本文主要介紹了SpringBoot中的server.context-path的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

一、問題引入

SpringBoot 在 idea中的 .idea和 .iml文件我在boot-test的測試項目中使用的 SpringBoot版本為 1.3.5.RELEASE,新項目 cps-task中使用的版本為 2.4.8,造成了連接異常,問題很好解決,但涉及的bug記錄一下。

首先,先看一張圖片

二、代碼片段展示 

2.1.接口層 

package com.bt.controller;

import com.bt.config.DataConfig;
import com.bt.service.ReconciliationService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

@Slf4j
@Controller
public class ReconciliationController implements DataConfig {

    @Resource
    private ReconciliationService reconciliationService;


    @RequestMapping(value = "/api/cib", method = RequestMethod.GET)
    @ResponseBody
    public String cibReconciliation(HttpServletRequest request){
        String date = request.getParameter("date");
        if(date == null){
            return "date is null";
        }
        Pattern pattern = Pattern.compile(DATE_PATTERN);
        Matcher matcher = pattern.matcher(date);
        if (!matcher.matches()) {
            // 不輸入符合預(yù)期的格式,進(jìn)行下一步操作
            return "The format of 'date' is illegal!";
        }
        log.info("執(zhí)行對賬開始!!");
        reconciliationService.checkBillForReconciliation(BANK_ID_CIB, date);
        return "ok";
    }
}

2.2.application.properties

server.port=8899
server.context-path=/cps-task/

三、問題分析 

3.1.server.context-path 作用

在Spring Boot項目中,server.context-path 屬性用于設(shè)置應(yīng)用程序的上下文路徑(context path),這樣應(yīng)用就不會直接部署在根路徑(/)下,而是部署在指定的路徑下。然而,需要注意的是,從Spring Boot 2.0開始,server.context-path 屬性已經(jīng)被棄用,并被 server.servlet.context-path 所替代。

我這里在 2.4.8 的高版本中,使用了低版本的參數(shù),造成參數(shù)未生效,所以,出現(xiàn)了404連接異常。

3.2.正確展示 

對于Spring Boot 1.x版本,你可以在你的application.propertiesapplication.yml文件中這樣設(shè)置:

application.properties  

server.context-path=/cps-task/

對于Spring Boot 2.x及更高版本,application.properties 文件應(yīng)該這樣設(shè)置:

server.servlet.context-path=/cps-task/

application.yml 的YAML格式的配置文件,應(yīng)該這樣設(shè)置:

# application.yml  
server:  
  servlet:  
    context-path: /cps-task/

四、HTTP請求響應(yīng)碼簡介 

4.1.響應(yīng)碼參考來源

java.net.HttpURLConnection;

4.2.源碼示例 

 4.2.1.源碼總述

HTTP的響應(yīng)代碼,從1.1版本開始。

    /**
     * The response codes for HTTP, as of version 1.1.
     */

    // REMIND: do we want all these??
    // Others not here that we do want??

 4.2.2.正常情況——2XX: generally "OK"

    /* 2XX: generally "OK" */

    /**
     * HTTP Status-Code 200: OK.
     */
    public static final int HTTP_OK = 200;


    /**
     * HTTP Status-Code 201: Created.
     */
    public static final int HTTP_CREATED = 201;


    /**
     * HTTP Status-Code 202: Accepted.
     */
    public static final int HTTP_ACCEPTED = 202;


    /**
     * HTTP Status-Code 203: Non-Authoritative Information.
     */
    public static final int HTTP_NOT_AUTHORITATIVE = 203;


    /**
     * HTTP Status-Code 204: No Content.
     */
    public static final int HTTP_NO_CONTENT = 204;


    /**
     * HTTP Status-Code 205: Reset Content.
     */
    public static final int HTTP_RESET = 205;


    /**
     * HTTP Status-Code 206: Partial Content.
     */
    public static final int HTTP_PARTIAL = 206;

 4.2.3.重定位/重定向——3XX: relocation/redirect

4.2.3.1.300: Multiple Choices. 

Multiple Choices指當(dāng)服務(wù)器接收到一個請求,并且該請求可以通過多種不同的方式或資源來滿足時,服務(wù)器可能會返回300 Multiple Choices狀態(tài)碼。這意味著服務(wù)器提供了多個可能的響應(yīng),但由客戶端來決定選擇哪一個。

當(dāng)客戶端收到300 Multiple Choices狀態(tài)碼時,它應(yīng)該顯示一個包含所有可能響應(yīng)選項的用戶界面,讓用戶選擇一個。然而,由于這個過程可能比較復(fù)雜且用戶體驗不佳,因此很少有網(wǎng)站會這樣做。 

    /**
     * HTTP Status-Code 300: Multiple Choices.
     */
    public static final int HTTP_MULT_CHOICE = 300;

4.2.3.2.301: Moved Permanently. 

Moved Permanently,是一個HTTP響應(yīng)狀態(tài)碼,表示請求的資源已經(jīng)被永久地移動到了由Location頭部所指示的URL上。這是一個重定向狀態(tài)碼,它告訴客戶端(如瀏覽器)自動地訪問新的URL。

特點:

  • 永久性:301狀態(tài)碼表示的是永久性的重定向,意味著資源已經(jīng)不再存在于請求的URL上,而是永久地遷移到了新的位置。
  • 搜索引擎優(yōu)化(SEO):對于搜索引擎優(yōu)化(SEO)來說,301重定向是一個重要的工具。當(dāng)網(wǎng)站的結(jié)構(gòu)發(fā)生變化,或者網(wǎng)頁的URL發(fā)生更改時,使用301重定向可以幫助搜索引擎將舊URL的排名和權(quán)重轉(zhuǎn)移到新URL上。
  • 緩存:由于這是一個永久性的重定向,客戶端(如瀏覽器)和中間緩存(如CDN)可能會緩存這個重定向信息,以便將來對相同資源的請求能夠直接訪問新的URL。

使用場景:

  • 當(dāng)網(wǎng)站的URL結(jié)構(gòu)發(fā)生變化,但內(nèi)容仍然需要被訪問時。
  • 當(dāng)網(wǎng)站遷移到新的域名或子域名時。
  • 當(dāng)需要將網(wǎng)站的某個部分或頁面重命名或重新組織時。
    /**
     * HTTP Status-Code 301: Moved Permanently.
     */
    public static final int HTTP_MOVED_PERM = 301;

4.2.3.3.302: Temporary Redirect. 

Temporary Redirect,是一種HTTP重定向狀態(tài)碼,用于指示客戶端發(fā)送的請求需要進(jìn)一步重定向到另一個URL,但這次重定向是臨時的。與301 Moved Permanently(永久重定向)不同,307 Temporary Redirect表明資源的移動是暫時的,客戶端在將來可能會再次嘗試訪問原始URL。

特點:

  • 保持請求方法:與其他重定向狀態(tài)碼(如302 Found)不同,307 Temporary Redirect要求客戶端在重定向時保持原始請求的方法(如GET、POST等)不變。這意味著,如果原始請求是POST請求,重定向后的請求也應(yīng)該是POST請求,而不是自動轉(zhuǎn)換為GET請求。
  • 臨時性:307狀態(tài)碼表明資源的重定向是臨時的,可能由于網(wǎng)站維護(hù)、服務(wù)器負(fù)載平衡或URL結(jié)構(gòu)臨時更改等原因?qū)е?。客戶端?yīng)該繼續(xù)嘗試訪問原始URL,直到服務(wù)器通知其更改已變?yōu)橛谰谩?/li>

使用場景:

  • 網(wǎng)站維護(hù):當(dāng)網(wǎng)站正在進(jìn)行臨時維護(hù)時,服務(wù)器可能會將用戶的請求重定向到一個備份服務(wù)器或維護(hù)頁面,以避免服務(wù)中斷。
  • URL結(jié)構(gòu)更改:在網(wǎng)站重構(gòu)或升級過程中,可能需要臨時更改URL結(jié)構(gòu)。使用307 Temporary Redirect可以確保在更改過程中,用戶仍然能夠訪問網(wǎng)站資源。
  • 負(fù)載均衡:在分布式系統(tǒng)中,服務(wù)器可能會根據(jù)當(dāng)前負(fù)載情況將請求重定向到不同的服務(wù)器。使用307 Temporary Redirect可以確保這種重定向是臨時的,并且請求方法保持不變。
    /**
     * HTTP Status-Code 302: Temporary Redirect.
     */
    public static final int HTTP_MOVED_TEMP = 302;

4.2.3.4.303: See Other. 

See Other,是一個HTTP重定向狀態(tài)碼,用于指示客戶端使用GET方法向另一個URI(統(tǒng)一資源標(biāo)識符)發(fā)送請求,以獲取請求的資源。以下是關(guān)于303 See Other的詳細(xì)解釋:

  • 定義:303 See Other狀態(tài)碼表示客戶端應(yīng)使用GET方法定向獲取請求的資源。這通常發(fā)生在客戶端最初使用POST方法發(fā)送請求,但服務(wù)器希望客戶端通過GET方法訪問資源的另一個URI時。
  • 特點
    • 重定向:與301 Moved Permanently和302 Found類似,303 See Other也是一種重定向狀態(tài)碼,但它明確要求客戶端使用GET方法訪問新的URI。
    • 方法改變:與307 Temporary Redirect不同,303 See Other允許客戶端在重定向時改變請求方法,從POST(或其他方法)變?yōu)镚ET。

使用場景:

  • 當(dāng)客戶端使用POST方法提交表單,但服務(wù)器希望將用戶重定向到一個新的頁面以顯示結(jié)果或進(jìn)行進(jìn)一步操作時,可以使用303 See Other狀態(tài)碼。
  • 在某些Web應(yīng)用程序中,為了防止表單的重復(fù)提交,服務(wù)器可能會在處理完P(guān)OST請求后,使用303 See Other將客戶端重定向到一個新的GET請求頁面。
    /**
     * HTTP Status-Code 303: See Other.
     */
    public static final int HTTP_SEE_OTHER = 303;

4.2.3.5.304: Not Modified. 

Not Modified,是一個HTTP響應(yīng)狀態(tài)碼,用于指示客戶端請求的資源自上次請求后沒有發(fā)生改變,因此客戶端可以繼續(xù)使用其緩存的版本,而無需重新下載資源。以下是關(guān)于304 Not Modified的詳細(xì)解釋:

定義與特點:

定義:304 Not Modified狀態(tài)碼表示客戶端請求的資源自上次請求以來沒有發(fā)生修改,客戶端可以使用其緩存的版本。

特點

  • 節(jié)省帶寬:通過避免不必要的資源下載,可以顯著減少網(wǎng)絡(luò)帶寬的使用。
  • 提升性能:減少服務(wù)器負(fù)載,加快頁面加載速度,提升用戶體驗。
  • 依賴緩存驗證:該狀態(tài)碼通常與緩存驗證機(jī)制(如ETag或Last-Modified頭部)一起使用,以確保資源的最新性。

使用場景:

  • 當(dāng)客戶端(如瀏覽器)已經(jīng)緩存了某個資源,并且該資源在服務(wù)器上未發(fā)生更改時,服務(wù)器會返回304 Not Modified狀態(tài)碼。
  • 客戶端在發(fā)送請求時,通常會包含一些條件請求頭部(如If-Modified-Since或If-None-Match),以告訴服務(wù)器它已經(jīng)擁有的資源版本信息。
  • 服務(wù)器在收到這些條件請求頭部后,會檢查請求的資源是否自上次請求以來有所更改。如果沒有更改,服務(wù)器就會返回304狀態(tài)碼,并且不會發(fā)送資源的內(nèi)容。
    /**
     * HTTP Status-Code 304: Not Modified.
     */
    public static final int HTTP_NOT_MODIFIED = 304;

4.2.3.6.305: Use Proxy. 

Use Proxy(使用代理)是一個常見的配置或行為,它涉及到通過代理服務(wù)器來轉(zhuǎn)發(fā)HTTP請求和響應(yīng)。代理服務(wù)器的作用

  • 提高訪問速度:代理服務(wù)器可以緩存客戶請求的數(shù)據(jù)。當(dāng)多個客戶請求相同的數(shù)據(jù)時,代理服務(wù)器可以直接從緩存中提供數(shù)據(jù),而無需再次從原始服務(wù)器獲取,從而提高了訪問速度。
  • 防火墻和安全:代理服務(wù)器可以作為防火墻,限制或過濾用戶對某些網(wǎng)站的訪問。這有助于保護(hù)網(wǎng)絡(luò)免受惡意軟件的攻擊,并提高用戶的安全性。
  • 訪問限制資源:在某些情況下,用戶可能無法直接訪問某些網(wǎng)站或服務(wù)。通過代理服務(wù)器,用戶可以繞過這些限制,訪問被限制的資源。
  • 隱藏用戶身份:使用代理服務(wù)器時,外部服務(wù)器只能看到代理服務(wù)器的IP地址,而無法看到用戶的真實IP地址,從而增強(qiáng)了用戶的匿名性。
    /**
     * HTTP Status-Code 305: Use Proxy.
     */
    public static final int HTTP_USE_PROXY = 305;

4.2.4.連接錯誤——4XX: client error

    /**
     * HTTP Status-Code 400: Bad Request.
     */
    public static final int HTTP_BAD_REQUEST = 400;

    /**
     * HTTP Status-Code 401: Unauthorized.
     */
    public static final int HTTP_UNAUTHORIZED = 401;

    /**
     * HTTP Status-Code 402: Payment Required.
     */
    public static final int HTTP_PAYMENT_REQUIRED = 402;

    /**
     * HTTP Status-Code 403: Forbidden.
     */
    public static final int HTTP_FORBIDDEN = 403;

    /**
     * HTTP Status-Code 404: Not Found.
     */
    public static final int HTTP_NOT_FOUND = 404;

    /**
     * HTTP Status-Code 405: Method Not Allowed.
     * 方法不允許。例如,后端接口要求用Get請求,前段用Post請求
     */
    public static final int HTTP_BAD_METHOD = 405;

    /**
     * HTTP Status-Code 406: Not Acceptable.
     */
    public static final int HTTP_NOT_ACCEPTABLE = 406;

    /**
     * HTTP Status-Code 407: Proxy Authentication Required.
     */
    public static final int HTTP_PROXY_AUTH = 407;

    /**
     * HTTP Status-Code 408: Request Time-Out.
     */
    public static final int HTTP_CLIENT_TIMEOUT = 408;

    /**
     * HTTP Status-Code 409: Conflict.
     */
    public static final int HTTP_CONFLICT = 409;

    /**
     * HTTP Status-Code 410: Gone.
     */
    public static final int HTTP_GONE = 410;

    /**
     * HTTP Status-Code 411: Length Required.
     */
    public static final int HTTP_LENGTH_REQUIRED = 411;

    /**
     * HTTP Status-Code 412: Precondition Failed.
     */
    public static final int HTTP_PRECON_FAILED = 412;

    /**
     * HTTP Status-Code 413: Request Entity Too Large.
     */
    public static final int HTTP_ENTITY_TOO_LARGE = 413;

    /**
     * HTTP Status-Code 414: Request-URI Too Large.
     */
    public static final int HTTP_REQ_TOO_LONG = 414;

    /**
     * HTTP Status-Code 415: Unsupported Media Type.
     */
    public static final int HTTP_UNSUPPORTED_TYPE = 415;

4.2.5.服務(wù)錯誤——5XX: server error

    /**
     * HTTP Status-Code 500: Internal Server Error.
     * @deprecated   it is misplaced and shouldn't have existed.
     * 內(nèi)部服務(wù)器錯誤,它放錯地方了,不應(yīng)該存在。
     * (存在爭議,不太確定是HTTP_SERVER_ERROR不應(yīng)該存在,還是@Deprecated不應(yīng)該存在)
     */
    @Deprecated
    public static final int HTTP_SERVER_ERROR = 500;


    /**
     * HTTP Status-Code 500: Internal Server Error.
     * 內(nèi)部服務(wù)器錯誤。
     */
    public static final int HTTP_INTERNAL_ERROR = 500;


    /**
     * HTTP Status-Code 501: Not Implemented.
     */
    public static final int HTTP_NOT_IMPLEMENTED = 501;


    /**
     * HTTP Status-Code 502: Bad Gateway.
     * 網(wǎng)關(guān)錯誤。
     */
    public static final int HTTP_BAD_GATEWAY = 502;


    /**
     * HTTP Status-Code 503: Service Unavailable.
     * 服務(wù)不可用
     */
    public static final int HTTP_UNAVAILABLE = 503;


    /**
     * HTTP Status-Code 504: Gateway Timeout.
     * 網(wǎng)關(guān)超時。
     */
    public static final int HTTP_GATEWAY_TIMEOUT = 504;


    /**
     * HTTP Status-Code 505: HTTP Version Not Supported.
     * 不支持HTTP版本。
     */
    public static final int HTTP_VERSION = 505;

到此這篇關(guān)于SpringBoot中的server.context-path的實現(xiàn)的文章就介紹到這了,更多相關(guān)SpringBoot server.context-path內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

最新評論