兩個(gè)頁面之間傳遞值是可以用request來管理,沒有必要使用session。有點(diǎn)太浪費(fèi)。你可以先在一個(gè)頁面往請(qǐng)求寫你的數(shù)據(jù),由于你是需要從url中獲得值,所以可以直接在另一頁面中通過
網(wǎng)站建設(shè)哪家好,找成都創(chuàng)新互聯(lián)!專注于網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、小程序設(shè)計(jì)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了安新免費(fèi)建站歡迎大家使用!
request.getParameter("key")來獲得你的值.這樣是最簡單的方法。
也可以使用request.setAttribute("key"),
然后使用(String)request.getAttribute("key")來獲取。建議使用第一種。
知識(shí)先填坑:
假設(shè)訪問路徑為:**/learn/js_basics/11.html?a=100b=20c=30;
分別通過【正則匹配】、【拆分字符串成數(shù)組】、【新API URLSearchParams】三種方式獲取參數(shù)方法如下:
思路:
兩次用到split方法,第一次將每個(gè)參數(shù)和值拆分為數(shù)組中的一個(gè)值;
遍歷這個(gè)數(shù)組,每個(gè)參數(shù)和值再次分割,分別將參數(shù)和值賦值給一個(gè)對(duì)象的屬性和值;
調(diào)用方法通過對(duì)象的屬性,獲取改值
如果你是指兩個(gè)頁面之間的傳值,那么可以這么做:
簡單的話,可以通過URL傳值,比如
可以通過讀取url的參數(shù)name獲得gem。
也可以通過session,cookie等方法,這兩種方法就有一些限制,比如換個(gè)瀏覽器,session和cookie就不一樣了,那么你傳的值就不存在了。
所以第一種會(huì)比較通用。
如果是傳值給模板(一般是模板引擎之類的,比如html/template),這些教程很多,搜一下比較快速解決
用JS獲取地址欄參數(shù)的方法(超級(jí)簡單)
方法一:采用正則表達(dá)式獲取地址欄參數(shù):( 強(qiáng)烈推薦,既實(shí)用又方便?。?/p>
function GetQueryString(name){ var reg = new RegExp("(^|)"+ name +"=([^]*)(|$)"); var r = window.location.search.substr(1).match(reg); if(r!=null)return unescape(r[2]); return null;} // 調(diào)用方法alert(GetQueryString("參數(shù)名1"));alert(GetQueryString("參數(shù)名2"));alert(GetQueryString("參數(shù)名3"));
下面舉一個(gè)例子:
若地址欄URL為:abc.html?id=123url=
那么,但你用上面的方法去調(diào)用:alert(GetQueryString("url"));
則會(huì)彈出一個(gè)對(duì)話框:內(nèi)容就是
如果用:alert(GetQueryString("id"));那么彈出的內(nèi)容就是 123 啦;
當(dāng)然如果你沒有傳參數(shù)的話,比如你的地址是 abc.html 后面沒有參數(shù),那強(qiáng)行輸出調(diào)用結(jié)果有的時(shí)候會(huì)報(bào)錯(cuò):
所以我們要加一個(gè)判斷 ,判斷我們請(qǐng)求的參數(shù)是否為空,首先把值賦給一個(gè)變量:
var myurl=GetQueryString("url");if(myurl !=null myurl.toString().length1){ alert(GetQueryString("url"));}
這樣就不會(huì)報(bào)錯(cuò)了!
let url=" ;name=srval=aaa ";
拿到以下結(jié)果
/*
第二種方式基于正則封裝
先配置Header最長讀取時(shí)間、req最長讀取時(shí)間、req最大讀取長度默認(rèn)6M。
RFC7230禁止\r\n參數(shù),Url中只允許包含英文字母(a-zA-Z)、數(shù)字(0-9)、-_.~4個(gè)特殊字符以及所有保留字符。但go net/http包放寬了這個(gè)要求。
先構(gòu)建newTextprotoReader,由于緩沖區(qū)是對(duì)象復(fù)用的,用完后要defer put。共完以以下解析任務(wù):
TextprotoReader數(shù)據(jù)結(jié)構(gòu),將字節(jié)碼Reader轉(zhuǎn)成文本Reader。
第一步,從第一行解析出method uri prototype。
第二步解析URL。url.URL數(shù)據(jù)結(jié)構(gòu):
解析Scheme,協(xié)議前綴(小寫)。有查詢參數(shù)?,則配置url.ForceQuery url.RawQuery。有認(rèn)證信息///...//,則解析url.User url.Host。最后配置url.Path和url.RawPath,如果Path==RawPath,則RawPath=""。
第三步解析MIMEHeader。
第四步readTransfer。重新配置如下參數(shù):RequestMethod ProtoMajor ProtoMinor Header Trailer ContentLength Close。對(duì)于Body,如果encodings支持chunked,讀取流用chunkedReader包裹。默認(rèn)情況用LimitedReader,無body賦空的struct{}。
以下情況返回非空err,示得到正確的請(qǐng)求:
最后配置req.ctx req.RemoteAddr req.TLS body.doEarlyClose = true。
構(gòu)建Response:
其中closeNotifyCh必須在構(gòu)建時(shí)初始化,沒有content所以先置contentLength為-1。
配置w.cw并被w.w包裹。w.cw緩沖默認(rèn)大小2M。
獲取Request可能出現(xiàn)如下錯(cuò)誤:
先上響應(yīng)數(shù)據(jù)結(jié)構(gòu):
response字段可以分類為:大對(duì)象、緩沖、KV對(duì)或bool型的狀態(tài)參數(shù)。
大對(duì)象有:
狀態(tài)字段:
chunkWriter數(shù)據(jù)結(jié)構(gòu):
chunkWriter包裹了Response,功能之一是完成Header設(shè)置,包括Content-Type Content-Length chunk-header。bufio.Writer是chunkWriter是緩沖包裹。
handler將響應(yīng)寫入到response.w。
調(diào)用w.w.Flush()將w寫入到cw,注意到Flush()操作,如果未刷空緩存并報(bào)錯(cuò),觸發(fā)拷貝操作。報(bào)錯(cuò)不會(huì)退回已寫出的數(shù)據(jù)。
進(jìn)而調(diào)用cw.Write(),根據(jù)cw.chunking參數(shù)。
putBufioWriter(w.w)清空resp.w緩沖,如果池化放回sync.pool。
根據(jù)chunkWriter的定義,w.cw.close()負(fù)責(zé)cw的結(jié)束工作:寫入換行符和resp.trailers數(shù)據(jù)。
最后刷新TCP緩沖w.conn.bufw.Flush(),完成響應(yīng)包發(fā)送。并正確關(guān)閉request。