1.
jsp三種指令碼元素
<%! 宣告 這裡定義的變數是全域性變數%>
<% 指令碼 這裡定義的是區域性變數%>
<%=物件%
全域性變數到處可以用,例如<%!%>宣告的,區域性變數就是只有函式內部可以用<%%>
2.記錄一下我用使用jsp頁面中<%! %>全域性變數宣告遇到的問題,我們用全域性變數一般儲存的是在這個頁面中要多次用到的變數,如使用者id等等,但是在<%! %>給變數定義賦值後,關閉頁面再此開啟後值是不變的,這使得想用全域性變數接收提交的引數的時候出現一些問題:比如使用者id依然是上次的id等等。
原因我查了一下,大致是因為下列原因:
1.使用<%! %>定義的變數編譯成servlet後成為servlet的私有成員變數,在servlet環境中,對於乙個jsp頁只允許有乙個結果servlet的例項在執行和響應所有的頁面請求。因此,在結果servlet中所有的成員變數可以被所有的請求所共享,所以只要成員變數沒有重新賦值,下次訪問該頁面時仍然不變。
2.而在<% %>中定義的變數編譯成servlet後成為service()方法的乙個本地變數,而service()方法中的本地變數只能每響應一次請求就重建一次。
所以解決辦法是變數定義在<%! %>之中,但是在<%%>裡面用接收到的引數進行賦值,這樣該全域性變數就可以在每次請求的時候重新賦值。比如:
<%!int i=0;%>
<%i++;%>
另外引用<%!int i=0;%>定義的變數用<%=this.i;>;引用<%int i=0;%>用<%=i;%>
全域性變數 靜態全域性變數 靜態區域性變數 區域性變數
全域性和靜態變數都在堆裡。這句話應該錯了,應該是放在常量資料段 全域性變數的作用範圍是整個程式 如果程式是多個檔案,必須在其他的檔案中說明 靜態變數的作用範圍要看靜態變數的位置,如果在函式裡,則作用範圍 就是這個函式。靜態全域性變數,只在本檔案可以用,雖然整個程式包含多個檔案,但靜態全域性變數只能用...
全域性變數 靜態全域性變數 靜態區域性變數 區域性變數
全域性和靜態變數都在堆裡。全域性變數的作用範圍是整個程式 如果程式是多個檔案,必須在其他的檔案中說明 靜態變數的作用範圍要看靜態變數的位置,如果在函式裡,則作用範圍 就是這個函式。靜態全域性變數,只在本檔案可以用,雖然整個程式包含多個檔案,但靜態全域性變數只能用在定義它的那個檔案裡,卻不能用在程式中...
全域性變數 靜態全域性變數區域性變數 靜態區域性變數
對於乙個完整的程式,在記憶體中的分布情況如下圖 區 low address 全域性資料區 堆區 棧區 high address 一般程式把新產生的動態資料存放在堆區,函式內部的自動變數存放在棧區。自動變數一般會隨著函式的退出而釋放空間,靜態資料 即使是函式內部的靜態區域性變數 也存放在全域性資料區。...