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

Spring?Boot中獲取request的三種方式及請求過程

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

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

一、請求過程

大概的流程:

1、通過請求,然后訪問到服務器,像java常用的服務器就是tomcat。

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

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

4、服務器將response響應給客戶端。

二、獲取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路徑相關

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

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

3.2、Header相關

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

3.3、獲取請求體

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

3.4、獲取參數(shù)

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

3.5、中文亂碼

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

request.setCharacterEncoding("UTF-8");

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

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

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

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

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

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

四、response常用API

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

// 設置指定名稱響應頭的值,下面是導出的時候我們經(jīng)常要設置的響應頭,響應頭當中還有文件的名稱,也就是通過流下載文件的時候那個文件名稱
response.setHeader("Content-Disposition", "attachment;filename=" + zipName);
// 1.字符輸出流
PrintWriter getWriter()
// 2.字節(jié)輸出流(一般導出就是將文件寫到字節(jié)流,然后響應response)
ServletOutputStream getOutputStream()
// 注意:在同一個Servlet,二種輸出流不能同時使用,產(chǎn)生互斥
// response提供了專門負責重定向的方法
response.sendRedirect("/項目地址/資源地址");
// 指定服務器響應中文的編碼方式
response.setCharacterEncoding("GBK");
// 統(tǒng)一服務器和客戶端的編碼方式
response.setContentType("text/html;charset=utf-8");
// 導出的時候如果需要直接通過response流導出Excel,需要和前端設置上下文類型,如下:
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類當中
     *
     * @return
    public static ServletRequestAttributes getRequestAttributes() {
        RequestAttributes attributes = RequestContextHolder.getRequestAttributes();
        return (ServletRequestAttributes) attributes;
     * 將字符串渲染到客戶端(前后端分離很少會用到)
     * @param response 渲染對象
     * @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;
     * 獲取完整的請求路徑,包括:域名,端口,上下文訪問路徑
     * 上傳圖片的時候需要:服務器路徑+上下文訪問路徑(所以封裝了該方法)
     * @return 服務地址
    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也非常好,并且全是中文的,這是重點哈哈。

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

API當中包含了:

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

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

相關文章

  • Spring表達式語言SpEL用法詳解

    Spring表達式語言SpEL用法詳解

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

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

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

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

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

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

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

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

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

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

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

    IDEA之項目run按鈕為灰色,無法運行問題

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

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

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

    Java全面細致講解類與對象

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

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

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

最新評論

栾川县| 陆丰市| 根河市| 旺苍县| 灌阳县| 涪陵区| 卓资县| 伊宁县| 阳春市| 庐江县| 固原市| 雷山县| 西充县| 东丽区| 无为县| 澄迈县| 阿克| 册亨县| 凤城市| 孟津县| 安平县| 确山县| 贺州市| 赤水市| 南丹县| 兴山县| 肇东市| 苏州市| 宣化县| 合水县| 云和县| 广宗县| 博湖县| 甘德县| 连山| 称多县| 通海县| 安庆市| 临海市| 平山县| 定陶县|