Servlet的應用–Referer請求和參數傳遞

來源:互聯網
上載者:User

 

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);

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.