- N +

currenttimemillis方法(年月日時(shí)分秒轉(zhuǎn)換為毫秒數(shù))

大家好,currenttimemillis方法相信很多的網(wǎng)友都不是很明白,包括年月日時(shí)分秒轉(zhuǎn)換為毫秒數(shù)也是一樣,不過沒有關(guān)系,接下來就來為大家分享關(guān)于currenttimemillis方法和年月日時(shí)分秒轉(zhuǎn)換為毫秒數(shù)的一些知識(shí)點(diǎn),大家可以關(guān)注收藏,免得下次來找不到哦,下面我們開始吧!

防止web頁面表單重復(fù)提交的方法有哪些

1.js方法解決:關(guān)于js方法解決就是說通過js動(dòng)態(tài)控制提交按鈕不能多次點(diǎn)擊,或者多次點(diǎn)擊不起作用。

方案一:通過設(shè)立標(biāo)識(shí)使表單不能重復(fù)提交:

varflag=true;functionSub(){if(flag){flag=false;document.form1.onsubmit();}}

方案二:一次點(diǎn)擊后使得提交按鈕變成不可用

<inputtype="button"value="login"onclick="this.disabled=true;this.form.submit();"/>

總的來說,js解決方案是基本可以防止重復(fù)點(diǎn)擊提交按鈕造成的重復(fù)提交問題,但是前進(jìn)后退操作,或者F5刷新頁面等問題并不能得到解決。

最重要的一點(diǎn),前端的代碼只能防止不懂js的用戶,如果碰到懂得js的編程人員,那js方法就沒用了。

2.設(shè)置HTTP報(bào)頭,控制表單緩存,使得所控制的表單不緩存信息,這樣用戶就無法通過重復(fù)點(diǎn)擊按鈕去重復(fù)提交表單。

<metahttp-equiv="Cache-Control"content="no-cache,must-revalidate">

但是這樣做也有局限性,用戶在提交頁面點(diǎn)擊刷新也會(huì)造成表單的重復(fù)提交。

3.通過PRG設(shè)計(jì)模式(用來防止F5刷新重復(fù)提交表單):

PRG模式通過響應(yīng)頁面Header返回HTTP狀態(tài)碼進(jìn)行頁面跳轉(zhuǎn)替代響應(yīng)頁面跳轉(zhuǎn)過程。具體過程如下:

客戶端用POST方法請(qǐng)求服務(wù)器端數(shù)據(jù)變更,服務(wù)器對(duì)客戶端發(fā)來的請(qǐng)求進(jìn)行處理重定向到另一個(gè)結(jié)果頁面上,客戶端所有對(duì)頁面的顯示請(qǐng)求都用get方法告知服務(wù)器端,這樣做,后退再前進(jìn)或刷新的行為都發(fā)出的是get請(qǐng)求,不會(huì)對(duì)server產(chǎn)生任何數(shù)據(jù)更改的影響。

但此方法也不能防止所有情況:例如用戶多次點(diǎn)擊提交按鈕;惡意用戶避開客戶端預(yù)防多次提交手段,進(jìn)行重復(fù)提交請(qǐng)求;

以上都說的是在客戶端如何防止表單重復(fù)提交,下面說一下服務(wù)器端有哪些可行的方法。

4.如果是注冊(cè)或存入數(shù)據(jù)庫的操作,可以通過在數(shù)據(jù)庫中字段設(shè)立唯一標(biāo)識(shí)來解決,這樣在進(jìn)行數(shù)據(jù)庫插入操作時(shí),因?yàn)槊看尾迦氲臄?shù)據(jù)都相同,數(shù)據(jù)庫會(huì)拒絕寫入。這樣也避免了向數(shù)據(jù)庫中寫入垃圾數(shù)據(jù)的情況,同時(shí)也解決了表單重復(fù)提交問題。

但是這種方法在業(yè)務(wù)邏輯上感覺是說不過去的,本來該有的邏輯,缺因?yàn)閿?shù)據(jù)庫該有的設(shè)計(jì)隱藏了。而且這種方法也有一定的功能局限性,只適用于某系特定的插入操作。

5.session方法:

在struts框架中防止表單重復(fù)提交的方法是生成Token存入session,以此判斷表單是否是第一次提交。以下給大家解釋一下運(yùn)行流程。

首先客戶端請(qǐng)求服務(wù)器中的表單,服務(wù)器將客戶機(jī)所請(qǐng)求的表單發(fā)給客戶機(jī)同時(shí)發(fā)送一個(gè)特殊的隨機(jī)數(shù)(Token)作為表單號(hào)存在表單的隱藏域中(type=hidden),并且存入服務(wù)器端的session中。在客戶端填寫完表單內(nèi)容向服務(wù)器提交時(shí),同時(shí)也將隱藏域中的表單號(hào)發(fā)給服務(wù)器端,服務(wù)器端此時(shí)會(huì)檢測(cè)服務(wù)器端的表單號(hào)是否存在,如果存在,則進(jìn)行提交操作,并刪除此表單號(hào),否則,服務(wù)器視為客戶機(jī)端重復(fù)提交表單,不予操作。

此處貼出生成Token的代碼(保證隨機(jī)數(shù)的獨(dú)一無二性):

classToken{privateToken(){}privatestaticTokeninstance=newToken();publicTokengetinstance(){returninstance;}//隨機(jī)數(shù)發(fā)生器publicStringgetToken(){Stringtoken=System.currentTimeMillis()+""+newRandom().nextInt();//獲得毫秒數(shù)加隨機(jī)數(shù)try{MessageDigestmd=MessageDigest.getInstance("md5");byte[]md5=md.digest(token.getBytes());BASE64Encoderbase=newBASE64Encoder();base.encode(md5);}catch(NoSuchAlgorithmExceptione){e.printStackTrace();}returnnull;}}

要強(qiáng)調(diào)的是,利用session方法解決表單重復(fù)問題是十分完美的,基本上可以應(yīng)對(duì)各種重復(fù)提交問題。

但!是不是之前在客戶端防止表單重復(fù)提交的種種方法就不使用了呢?

答案是否定的,我們需要多種方法混合使用才能達(dá)到最好的效果,也許有人會(huì)問,不是說session方法基本可以應(yīng)對(duì)各種重復(fù)提交問題了嗎?

這里我們所說的達(dá)到最好效果指的是,給用戶更好地體驗(yàn),例如用戶點(diǎn)擊了提交按鈕,這時(shí)將按鈕變?yōu)椴豢捎玫模靡愿嬖V用戶你已經(jīng)提交內(nèi)容了,不可重復(fù)提交。還有如果無論什么情況都用session防止表單重復(fù)提交問題,反而無形的增加了服務(wù)器端的負(fù)擔(dān)。

soapui怎么調(diào)用datetime類型的字段

可參考:${=System.currentTimeMillis()}強(qiáng)制類型轉(zhuǎn)換。將Date轉(zhuǎn)為string就可以

arduino的代碼中changeTime = millis()是什么含義為啥要引入個(gè)milli

millis是“毫秒”,一般用于取得系統(tǒng)時(shí)間,例如:System.currentTimeMillis();返回的是以毫秒為單位的當(dāng)前時(shí)間。

currenttimemillis毫秒還是秒

是毫秒,currenttimemillis是currenttimemilliseconds的縮寫,中文意思是當(dāng)前時(shí)間(毫秒)

Theintervalismeasuredinminutes,withthedifferencebetween_LastUpdatedandthecurrenttimemeasuredinmilliseconds.

java8 stream和foreach哪個(gè)效率高

1.問題描述

java8stream和foreach哪個(gè)效率高?

問題結(jié)論

150W條數(shù)據(jù)以上:stream>paralleStream>simple

150W條數(shù)據(jù)以下:simple>stream>paralleStream

從性能上考慮:小數(shù)據(jù)量用普通的forEach就可以,沒有必要使用java8中的新出來的幾種,已經(jīng)在項(xiàng)目中使用的也不需要改回來,10W條也就幾毫秒的差距。

2.測(cè)試用例

importjava.util.ArrayList;

importjava.util.List;

publicclassForEachMain{

publicstaticvoidmain(String[]args){

//實(shí)例化arrayList

List<Integer>arrayList=newArrayList<Integer>();

intnum=15000000;

//插入10萬條數(shù)據(jù)

for(inti=0;i<num;i++){

arrayList.add(i);

}

List<Integer>res=newArrayList<>();

res.clear();

//用foreach循環(huán)arrayList

longarrayForeachStartTime=System.currentTimeMillis();

for(Integerin:arrayList){

res.add(in);

}

longarrayForeachEndTime=System.currentTimeMillis();

System.out.println(

"用foreach循環(huán)arrayList"+(num)+"次花費(fèi)時(shí)間:"+(arrayForeachEndTime-arrayForeachStartTime)+"毫秒");

res.clear();

//用stream-foreach循環(huán)arrayList

longarrayStreamStartTime=System.currentTimeMillis();

arrayList.stream().forEach(e->res.add(e));

longarrayStreamEndTime=System.currentTimeMillis();

System.out.println(

"用Stream-foreach循環(huán)arrayList"+(num)+"次花費(fèi)時(shí)間:"+(arrayStreamEndTime-arrayStreamStartTime)+"毫秒");

res.clear();

//用parallelStream-foreach循環(huán)arrayList

longarrayParallelStreamStartTime=System.currentTimeMillis();

arrayList.parallelStream().forEach(e->res.add(e));

longarrayParallelStreamEndTime=System.currentTimeMillis();

System.out.println("用parallelStream-foreach循環(huán)arrayList"+(num)+"萬次花費(fèi)時(shí)間:"

+(arrayParallelStreamEndTime-arrayParallelStreamStartTime)+"毫秒");

}

}

2.1當(dāng)num=50000000時(shí)

用foreach循環(huán)arrayList5000萬次花費(fèi)時(shí)間:2840毫秒

用stream-foreach循環(huán)arrayList5000萬次花費(fèi)時(shí)間:507毫秒

用parallelStream-foreach循環(huán)arrayList5000萬次花費(fèi)時(shí)間:1168毫秒

2.2當(dāng)num=500000時(shí)

用foreach循環(huán)arrayList50萬次花費(fèi)時(shí)間:13毫秒

用stream-foreach循環(huán)arrayList50萬次花費(fèi)時(shí)間:25毫秒

用parallelStream-foreach循環(huán)arrayList50萬次花費(fèi)時(shí)間:35毫秒

2.3當(dāng)num=5000時(shí)

用foreach循環(huán)arrayList5000次花費(fèi)時(shí)間:1毫秒

用stream-foreach循環(huán)arrayList0萬次花費(fèi)時(shí)間:16毫秒

用parallelStream-foreach循環(huán)arrayList0萬次花費(fèi)時(shí)間:8毫秒

最直觀的感覺,stream的流式處理應(yīng)該比較快,這種想當(dāng)然的推測(cè),需要事實(shí)去佐證,運(yùn)行過測(cè)試代碼之后,發(fā)現(xiàn)并不是那么回事。耳聽為虛,眼見為實(shí),李子是不是澀的,最簡(jiǎn)單的方式是嘗一口。請(qǐng)記住,編寫代碼時(shí),一定要以最簡(jiǎn)潔為原則,畢竟運(yùn)行程序的硬件成本會(huì)隨著時(shí)間的推移在不斷降低。

作者:夕陽雨晴,歡迎關(guān)注我的頭條號(hào):偶爾美文,主流Java,為你講述不一樣的碼農(nóng)生活。

關(guān)于currenttimemillis方法和年月日時(shí)分秒轉(zhuǎn)換為毫秒數(shù)的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。

返回列表
上一篇:
下一篇: