在java中使用
㈠ java中怎麼使用session
不考慮框架下,在JAVA中使用session
大概有以下幾種使用方法:
1、前台設置:利用jsp的內置對象session進行設置。
<%
session.setAttribute("username",username);
%>
2、後台設置:
(1)Filter設置:
{
@Override
publicvoiddoFilter(ServletRequestarg0,ServletResponsearg1,FilterChainchain)throwsIOException,ServletException{
//把請求和響應對象強制轉換為HttpServlet域對象
HttpServletRequestrequest=(HttpServletRequest)arg0;
HttpServletResponseresponce=(HttpServletResponse)arg1;
HttpSessionsession=request.getSession(false);
session.setAttribute("username",username);
}
}
(2)Servlet設置:
{
//doGet()與doPost()任選
publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{
//創建session對象
HttpSessionsession=request.getSession(false);
session.setAttribute("username",username);
}
}
(1)在java中使用擴展閱讀:
Session:在計算機中,尤其是在網路應用中,稱為「會話控制」。Session
對象存儲特定用戶會話所需的屬性及配置信息。
這樣,當用戶在應用程序的 Web 頁之間跳轉時,存儲在 Session
對象中的變數將不會丟失,而是在整個用戶會話中一直存在下去。
當用戶請求來自應用程序的 Web 頁時,如果該用戶還沒有會話,則 Web
伺服器將自動創建一個 Session 對象。當會話過期或被放棄後,伺服器將終止該會話。
Session
對象最常見的一個用法就是存儲用戶的首選項。例如,如果用戶指明不喜歡查看圖形,就可以將該信息存儲在 Session 對象中。
有關使用
Session 對象的詳細信息,請參閱「ASP 應用程序」部分的「管理會話」。注意 會話狀態僅在支持 cookie 的瀏覽器中保留。
session的工作原理:
1、當一個session第一次被啟用時,一個唯一的標識被存儲於本地的cookie中。
2、首先使用session_start()函數,php從session倉庫中載入已經存儲的session變數。
3、當執行PHP腳本時,通過使用session_register()函數注冊session變數。
4、當PHP腳本執行結束時,未被銷毀的session變數會被自動保存在本地一定路徑下的session庫中,這個路徑可以通過php.ini文件中的session.save_path指定,下次瀏覽網頁時可以載入使用。
㈡ 在java中能用private修飾類嗎
一般的類是不能用private修飾,類的可見性最少是包可見的,也就是默認的,不加任何修飾。
但是有一種特殊的情況,內部類是可以用private修飾的!不讓類以外的其他類訪問!這個問題在《java核心技術》里有講!
Java的外部類為什麼不能使用private、protected進行修飾?
對於頂級類(外部類)來說,只有兩種修飾符:public和默認(default)。因為外部類的上一單元是包,所以外部類只有兩個作用域:同包,任何位置。
因此,只需要兩種控制許可權:包控制許可權和公開訪問許可權,也就對應兩種控制修飾符:public和默認(default)。
如果類使用了private修飾符,說明是個內部類。內部類的上一級是外部類,那麼對應的有四種訪問控制修飾符:本類(private),同包(default),父子類(protected),任何位置(public)。
當一個內部類使用了private修飾後,只能在該類的外部類內部使用。可以想一下,一個java項目是不可能在一個class裡面完成的。
mvc模式中,是把類分為三層,一層層調用類。如果定義為私有的和受保護的就無法調用。換句話說,對於一個java文件,要麼就是自己單獨運行,要麼就是被其他程序作為庫調用。
如果一個java文件的類被private修飾,那麼是不是其他的程序或是類是無法使用它的,那麼他作為一個單獨的文件就沒啥用了。
如果它作為單個文件運行,類載入怎麼找到它呢,因為它對外不可見。同時,也失去了類的存在意義。因此,類只有public和默認修飾符。
㈢ 在java中boolean具體怎麼使用
boolean是java中的布爾型(邏輯型)數據類型,在java中boolean值只能是true和false,而不能用0和1代替,並且一定要小寫。
布爾值 true 代表「真」,false 代表「假」。一般關系運算符會返回布爾值的結果。另外,數值的 0、-0、特殊值的 null、NaN、undefined 以及空字元("")都會被解釋為 false ,其他值則會被解釋為 true 。
(3)在java中使用擴展閱讀
java中創建boolean對象的方法:
1、使用關鍵詞 new 來定義 Boolean 對象。下面的代碼定義了一個名為 myBoolean 的邏輯對象:
var myBoolean = new Boolean()
var myBoolean = new Boolean()
注釋:如果邏輯對象無初始值或者其值為 0、-0、null、""、false、undefined 或者 NaN,那麼對象的值為 false。否則,其值為 true(即使當自變數為字元串 "false" 時)!
2、下面的所有的代碼行均會創建初始值為 false 的 Boolean 對象。
var myBoolean = new Boolean();
var myBoolean = new Boolean(0);
var myBoolean = new Boolean(null);
var myBoolean = new Boolean("");
var myBoolean = new Boolean(NaN);
3、下面的所有的代碼行均會創初始值為 true 的 Boolean 對象:
var myBoolean = new Boolean(1);
var myBoolean = new Boolean(true);
var myBoolean = new Boolean("true");
var myBoolean = new Boolean("false");
var myBoolean = new Boolean("Bill Gates");
簡單的Java加密演算法有:
第一種. BASE
Base是網路上最常見的用於傳輸Bit位元組代碼的編碼方式之一,大家可以查看RFC~RFC,上面有MIME的詳細規范。Base編碼可用於在HTTP環境下傳遞較長的標識信息。例如,在Java Persistence系統Hibernate中,就採用了Base來將一個較長的唯一標識符(一般為-bit的UUID)編碼為一個字元串,用作HTTP表單和HTTP GET URL中的參數。在其他應用程序中,也常常需要把二進制數據編碼為適合放在URL(包括隱藏表單域)中的形式。此時,採用Base編碼具有不可讀性,即所編碼的數據不會被人用肉眼所直接看到。
第二種. MD
MD即Message-Digest Algorithm (信息-摘要演算法),用於確保信息傳輸完整一致。是計算機廣泛使用的雜湊演算法之一(又譯摘要演算法、哈希演算法),主流編程語言普遍已有MD實現。將數據(如漢字)運算為另一固定長度值,是雜湊演算法的基礎原理,MD的前身有MD、MD和MD。廣泛用於加密和解密技術,常用於文件校驗。校驗?不管文件多大,經過MD後都能生成唯一的MD值。好比現在的ISO校驗,都是MD校驗。怎麼用?當然是把ISO經過MD後產生MD的值。一般下載linux-ISO的朋友都見過下載鏈接旁邊放著MD的串。就是用來驗證文件是否一致的。
MD演算法具有以下特點:
壓縮性:任意長度的數據,算出的MD值長度都是固定的。
容易計算:從原數據計算出MD值很容易。
抗修改性:對原數據進行任何改動,哪怕只修改個位元組,所得到的MD值都有很大區別。
弱抗碰撞:已知原數據和其MD值,想找到一個具有相同MD值的數據(即偽造數據)是非常困難的。
強抗碰撞:想找到兩個不同的數據,使它們具有相同的MD值,是非常困難的。
MD的作用是讓大容量信息在用數字簽名軟體簽署私人密鑰前被」壓縮」成一種保密的格式(就是把一個任意長度的位元組串變換成一定長的十六進制數字串)。除了MD以外,其中比較有名的還有sha-、RIPEMD以及Haval等。
第三種.SHA
安全哈希演算法(Secure Hash Algorithm)主要適用於數字簽名標准(Digital Signature Standard DSS)裡面定義的數字簽名演算法(Digital Signature Algorithm DSA)。對於長度小於^位的消息,SHA會產生一個位的消息摘要。該演算法經過加密專家多年來的發展和改進已日益完善,並被廣泛使用。該演算法的思想是接收一段明文,然後以一種不可逆的方式將它轉換成一段(通常更小)密文,也可以簡單的理解為取一串輸入碼(稱為預映射或信息),並把它們轉化為長度較短、位數固定的輸出序列即散列值(也稱為信息摘要或信息認證代碼)的過程。散列函數值可以說是對明文的一種「指紋」或是「摘要」所以對散列值的數字簽名就可以視為對此明文的數字簽名。
SHA-與MD的比較
因為二者均由MD導出,SHA-和MD彼此很相似。相應的,他們的強度和其他特性也是相似,但還有以下幾點不同:
對強行攻擊的安全性:最顯著和最重要的區別是SHA-摘要比MD摘要長 位。使用強行技術,產生任何一個報文使其摘要等於給定報摘要的難度對MD是^數量級的操作,而對SHA-則是^數量級的操作。這樣,SHA-對強行攻擊有更大的強度。
對密碼分析的安全性:由於MD的設計,易受密碼分析的攻擊,SHA-顯得不易受這樣的攻擊。
速度:在相同的硬體上,SHA-的運行速度比MD慢。
第四種.HMAC
HMAC(Hash Message Authentication Code,散列消息鑒別碼,基於密鑰的Hash演算法的認證協議。消息鑒別碼實現鑒別的原理是,用公開函數和密鑰產生一個固定長度的值作為認證標識,用這個標識鑒別消息的完整性。使用一個密鑰生成一個固定大小的小數據塊,即MAC,並將其加入到消息中,然後傳輸。接收方利用與發送方共享的密鑰進行鑒別認證等。
㈤ Scanner在java中有什麼用法怎麼用
1、首先在一個java工程下創建一個類名的ScannerDemo的類。
(5)在java中使用擴展閱讀:
Scanner類常用方法
1、String next():接收控制台輸入的字元串(備註:不能將空格作為字元串接收);
2、String nextLine():接收控制台輸入的字元串;
3、int nextInt():接收控制台輸入的int類型的數據;
4、double nextDouble:接收控制台輸入的double 類型的數據;
5、boolean nextBoolean():接收控制台輸入的boolean 類型的數據;
6、輸入char類型的數據;
Scanner類沒有直接輸入char類型的方法,可以通過charAt()方法從next()或nexyLine()獲取。
㈥ 如何在 Java 中正確使用 wait,notify 和 notifyAll
在Java中可以用wait、notify和notifyAll來實現線程間的通信。1)利用wait()來讓一個線程在某些條件下暫停運行。例如,在生產者消費者模型中,生產者線程在緩沖區為滿的時候,消費者在緩沖區為空的時候,都應該暫停運行。2)notify()方
㈦ 在Java中怎麼使用斷言
如果要開啟斷言檢查,則需要用開關-enableassertions或-ea來開啟。
assert關鍵字語法很簡單,有兩種用法:
1、assert <boolean表達式>
如果<boolean表達式>為true,則程序繼續執行。
如果為false,則程序拋出AssertionError,並終止執行。
2、assert <boolean表達式> : <錯誤信息表達式>
如果<boolean表達式>為true,則程序繼續執行。
如果為false,則程序拋出java.lang.AssertionError,並輸入<錯誤信息表達式>。
三、應用實例
下面給出一個例子,通過例子說明其用法:
public class AssertFoo {
public static void main(String args[]) {
//斷言1結果為true,則繼續往下執行
assert true;
System.out.println("斷言1沒有問題,Go!");
System.out.println("\n-----------------\n");
//斷言2結果為false,程序終止
assert false : "斷言失敗,此表達式的信息將會在拋出異常的時候輸出!";
System.out.println("斷言2沒有問題,Go!");
}
}
保存代碼到C:\AssertFoo.java,然後按照下面的方式執行,查看控制台輸出結果:
1、編譯程序:
C:\>javac AssertFoo.java
2、默認執行程序,沒有開啟-ea開關:
C:\>java AssertFoo
斷言1沒有問題,Go!
-----------------
斷言2沒有問題,Go!
3、開啟-ea開關,執行程序:
C:\>java -ea AssertFoo
斷言1沒有問題,Go!
-----------------
Exception in thread "main" java.lang.AssertionError: 斷言失敗,此表達式的信息將
會在拋出異常的時候輸出!
at AssertFoo.main(AssertFoo.java:10)
四、陷阱
assert關鍵字用法簡單,但是使用assert往往會讓你陷入越來越深的陷阱中。應避免使用。筆者經過研究,總結了以下原因:
1、assert關鍵字需要在運行時候顯式開啟才能生效,否則你的斷言就沒有任何意義。而現在主流的Java IDE工具默認都沒有開啟-ea斷言檢查功能。這就意味著你如果使用IDE工具編碼,調試運行時候會有一定的麻煩。並且,對於Java Web應用,程序代碼都是部署在容器裡面,你沒法直接去控製程序的運行,如果一定要開啟-ea的開關,則需要更改Web容器的運行配置參數。這對程序的移植和部署都帶來很大的不便。
2、用assert代替if是陷阱之二。assert的判斷和if語句差不多,但兩者的作用有著本質的區別:assert關鍵字本意上是為測試調試程序時使用的,但如果不小心用assert來控制了程序的業務流程,那在測試調試結束後去掉assert關鍵字就意味著修改了程序的正常的邏輯。
3、assert斷言失敗將面臨程序的退出。這在一個生產環境下的應用是絕不能容忍的。一般都是通過異常處理來解決程序中潛在的錯誤。但是使用斷言就很危險,一旦失敗系統就掛了。
五、對assert的思考
assert既然是為了調試測試程序用,不在正式生產環境下用,那應該考慮更好的測試JUint來代替其做用,JUint相對assert關鍵的所提供的功能是有過之而無不及。當然完全可以通過IDE debug來進行調試測試。在此看來,assert的前途一片昏暗。
因此,應當避免在Java中使用assert關鍵字,除非哪一天Java默認支持開啟-ea的開關,這時候可以考慮。對比一下,assert能給你帶來多少好處,多少麻煩,這是我們選擇是否使用的的原則。
以上僅僅代表我個人觀點,歡迎大家留言討論。
-----------------------------------------------------------------------------------
下面是一些Assert的例子:
assert 0 < value;
assert 0 < value:"value="+value;
assert ref != null:"ref doesn''t equal null";
assert isBalanced();
-----------------------------------------------------------------------------------
AssertinError類是Error的直接子類,因此代表程序出現了嚴重的錯誤,這種異常通常是不需要程序員使用catch語句捕捉的。
使用assert的准則:assert語句的作用是保證程序內部的一致性,而不是用戶與程序之間的一致性,所以不應用在保證命令行參數的正確性。可以用來保證傳遞給private方法參數的正確性。因為私有方法只是在類的內部被調用,因而是程序員可以控制的,我們可以預期它的狀態是正確和一致的。公有方法則不適用。此外,assert語句可用於檢查任何方法結束時狀態的正確性,及在方法的開始檢查相關的初始狀態 等等。
assert語句並不構成程序正常運行邏輯的一部分,時刻記住在運行時它們可能不會被執行。
-----------------------------------------------------------------------------------
兩類參數:
參數 -esa和 -dsa:
它們含義為開啟(關閉)系統類的assertion功能。由於新版本的Java的系統類中,也使了 assertion語句,因此如果用戶需要觀察它們的運行情況,就需要打開系統類的assertion功能 ,我們可使用-esa參數打開,使用 -dsa參數關閉。 -esa和-dsa的全名為-enablesystemassertions和-disenablesystemassertions,全名和縮寫名有同樣的功能。
參數 -ea和 -ea:
它們含義為開啟(關閉)用戶類的assertion功能:通過這個參數,用戶可以打開某些類或包的assertion功能,同樣用戶也可以關閉某些類和包的assertion功能。打開assertion功能參數為-ea;如果不帶任何參數,表示打開所有用戶類;如果帶有包名稱或者類名稱,表示打開這些類或包;如果包名稱後面跟有三個點,代表這個包及其子包;如果只有三個點,代表無名包。關閉 assertion功能參數為-da,使用方法與-ea類似。
-ea和-da的全名為-enableassertions和-disenableassertions,全名和縮寫名有同樣的功能。
下面表格表示了參數及其含義,並有例子說明如何使用。
參數 例子 說明
-ea java -ea 打開所有用戶類的assertion
-da java -da 關閉所有用戶類的assertion
-ea: java -ea:MyClass1 打開MyClass1的assertion
-da: java -da: MyClass1 關閉MyClass1的assertion
-ea: java -ea:pkg1 打開pkg1包的assertion
-da: java -da:pkg1 關閉pkg1包的assertion
-ea:... java -ea:... 打開預設包(無名包)的assertion
-da:... java -da:... 關閉預設包(無名包)的assertion
-ea:... java -ea:pkg1... 打開pkg1包和其子包的assertion
-da:... java -da:pkg1... 關閉pkg1包和其子包的assertion
-esa java -esa 打開系統類的assertion
-dsa java -dsa 關閉系統類的assertion
-----------------------------------------------------------------------------------
不要再public的方法裡面檢查參數是不是為null之類的操作,例如:
public int get(String s){
assert s != null;
}
如果需要檢查也最好通過 if s = null 拋出 NullPointerException來檢查。
不要用assert來檢查方法操作的返回值來判斷方法操作的結果,例如:
assert list.removeAll();這樣看起來好像沒有問題 但是想想如果assert 被disable呢,那樣他就不會被執行了,所以removeAll()操作就沒有被執行,可以這樣代替
boolean boo = list.removeAl();
assert boo;
-----------------------------------------------------------------------------------
另外,Java為了讓程序也能夠動態開啟和關閉某些類和包的assertion功能,Java修該了Class和ClassLoader的實現,增加了幾個用於操作assert的API。下面簡單說明一下幾個API的作用。
ClassLoader類中的幾個相關的API:
setDefaultAssertionStatus:用於開啟/關閉assertion功能
setPackageAssertionStatus:用於開啟/關閉某些包的assertion功能
setClassAssertionStatus: 用於開啟/關閉某些類的assertion功能
clearAssertionStatus:用於關閉assertion功能
㈧ 在Java語言中,使用___________等技術,實現軟體重用
在Java語言中,使用__平台無關___、___java虛擬機___等技術,實現軟體重用。