1.referer的應用
(1)利用Referer要求標頭阻止“盜鏈”
第一步:
建一個MyHtml.html,內容為
<a href = “http://localhost:8080/demoWeb/test”>retr</a>
第二步:在servlet中判斷是否是本地訪問
//擷取請求訊息封裝的referer頭欄位的值
String referrer = request.getHeader("referrer");
//用getServerName()擷取localhost
String sitePart = "http://"+request.getServerName();
//判斷擷取的地址是否為空白,如果為空白,則跳轉頁到dowm.html,如果不為空白,輸出
if(referrer!=null && referrer.startsWith(sitePart)){
out.println("deading downding");
}else{
RequestDispatcherrequest.
getRequestDispatcher("/down.html");
rd.forward(request, response);
}
第三步:通過地址欄訪問
在第一步有一個超連結,當運行MyHtml.html時,這個頁面顯示出來之後,點擊超連結,應該是跳轉到另一個介面。
請求訊息包含referer頭欄位,超連結所在的html頁面的url地址
Referrer:http://localhost:8080/demohtmlWeb/MyHtml.Html
如果輸入的地址是http://localhost:8080/demohtmlWeb/test
則輸入的地址不包含請求訊息頭欄位referer,為空白
註:
點擊超連結的時候,是向web伺服器第二次發送了一個servlet請求
(2)利用referer可以隱藏javascript 代碼:
第一步:建立一個Hide.html的檔案,寫一段javascript代碼來作為隱藏的指令碼
<body>
<script text="text/javascript" src="servlet/hide"></script>
</body>
第二步:在servlet中判斷輸入的地址是否為空白
//隱藏javascript代碼
String referrer = request.getHeader("referrer");
//擷取的是localhost
String sitePart = "http://"+request.getServerName();
if(referrer!=null && referrer.startsWith(sitePart)){
out.println("document.write('這是一段重要的javascript代碼')");
第三步:測試結果
在地址欄上輸入http://localhost:8080/demoWeb/Hide.html
當輸入這個地址之後,頁面上不會有任何的顯示,其實是有顯示的,在開啟Hide.html中轉向的servlet地址在地址欄中輸出,則會顯示下載,其結果是下載之後的檔案開啟是空的,其實是隱藏了。
2.瀏覽器傳遞參數資訊的細節:
(1)提交、重設、普通按鈕傳送參數
String button = request.getParameter(“button”);
註:
(1)在一個FORM表單中可以有多個提交按鈕,單擊任何一個提交按鈕都可以提交表單,只有被單擊的提交按鈕的名稱和值才被作為參數傳遞,其它提交按鈕的資訊不會作為參數傳遞。
(2)表單中的普通按鈕與重設按鈕的名稱和值不會作為參數傳遞。
(3)沒有設定name屬性的表單欄位元素的資訊不會作為參數傳遞。
(2)單行與多行文本輸入框如何傳送參數
String text = request.getParameter(“button”);
不管單行和多行文本輸入框中是否有內容,設定了name屬性的文本輸入框的資訊總是會作為參數傳遞。如果文字框中沒有輸入內容,可以認為其內容為一個Null 字元串(“”),其參數形式為“text1=”。
(3)選項按鈕與複選框如何傳送參數
(1)只有被選中的複選框和選項按鈕的資訊才會作為參數傳遞,未被選中的複選框和選項按鈕的資訊不會作為參數傳遞。
(2)對於多個名稱相同的複選框,它們可以同時被選中;對於多個名稱相同的選項按鈕,只能同時選中其中的任意一個。
(3)對於被選中的多個同名複選框,它們的資訊將以多個名稱相同的參數進行傳遞,即參數列表中會出現多個名稱相同的參數。
(4)對於沒有設定value屬性的選項按鈕和複選框,當它們被選中時,它們傳遞的預設參數值為“on”。
(4)隱藏表單欄位與映像欄位如何傳送參數
擷取:
String hidden = request.getParameter("hidden1");
System.out.println(hidden);
(1)隱藏表單欄位元素總是被作為參數傳遞給WEB伺服器。如果要在提交FORM表單時將網頁中的JavaScript程式獲得的資訊或者上次的WEB伺服器端程式產生的標記資訊傳送給WEB伺服器,使用隱藏欄位就是一個很好的辦法。
(2)映像欄位元素也可以提交FORM表單,使用者單擊映像欄位元素後,表單中的其他資訊和映像上單擊處的x、y座標一起傳送給伺服器,x座標組應的參數名是映像元素名後加上.x(如image1.x),y座標組應的參數名是映像元素名後加上.y(如image1.y)。
(5)列表框如何傳送參數
單選的情況:
String department = request.getParameter("department");
System.out.println(department); //擷取的是value
多選的情況:
String department[] = request.getParameter("department");
System.out.println(department); //擷取的是value
註:
(1)沒有作出選擇的列表框的資訊不會作為參數傳遞,就象表單中沒有這個列表框的情況一樣。
(2)如果設定了列表框欄位元素的multiple屬性,可以挑選清單中的多個選項。對於選中的每個選項,它們都會與列表框的名稱分別組合成單獨的參數後進行傳遞,這樣,參數列表中會出現多個名稱為列表框名的同名參數 。
(3)當選中沒有設定value屬性的列表選項時,瀏覽器使用該選項的標題作為參數值。
(6)使用Javascript防止重複提交表單
在<head></head>標籤中插入即可
<script>
var isCommitted = false;
function checkPost()
{
if(!isCommitted)
{
isCommitted = true;
return true;
}
else
{
alert("不能重複提交表單");
return false;
}
}
</script>
<form action="servlet/RepeateFormServlet" method="POST" onsubmit="return checkPost()">...
(7)徹底刪除和刪除的思路分析
1、要徹底刪除要在資料庫中
Delete from 表名
Where id in(‘01’,’02’,’03’);
2、只是刪除會垃圾箱裡
Update 表名
Set flag=1
Where id in(‘01’,’02’,’03’);
3、前台所做的事:
擷取複選框中的所有制
<input type=”checkbox” value=”001”,name=”booklist”/>
<input type=”checkbox” value=”002”,name=”booklist”/>
<input type=”checkbox” value=”003”,name=”booklist”/>
<input type=”checkbox” value=”004”,name=”booklist”/>
<input type=”checkbox” value=”005”,name=”booklist”/>
4、在servlet中擷取
String arr[] = request.getParameterValues(“booklist”):
String s = “”;
if(arr!=null){
for(String arr1:arr){
System.out.println(arr1);