国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

HttpServletRequest和HttpServletResponse的獲取與使用

這篇具有很好參考價(jià)值的文章主要介紹了HttpServletRequest和HttpServletResponse的獲取與使用。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

相關(guān)筆記:【JavaWeb之Servlet】

HttpServletRequest和HttpServletResponse的獲取與使用,JavaDev,Java,Servlet

1、Servlet復(fù)習(xí)

Servlet是JavaWeb的三大組件之一:

  • Servlet
  • Filter 過(guò)濾器
  • Listener 監(jiān)聽(tīng)器

Servlet是運(yùn)行在服務(wù)器上的一個(gè)Java小程序,它可以接收客戶端發(fā)送過(guò)來(lái)的請(qǐng)求,并響應(yīng)數(shù)據(jù)給客戶端。

Servlet接口的實(shí)現(xiàn)和繼承關(guān)系如下,日常開(kāi)發(fā)中直接繼承HttpSerlvet類就好:

HttpServletRequest和HttpServletResponse的獲取與使用,JavaDev,Java,Servlet

每次只要有請(qǐng)求進(jìn)入Tomcat服務(wù)器,Tomcat服務(wù)器就會(huì)把請(qǐng)求過(guò)來(lái)的HTTP協(xié)議信息解析好封裝到HttpServletRequest對(duì)象中,然后傳遞到上圖中的service方法(doGet、doPost)中,用于給開(kāi)發(fā)者來(lái)編寫(xiě)自己需要的邏輯。

2、HttpServletRequest的使用

常用方法:

  • getRequestURI() 獲取請(qǐng)求的資源路徑
  • getRequestURL() 獲取請(qǐng)求的統(tǒng)一資源定位符
  • getRemoteHost() 獲取客戶端的IP地址
  • getHeader() 獲取請(qǐng)求頭
  • getParameter() 獲取請(qǐng)求的參數(shù)
  • getParameterValues() 獲取請(qǐng)求的參數(shù)(多個(gè)值的時(shí)候)
  • getMethod() 獲取請(qǐng)求的方式GET、POST
  • setAttribute(key,value) 設(shè)置域數(shù)據(jù)
  • getAttribute(key)獲取域數(shù)據(jù)
  • getRequestDispatcher() 獲取請(qǐng)求轉(zhuǎn)發(fā)對(duì)象

其中,Header和請(qǐng)求參數(shù)的相關(guān)方方法的類型與形參:

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

請(qǐng)求參數(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 getParameterNames()
// 獲取所有參數(shù)的Map集合
Map getParameterMap()

//....
Enumeration<String> enumeration = request.getParameterNames();  
Map<String,String> parameterMap = new HashMap<String,String>();
while (enumeration.hasMoreElements()){
    String parameter = enumeration.nextElement();  
    parameterMap.put(parameter,request.getParameter(parameter));  
}
//...

示例代碼:

package com.llg.web;

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.IOException;
import java.util.Arrays;

public class HttpServlet1 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        String[] hobby = request.getParameterValues("hobby");
        System.out.println("username:" + username);
        System.out.println("password:" + password);
        System.out.println("hobby:" + Arrays.asList(hobby));
        System.out.println("URI:" + request.getRequestURI());
        System.out.println("URL:" + request.getRequestURL());
        System.out.println("Client_IP:"+request.getRemoteHost());
        System.out.println("User-Agent:" + request.getHeader("User-Agent"));
        System.out.println("Request-Method:" + request.getMethod());

    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        /**
         * setCharacterEncoding方法設(shè)置請(qǐng)求的字符集為UTF-8,解決post請(qǐng)求的中文亂碼問(wèn)題
         * 注意要在獲取請(qǐng)求參數(shù)之前調(diào)用
         */
        request.setCharacterEncoding("UTF-8");
        System.out.println("-----POST-----");
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        String[] hobby = request.getParameterValues("hobby");
        System.out.println("username:" + username);
        System.out.println("password:" + password);
        System.out.println("hobby:" + Arrays.asList(hobby));
    }
}

3、HttpServletResponse的使用

HttpServletResponse和HttpServletRequest類一樣,每次請(qǐng)求進(jìn)來(lái),Tomcat服務(wù)器都會(huì)創(chuàng)建一個(gè)Response對(duì)象傳給Servlet程序使用。

HttpServletRequest表示請(qǐng)求過(guò)來(lái)的信息,HttpServletResponse表示所有響應(yīng)的信息,如果需要修改或設(shè)置返回給客戶端的信息,則可通過(guò)HttpServletResponse對(duì)象來(lái)設(shè)置。

關(guān)于兩個(gè)輸出流:

  • 字節(jié)流 getOutputStream()方法,常用于下載(傳遞二進(jìn)制數(shù)據(jù))
  • 字符流 getWriter()方法,常用于回傳字符串(用的多)

兩個(gè)流不能同時(shí)使用。

HttpServletRequest和HttpServletResponse的獲取與使用,JavaDev,Java,Servlet
運(yùn)行:

HttpServletRequest和HttpServletResponse的獲取與使用,JavaDev,Java,Servlet

給客戶端回傳信息:

HttpServletRequest和HttpServletResponse的獲取與使用,JavaDev,Java,Servlet

運(yùn)行:

HttpServletRequest和HttpServletResponse的獲取與使用,JavaDev,Java,Servlet
注意回傳中文信息,發(fā)生亂碼時(shí),需要設(shè)置字符集

//具體看文章開(kāi)頭的筆記【Servlet】
response.setHeader("Content-Type","text/html; charset=UTF-8");

4、獲取HttpServletRequest和HttpServletResponse

除了正常的Tomcat打包傳過(guò)來(lái)的HttpServletRequest和HttpServletResponse對(duì)象,也可以在其他地方自己獲取。

途徑一:直接注入

@Resource
private HttpServletRequest request;

//@Autowired
@Resource
private HttpServletResponse response;

途徑二:controller層中直接用

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

途徑三:從RequestContextHolder中獲取

關(guān)于SpringMVC的RequestContextHolder:即持有上下文的Request容器,參考:https://developer.aliyun.com/article/908719文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-628562.html

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

到了這里,關(guān)于HttpServletRequest和HttpServletResponse的獲取與使用的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • HttpServletRequest、HttpServletResponse、ServletContext、ServletConfig詳解

    HttpServletRequest 對(duì)象:主要作用是用來(lái)接收客戶端發(fā)送過(guò)來(lái)的請(qǐng)求信息,例如:請(qǐng)求的參數(shù),發(fā)送的頭信息等都屬于客戶端發(fā)來(lái)的信息,service()方法中形參接收的是 HttpServletRequest 接口的實(shí)例化對(duì)象,表示該對(duì)象主要應(yīng)用在 HTTP 協(xié)議上,該對(duì)象是由 Tomcat 封裝好傳遞過(guò)來(lái)。 Htt

    2024年01月21日
    瀏覽(48)
  • JavaWeb:Servlet、ServletContext、HttpServletResponse、HttpServletRequest 的詳細(xì)內(nèi)容

    JavaWeb:Servlet、ServletContext、HttpServletResponse、HttpServletRequest 的詳細(xì)內(nèi)容

    Servlet 是 Sun 公司開(kāi)發(fā)動(dòng)態(tài) Web 的一門(mén)技術(shù),在這些 API 中提供了一個(gè)接口就是:Servlet,開(kāi)發(fā)一個(gè) Servlet 程序需要 兩個(gè)步驟 : 編寫(xiě)一個(gè)類,實(shí)現(xiàn) Servlet 接口; 把開(kāi)發(fā)好的 java 類部署到 Web 服務(wù)器中。 把實(shí)現(xiàn)了 Servlet 接口的 Java 程序叫做 Servlet 。 創(chuàng)建一個(gè)普通的 Maven 項(xiàng)目,注

    2024年02月03日
    瀏覽(21)
  • 【仿寫(xiě)tomcat】四、解析http請(qǐng)求信息,響應(yīng)給前端,HttpServletRequest、HttpServletResponse的簡(jiǎn)單實(shí)現(xiàn)

    【仿寫(xiě)tomcat】四、解析http請(qǐng)求信息,響應(yīng)給前端,HttpServletRequest、HttpServletResponse的簡(jiǎn)單實(shí)現(xiàn)

    在解析請(qǐng)求之前我們要思考一個(gè)問(wèn)題,我們解析的是其中的哪些內(nèi)容? 對(duì)于最基本的實(shí)現(xiàn),當(dāng)然是 請(qǐng)求類型 , 請(qǐng)求的url 以及 請(qǐng)求參數(shù) ,我們可以根據(jù)請(qǐng)求的類型作出對(duì)應(yīng)的處理,通過(guò)url在我們的mapstore中找到servlet, 那么請(qǐng)求的參數(shù)我們是不是還沒(méi)有儲(chǔ)存的地方呢? 所以

    2024年02月12日
    瀏覽(24)
  • 有關(guān)使用HttpServletRequest的Cookie的設(shè)置和獲取

    介紹了如何在HttpServletRequest中對(duì)Cookie的進(jìn)行設(shè)置和獲取。 在服務(wù)器端的HttpServletRequest中對(duì)Cookie的進(jìn)行設(shè)置后,客戶端在接下來(lái)的請(qǐng)求中會(huì)攜帶此設(shè)置好的Cookie,所以可以在服務(wù)器端接收請(qǐng)求時(shí)提取這個(gè)Cookie的值。 服務(wù)器端設(shè)置Cookie值 : 服務(wù)器端提取Cookie值 : Stackoverflow:

    2024年02月09日
    瀏覽(50)
  • Springboot3.2.0使用RequestContextHolder獲取HttpServletRequest為NULL

    Springboot3.2.0使用RequestContextHolder獲取HttpServletRequest為NULL

    在之前的版本中一般為了能在任意地方都能獲取到HttpServletRequest我們一般都會(huì)自己封裝工具類從 RequestContextHolder 中獲取到 但是在新版的SpringBoot3.2.0版本中這種方式獲取到的 ServletRequestAttributes 是null,點(diǎn)擊進(jìn)去RequestContextHolder查看源代碼發(fā)現(xiàn)少了依賴 即使我在pom中加入的響應(yīng)

    2024年04月13日
    瀏覽(25)
  • 使用HttpServletRequest或RequestContextHolder或@RequestHeader獲取http請(qǐng)求頭信息

    記錄 :392 場(chǎng)景 :在微服務(wù)中獲取http請(qǐng)求頭信息方式,可以在代碼中注入HttpServletRequest;可以使用Spring的RequestContextHolder,可以使用@RequestHeader注解。 版本 :JDK 1.8,SpringBoot 2.6.3,springCloud 2021.0.1 1.使用HttpServletRequest獲取請(qǐng)求頭信息 1.1在微服務(wù)的Controller層獲取請(qǐng)求頭 本質(zhì)就是使

    2024年02月10日
    瀏覽(16)
  • Java 中,使用 HttpServletResponse 對(duì)象將服務(wù)器上的文件響應(yīng)到客戶端瀏覽器進(jìn)行下載

    在服務(wù)器端,使用 FileInputStream 打開(kāi)要下載的文件,并將其讀取到字節(jié)數(shù)組中。 2.設(shè)置 HttpServletResponse 的響應(yīng)頭信息,告訴瀏覽器需要下載文件,并指定文件名和文件類型 其中,Content-Type 表示響應(yīng)內(nèi)容的類型,這里設(shè)置為 application/octet-stream,表示二進(jìn)制流。Content-Length 表示

    2024年02月13日
    瀏覽(27)
  • SpringBoot異步任務(wù)獲取HttpServletRequest

    在使用框架日常開(kāi)發(fā)中需要在controller中進(jìn)行一些異步操作減少請(qǐng)求時(shí)間,但是發(fā)現(xiàn)在使用@Anysc注解后會(huì)出現(xiàn)Request對(duì)象無(wú)法獲取的情況,本文就此情況給出完整的解決方案 @Anysc注解會(huì)開(kāi)啟一個(gè)新的線程,主線程的Request和子線程是不共享的,所以獲取為null 在使用springboot的自定

    2024年02月21日
    瀏覽(22)
  • HttpServletRequest核心方法以及獲取請(qǐng)求參數(shù)

    HttpServletRequest核心方法以及獲取請(qǐng)求參數(shù)

    一. 展示HttpServletRequest中一些重要方法 當(dāng)Tomcat 通過(guò) Socket API 讀取 HTTP 請(qǐng)求(字符串), 并且按照 HTTP 協(xié)議的格式把字符串解析成HttpServletRequest 對(duì)象. 創(chuàng)建一個(gè)ShowRequest類 通過(guò) smart Tomcat 部署程序并在瀏覽器中通過(guò)URL http://127.0.0.1:8080/0310/ShowRequest訪問(wèn), 可以看到如下結(jié)果: 由于 Que

    2024年02月16日
    瀏覽(18)
  • 【SpringBoot】獲取HttpServletRequest的三種方式

    線程安全 缺點(diǎn): 每個(gè)方法都需要寫(xiě)一遍 線程安全 在 Spring 中, DemoRequestController 的 scope 是 singleton (單例),也就是說(shuō)在整個(gè) web 系統(tǒng)中,只有一個(gè) DemoRequestController ;但是其中注入的 request 卻是線程安全的,原因在于:使用這種方式,當(dāng) Bean (本例的 DemoRequestController )初始化

    2024年02月12日
    瀏覽(20)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包