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

Spring?Boot中獲取request的三種方式及請(qǐng)求過程

 更新時(shí)間:2022年03月28日 10:42:11   作者:怪咖軟妹@  
這篇文章主要介紹了Spring?Boot當(dāng)中獲取request的三種方式,包括請(qǐng)求過程流程分析及response常用API,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下

本篇博客主要記錄request相關(guān)知識(shí),也是開發(fā)當(dāng)中經(jīng)常遇到的,感興趣的跟小編一起學(xué)習(xí)吧!

一、請(qǐng)求過程

大概的流程:

1、通過請(qǐng)求,然后訪問到服務(wù)器,像java常用的服務(wù)器就是tomcat。

2、服務(wù)器收到請(qǐng)求將請(qǐng)求參數(shù)、請(qǐng)求內(nèi)容封裝成一個(gè)request和response對(duì)象,以參數(shù)的形式傳到我們的java程序。(這個(gè)在servlet最底層的接口當(dāng)中就會(huì)看到的,本篇文章不過多說了,后續(xù)找時(shí)間出一篇sevlet的博客)

3、這時(shí)候java程序就有了request和response對(duì)象,request當(dāng)中包含了請(qǐng)求參數(shù)、session、請(qǐng)求路徑等一些列關(guān)于調(diào)用接口的相關(guān)內(nèi)容。而response就是我們對(duì)于該請(qǐng)求做出的請(qǐng)求響應(yīng)。響應(yīng)內(nèi)容可以是各種參數(shù),或者頁面等等,最終封裝到response,響應(yīng)給服務(wù)器。

4、服務(wù)器將response響應(yīng)給客戶端。

二、獲取request的三種方式

2.1、可以封裝為靜態(tài)方法

ServletRequestAttributes servletRequestAttributes =  (ServletRequestAttributes)RequestContextHolder.getRequestAttributes();
HttpServletRequest request = servletRequestAttributes.getRequest();
HttpServletResponse response = servletRequestAttributes.getResponse();

2.2、controller的方法里面

@GetMapping(value = "")
public String doSomething(HttpServletRequest request,HttpServletResponse response) {
    //...
}

2.3、直接注入

@Autowired
private HttpServletRequest request;
@Autowired
private HttpServletResponse response;

三、request常用API

3.1、request路徑相關(guān)

// 獲取請(qǐng)求方式: GET
String getMethod()

// 獲取虛擬目錄(上下文目錄):虛擬路徑通過在application配置當(dāng)中可以配置
// 配置:server.servlet.context-path=/aaa
String getContextPath()
// 獲取Servlet路徑:就是獲取的controller當(dāng)中配置的路徑
String getServletPath()
/// 獲取請(qǐng)求參數(shù): id=3
// http://localhost:8080/aaa/test?id=3
String getQueryString()
// 獲取請(qǐng)求URI:/servletDemo/demo1
// 上下文路徑+controller當(dāng)中配置的路徑
String getRequestURI()
// 獲取完整請(qǐng)求路徑:http://localhost:8080/aaa/test
String getRequestURL()
// 獲取協(xié)議及版本:HTTP/1.1
String getProtocol()
// 獲取客戶機(jī)的IP地址:192.168.0.0
String getRemoteAddr()

3.2、Header相關(guān)

// 獲取請(qǐng)求頭數(shù)據(jù),通過請(qǐng)求頭名稱獲取值
String getHeader(String name)
// 獲取所有請(qǐng)求頭信息
Enumeration<String> getHeaderNames()

3.3、獲取請(qǐng)求體

// 獲取流對(duì)象-獲取字符輸入流,只能操作字符數(shù)據(jù)
BufferedReader getReader()
// 獲取流對(duì)象-獲取字節(jié)輸入流,既能操作字節(jié)也能操作字符
ServletInputStream getInputStream()

3.4、獲取參數(shù)

// 獲取請(qǐng)求參數(shù)通用方式(根據(jù)參數(shù)名稱獲取參數(shù)值) username=zhangsan
String getParameter(String name)
// 獲取請(qǐng)求參數(shù)名稱獲取參數(shù)值的數(shù)組 hobby=xx&hobby=game
String[] getParameters(String name)
// 獲取請(qǐng)求參數(shù)名稱(與獲取請(qǐng)求頭方法類似)
Enumeration<String> getParameterNames()
// 獲取所有參數(shù)的Map集合
Map<String,String> getParameterMap()

3.5、中文亂碼

中文亂碼問題,Tomcat8 已經(jīng)將GET 請(qǐng)求方式的亂碼問題 解決了,但是POST方式的中文亂碼問題 依舊存在,需要自行配置
在獲取參數(shù)之前配置

request.setCharacterEncoding("UTF-8");

3.6、轉(zhuǎn)發(fā)

瀏覽器像服務(wù)器發(fā)起一次請(qǐng)求,服務(wù)器內(nèi)部實(shí)現(xiàn)轉(zhuǎn)發(fā),相當(dāng)于執(zhí)行了兩個(gè)資源之間的操作。

// 通過request對(duì)象獲取請(qǐng)求轉(zhuǎn)發(fā)服務(wù)器:
RequestDispatcher getRequestDispatcher(String path);
// 使用==RequestDispatcher對(duì)象來進(jìn)行轉(zhuǎn)發(fā)
forward(ServlertRequest request,ServletResponse response);

3.7、共享數(shù)據(jù)

域?qū)ο螅阂粋€(gè)有作用范圍的對(duì)象,可以在范圍內(nèi)共享數(shù)據(jù)
request域:代表一次請(qǐng)求的范圍,一般用于請(qǐng)求轉(zhuǎn)發(fā)的多個(gè)資源中共享數(shù)據(jù)

// 存儲(chǔ)數(shù)據(jù)
setAttribute(String name,Object obj)
// 通過鍵來獲取值
Object getAttribute(String name);
// 通過鍵移除鍵對(duì)應(yīng)的值
removeAttribute(String name)

四、response常用API

//設(shè)置狀態(tài)碼
response.setStatus(304);

// 設(shè)置指定名稱響應(yīng)頭的值,下面是導(dǎo)出的時(shí)候我們經(jīng)常要設(shè)置的響應(yīng)頭,響應(yīng)頭當(dāng)中還有文件的名稱,也就是通過流下載文件的時(shí)候那個(gè)文件名稱
response.setHeader("Content-Disposition", "attachment;filename=" + zipName);
// 1.字符輸出流
PrintWriter getWriter()
// 2.字節(jié)輸出流(一般導(dǎo)出就是將文件寫到字節(jié)流,然后響應(yīng)response)
ServletOutputStream getOutputStream()
// 注意:在同一個(gè)Servlet,二種輸出流不能同時(shí)使用,產(chǎn)生互斥
// response提供了專門負(fù)責(zé)重定向的方法
response.sendRedirect("/項(xiàng)目地址/資源地址");
// 指定服務(wù)器響應(yīng)中文的編碼方式
response.setCharacterEncoding("GBK");
// 統(tǒng)一服務(wù)器和客戶端的編碼方式
response.setContentType("text/html;charset=utf-8");
// 導(dǎo)出的時(shí)候如果需要直接通過response流導(dǎo)出Excel,需要和前端設(shè)置上下文類型,如下:
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");

五、常用工具類

5.1、封裝的

import org.springframework.web.context.request.RequestAttributes;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
public class ServletUtils {
    /**
     * 獲取request
     */
    public static HttpServletRequest getRequest() {
        return getRequestAttributes().getRequest();
    }
     * 獲取response
    public static HttpServletResponse getResponse() {
        return getRequestAttributes().getResponse();
     * 獲取session
    public static HttpSession getSession() {
        return getRequest().getSession();
     * request和response在ServletRequestAttributes類當(dāng)中
     *
     * @return
    public static ServletRequestAttributes getRequestAttributes() {
        RequestAttributes attributes = RequestContextHolder.getRequestAttributes();
        return (ServletRequestAttributes) attributes;
     * 將字符串渲染到客戶端(前后端分離很少會(huì)用到)
     * @param response 渲染對(duì)象
     * @param string   待渲染的字符串
     * @return null
    public static String renderString(HttpServletResponse response, String string) {
        try {
            response.setStatus(200);
            response.setContentType("application/json");
            response.setCharacterEncoding("utf-8");
            response.getWriter().print(string);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
     * 獲取完整的請(qǐng)求路徑,包括:域名,端口,上下文訪問路徑
     * 上傳圖片的時(shí)候需要:服務(wù)器路徑+上下文訪問路徑(所以封裝了該方法)
     * @return 服務(wù)地址
    public static String getUrl() {
        HttpServletRequest request = ServletUtils.getRequest();
        return getDomain(request);
    public static String getDomain(HttpServletRequest request) {
        StringBuffer url = request.getRequestURL();
        String contextPath = request.getServletContext().getContextPath();
        return url.delete(url.length() - request.getRequestURI().length(), url.length()).append(contextPath).toString();
}

5.2、Hutool工具類

Hutool工具類是目前最常用的工具類,他的官網(wǎng)寫的非常好,并且API也非常好,并且全是中文的,這是重點(diǎn)哈哈。

ServletUtil在線API文檔:https://apidoc.gitee.com/dromara/hutool

API當(dāng)中包含了:

  • cookie相關(guān)
  • 獲取請(qǐng)求體
  • header相關(guān)
  • 獲得MultiPart表單內(nèi)容
  • 獲得請(qǐng)求參數(shù)、將參數(shù)轉(zhuǎn)換為Bean
  • 以及response相關(guān)write操作

到此這篇關(guān)于Spring Boot當(dāng)中獲取request的三種方式的文章就介紹到這了,更多相關(guān)Spring Boot獲取request方式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Spring表達(dá)式語言SpEL用法詳解

    Spring表達(dá)式語言SpEL用法詳解

    這篇文章主要介紹了spring表達(dá)式語言SpEL用法詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-01-01
  • 通過Java帶你了解網(wǎng)絡(luò)IO模型

    通過Java帶你了解網(wǎng)絡(luò)IO模型

    這篇文章將通過Java帶大家了解網(wǎng)絡(luò)IO模型,包括BIO,NoBlockingIO,NIO(NewIO),AIO等做了詳細(xì)得介紹,感興趣的小伙伴可以參考閱讀本文
    2023-05-05
  • 完整B樹算法Java實(shí)現(xiàn)代碼

    完整B樹算法Java實(shí)現(xiàn)代碼

    這篇文章主要為大家詳細(xì)介紹了完整的B樹算法Java實(shí)現(xiàn)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • java實(shí)現(xiàn)XML與JSON轉(zhuǎn)換的便捷實(shí)用方法

    java實(shí)現(xiàn)XML與JSON轉(zhuǎn)換的便捷實(shí)用方法

    這篇文章主要為大家介紹了java實(shí)現(xiàn)XML與JSON轉(zhuǎn)換的便捷實(shí)用方法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12
  • java 多態(tài)與抽象類詳解總結(jié)

    java 多態(tài)與抽象類詳解總結(jié)

    在面向?qū)ο蟮母拍钪?,所有的?duì)象都是通過類來描繪的,但是反過來,并不是所有的類都是用來描繪對(duì)象的,如果一個(gè)類中沒有包含足夠的信息來描繪一個(gè)具體的對(duì)象,這樣的類就是抽象類,而多態(tài)是同一個(gè)行為具有多個(gè)不同表現(xiàn)形式或形態(tài)的能力
    2021-11-11
  • Java詳解ScriptEngine接口動(dòng)態(tài)執(zhí)行JS腳本

    Java詳解ScriptEngine接口動(dòng)態(tài)執(zhí)行JS腳本

    ScriptEngine是基本接口,其方法必須在本規(guī)范的每個(gè)實(shí)現(xiàn)中完全起作用。這些方法提供基本腳本功能。 寫入這個(gè)簡(jiǎn)單接口的應(yīng)用程序可以在每個(gè)實(shí)現(xiàn)中進(jìn)行最少的修改。 它包括執(zhí)行腳本的方法,以及設(shè)置和獲取值的方法
    2022-08-08
  • IDEA之項(xiàng)目run按鈕為灰色,無法運(yùn)行問題

    IDEA之項(xiàng)目run按鈕為灰色,無法運(yùn)行問題

    這篇文章主要介紹了IDEA之項(xiàng)目run按鈕為灰色,無法運(yùn)行問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • IDEA+Maven創(chuàng)建Spring項(xiàng)目的實(shí)現(xiàn)步驟

    IDEA+Maven創(chuàng)建Spring項(xiàng)目的實(shí)現(xiàn)步驟

    這篇文章主要介紹了IDEA+Maven創(chuàng)建Spring項(xiàng)目的實(shí)現(xiàn)步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • Java全面細(xì)致講解類與對(duì)象

    Java全面細(xì)致講解類與對(duì)象

    類和對(duì)象是兩種以計(jì)算機(jī)為載體的計(jì)算機(jī)語言的合稱。對(duì)象是對(duì)客觀事物的抽象,類是對(duì)對(duì)象的抽象。類是一種抽象的數(shù)據(jù)類型;變量就是可以變化的量,存儲(chǔ)在內(nèi)存中—個(gè)可以擁有在某個(gè)范圍內(nèi)的可變存儲(chǔ)區(qū)域
    2022-05-05
  • Spring?Boot整合?NoSQL?數(shù)據(jù)庫(kù)?Redis詳解

    Spring?Boot整合?NoSQL?數(shù)據(jù)庫(kù)?Redis詳解

    這篇文章主要為大家介紹了Spring?Boot整合?NoSQL?數(shù)據(jù)庫(kù)?Redis詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09

最新評(píng)論

颍上县| 静宁县| 韶关市| 平度市| 沙洋县| 房山区| 阿鲁科尔沁旗| 万宁市| 岢岚县| 响水县| 西平县| 汉中市| 富川| 丽江市| 十堰市| 江山市| 龙口市| 讷河市| 柳河县| 油尖旺区| 三原县| 夹江县| 淮安市| 昆山市| 锦州市| 太白县| 铜陵市| 工布江达县| 岗巴县| 三门县| 申扎县| 双鸭山市| 耒阳市| 邓州市| 临泉县| 澄城县| 双城市| 神农架林区| 福贡县| 景东| 天等县|