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

HttpServletRequest的getParameter()的坑及解決

 更新時間:2023年07月29日 16:44:29   作者:我想問問天  
這篇文章主要介紹了HttpServletRequest的getParameter()的坑及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

HttpServletRequest的getParameter()的坑

問題

最近做項目的時候和對接方聯(lián)調(diào)的時候,對接方會傳入一個url給我們,然后經(jīng)過一系列的操作之后,我們會將一些參數(shù)返回到該url上,回調(diào)給對接方。

然而當使用了getParameter獲取傳入的url的時候發(fā)現(xiàn),獲取的url并不是對接方傳入的完整的url。

例子:對接方傳入url=http://abc.com/#/result/success這樣類似的url

我們原本要返回的是(a=1&b=2是我方添加的參數(shù)):

http://abc.com/#/result/success?a=1&b=2

結(jié)果返回的是:

http://abc.com/?a=1&b=2

導致無法達到預期的效果

原因

首先直接貼出來原因,是因為使用了HttpServletRequest下面的getParameter()方法去獲取對接方的參數(shù),(類似這樣:http://localhost:8090/testGetParam?url=http://abc.com),getParameter(“url”)獲取到的url會將"#“后面的內(nèi)容全部忽略。

因為”#"后的參數(shù)已經(jīng)被忽略了,所以最后返回的時候就只有http://abc.com/?a=1&b=2。

沒有了#/result/success這個路徑,就使得跳轉(zhuǎn)的頁面不正確。

驗證過程

我們將通過有沒有"#“的對比試驗來證明,getParameter()會忽略”#"后面的內(nèi)容。

1.getParameter()不存在#號的實驗:

url: http://localhost:8090/testGetParam?url=http://abc.com

結(jié)果:

這里寫圖片描述

2.getParameter()存在#號的實驗

url: http://localhost:8090/testGetParam?url=http://abc.com/#/index.html

結(jié)果:

這里寫圖片描述

結(jié)論和解決方式

1.有#號和沒有#號的結(jié)果返回一模一樣,因為getParameter()底層把遇到以后#后面的(包括#號自身),全部給忽略掉了,所以導致getParameter時,帶有#的內(nèi)容顯示不出來(具體原理后面加文章分析)

2.解決的方式就是采用urlencode,現(xiàn)將url中的#號傳入的時候,進行轉(zhuǎn)碼,要使用的時候在進行urldecode,就可以了。

HttpServletRequest getParameter為null

HttpServletRequest 提供了 getParameter 方法,可以非常方便獲取請求行/請求體中key/value形式的數(shù)據(jù)(x-www-form-urlencoded、multipart/form-data,其都是key/value形式,只是對數(shù)據(jù)編碼方式有差別),對于application/json 之類的數(shù)據(jù)只能使用流的方式讀取。

創(chuàng)建web 項目工程

1.TestServlet.java

package servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
 * Servlet implementation class TestServlet
 */
@WebServlet("/test")
public class TestServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String name = request.getParameter("name");
		System.out.println("name:" + name);
		response.getWriter().append("Served at: ").append(request.getContextPath());
	}
	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//request.setCharacterEncoding  只能解決post 亂碼問題
		request.setCharacterEncoding("utf-8");
		doGet(request, response);
	}
}

2.test.jsp 請求核心

fetch('http://localhost:8080/web-test/test?',{
    method:'post',
     body:'name=vincent',
     headers:{
       'Content-Type':'application/json',
     }
   }).then(resp=>{
     return resp.text();
   }).then(resp=>{
     console.log(resp);
});

3.效果如下:

在這里插入圖片描述

4.test.jsp headers Content-Type 修改為:application/x-www-form-urlencoded:

在這里插入圖片描述

注意

HttpServletRequest getParameter 獲取參數(shù)有如下條件:

1.request.getParameter() 方法獲取的參數(shù)是形如key/value 形式的數(shù)據(jù)(x-www-form-urlencoded、multipart/form-data、及請求行中的key1=value1&key2=value2),與數(shù)據(jù)所在位置(請求體)和請求方法(GET、POST)無關。

2.request.setCharacterEncoding 只能解決post 亂碼問題,對于get 方式只能獲取到參數(shù)值再使用String 相關的轉(zhuǎn)碼方式(ISO-8859-1解碼)

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • SpringBoot自動裝配原理及分析

    SpringBoot自動裝配原理及分析

    SpringBoot通過@SpringBootApplication注解啟動自動裝配,其中@EnableAutoConfiguration導入AutoConfigurationImportSelect類,讀取META-INF下的配置文件,根據(jù)@Conditional條件篩選并注入符合條件的Bean到IOC容器
    2025-09-09
  • Java Math.round函數(shù)詳解

    Java Math.round函數(shù)詳解

    這篇文章主要介紹了Java Math.round函數(shù)詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • SpringBoot Redis用注釋實現(xiàn)接口限流詳解

    SpringBoot Redis用注釋實現(xiàn)接口限流詳解

    Redis 除了做緩存,還能干很多很多事情:分布式鎖、限流、處理請求接口冪等性。。。太多太多了~今天想和小伙伴們聊聊用 Redis 處理接口限流,這也是最近的 項目涉及到這個知識點了,我就拎出來和大家聊聊這個話題
    2022-07-07
  • Java代碼缺陷的自動化檢測與跟蹤的管理指南

    Java代碼缺陷的自動化檢測與跟蹤的管理指南

    本文系統(tǒng)解析Java代碼缺陷類型及危害,涵蓋靜態(tài)分析工具檢測方法,動態(tài)監(jiān)控技術(異常處理、性能指標),缺陷跟蹤系統(tǒng)與CI/CD自動化集成方案,助力提升代碼質(zhì)量與安全防護,需要的朋友可以參考下
    2025-07-07
  • 使用Netty解碼自定義通信協(xié)議方式

    使用Netty解碼自定義通信協(xié)議方式

    這篇文章主要介紹了使用Netty解碼自定義通信協(xié)議方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-05-05
  • 深入理解Java中的接口

    深入理解Java中的接口

    下面小編就為大家?guī)硪黄钊肜斫釰ava中的接口。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-05-05
  • Mybatis XML文件中使用CDATA標簽的實現(xiàn)

    Mybatis XML文件中使用CDATA標簽的實現(xiàn)

    本文主要介紹了Mybatis XML文件中使用CDATA標簽,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2026-03-03
  • Mybatis通用Mapper(tk.mybatis)的使用

    Mybatis通用Mapper(tk.mybatis)的使用

    本文主要介紹了Mybatis通用Mapper(tk.mybatis)的使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-07-07
  • Java線程的調(diào)度與優(yōu)先級詳解

    Java線程的調(diào)度與優(yōu)先級詳解

    這篇文章主要為大家詳細介紹了Java線程的調(diào)度與優(yōu)先級,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • JVM 體系結(jié)構詳解

    JVM 體系結(jié)構詳解

    本文主要介紹了JVM體系結(jié)構的相關知識。具有很好的參考價值。下面跟著小編一起來看下吧
    2017-03-03

最新評論

泗阳县| 阿巴嘎旗| 绥中县| 亳州市| 观塘区| 齐齐哈尔市| 婺源县| 左贡县| 明星| 巨野县| 怀化市| 泾阳县| 财经| 明星| 嘉峪关市| 石台县| 莱州市| 南丰县| 永吉县| 万全县| 锡林浩特市| 阿拉善左旗| 桦川县| 镇雄县| 临漳县| 大埔县| 友谊县| 西安市| 六盘水市| 遂溪县| 屏边| 太康县| 上思县| 五家渠市| 枣庄市| 水富县| 海宁市| 仙桃市| 久治县| 榆林市| 澄城县|