javaWeb_Request對象


首先說一下Http協議

 

一.Http協議的概念及作用

1.什么是HTTP協議?

(HTTP,HyperText Transfer Protocol)超文本傳輸協議, 是互聯網上應用最為廣泛的一種網絡協議。所有的WWW文件都必須遵守這個標准。設計HTTP最初的目的是為了提供一種發布和接收HTML頁面的方法。1960年美國人Ted Nelson構思了一種通過計算機處理文本信息的方法,並稱之為超文本(hypertext),這成為了HTTP超文本傳輸協議標准架構的發展根基。Ted Nelson組織協調萬維網協會(World Wide Web Consortium)和互聯網工程工作小組(Internet Engineering Task Force )共同合作研究,最終發布了一系列的RFC,其中著名的RFC 2616定義了HTTP 1.1。

2.HTTP協議的作用

HTTP協議規范了傳輸信息的內容和格式

 

二..HTTP,查看瀏覽器的傳輸過程

1).啟動瀏覽器;

   2).按F12,啟動:調試模式,網絡(NetWork)

   3).刷新網頁,重新發送請求。

   4).可以查看請求信息:

 

 

 

三.HTTP協議_瀏覽器請求信息的組成

請求行

GET /資源路徑 HTTP/1.1

請求頭

請求頭:一堆內容,作為了解即可

Host: localhost:9090 (服務器的域名)

Connection: keep-alive (網絡連接是持久的)

Content-Length: 12          (發送數據的大小,單位字節)

Cache-Control: max-age=0  (設置緩存數據的存活時間,單位秒)

Origin: http://localhost:9090 (指示了請求來自於哪個站點——服務器名稱)

Upgrade-Insecure-Requests: 1  (如果存在更安全的響應,客戶端優先選擇加密及帶有身份驗證的響應)

Content-Type: application/x-www-form-urlencoded (發送數據的媒體類型——發揮作用類似后綴名:.mp3 .avi)

User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36 (當前系統和瀏覽器版本)

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8

Referer: http://localhost:9090/day01/1.html

Accept-Encoding: gzip, deflate, br

Accept-Language: zh-CN,zh;q=0.9

Cookie: JSESSIONID=98006861B5044ACC8D5C7840C93C17DA

 

 

3.請求體

         如果提交方式為get,則沒有內容

         如果提交內容是post,則會存放提交內容的鍵值對形式

 

 

四.request對象的基本概念

request,在java中為HttpServletRequest對象

HttpServletRequest對象代表客戶端的請求,當客戶端通過HTTP協議訪問服務器時,HTTP請求中的所有信息都封裝在這個對象中,開發人員通過這個對象的方法,可以獲得客戶這些信息。

 

注:request對象封裝了http請求中的所有信息,是由服務器創建

 

 

五.request對象_獲取請求行信息

java中request對象的六個方法獲取請求行的所有信息

獲取提交方法(getMethod) 

獲取請求行中的資源路徑(getRequestURI)

獲取完整的請求URL(getRequestURL)

獲取協議名稱/版本(getProtocol)

獲取IP地址(getRemoteAddr)

獲取本地端口(getLocalPort)

 

代碼:

protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//        獲取提交方法(getMethod)
        System.out.println("請求行方法:"+req.getMethod());

//        獲取請求行中的資源路徑(getRequestURI)
        System.out.println("請求行資源路徑:"+req.getRequestURI());

//        獲取完整的請求URL(getRequestURL)
        System.out.println("完整的請求URL:"+req.getRequestURL());

//        獲取協議名稱/版本(getProtocol)
        System.out.println("獲取協議,版本:"+req.getProtocol());

//        獲取IP地址(getRemoteAddr)
        System.out.println("獲取IP地址:"+req.getRemoteAddr());

//        獲取本地端口(getLocalPort)
        System.out.println("獲取本地端口:"+req.getLocalPort());

    }

 

 

當有http請求時,會輸出請求行信息

 

運行結果

 

 

六.request對象_請求頭信息

兩個方法

  1. String getHeader(String name);以String的形式返回指定name的值

 

  1. Enumeration getHeaderNames(),返回此請求包含的所有頭名稱的枚舉

 

代碼

protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    //顯示請求頭信息
    System.out.println("通過頭名稱name查詢指定信息");
    System.out.println("User-Agent"+req.getHeader("User-Agent"));

    System.out.println("查詢所有信息");
    Enumeration<String> hn = req.getHeaderNames();
    while(hn.hasMoreElements()){
        String str=hn.nextElement();
        System.out.println(str+req.getHeader(str));
    }
}

 

 

七.request對象_請求頭_通過referer實現防盜鏈

1.什么是盜鏈?

通過其他網站訪問本網站的一些資源

2.如何防止盜鏈?

思路

通過網頁發送的請求eg.download.jsp

如果download.jsp中的請求,來源於盜鏈者服務器,我們就顯示不可以下載;

如果download.jsp中的請求,來源於正規服務器,我們就顯示可以下載;

 

實現

通過referer獲取請求頭信息

String header=request.getHeader(“referer”);

protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    String referer = req.getHeader("referer");
    System.out.println(referer);
    if(referer.startsWith("http://localhost:8080/zc/")||referer.startsWith("http://127.0.0.1:8080/zc/")){
        System.out.println("正常連接");
    }else{
        System.out.println("盜鏈連接");
    }
}

盜鏈主要通過標紅的地方判斷

 

八.request對象_獲取請求體

接下來說的是無論是get提交還是post提交,即無論請求體中有沒有數據,都是可以使用的

1).public String getParameter(String key):獲取某個鍵的值。

    2).public String[] getParameterValues(String key)獲取一個鍵的多個值(復選框、多選下拉列表)

    3).public Map<String,String[]> getParameterMap();獲取所有的鍵值對並封裝到一個Map.

    4).public void setCharacterEncoding(String charsetName):設置request的解碼方式如果參數中有中文

                                       需要使用:"UTF-8"。

 

protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    //獲取請求體信息
    System.out.println("獲取請求體信息");
    String username = req.getParameter("username");
    String password = req.getParameter("password");

    System.out.println("username:"+username);
    System.out.println("password:"+password);

    System.out.println("-----------------------------------------------");
    //當一個name對應多個值時,例如復選框,下拉列表,使用getParameterValues
    String[] pv = req.getParameterValues("hobby");
    for (String s : pv) {
        System.out.println(s);
    }

    System.out.println("-----------------------------------------------");
    //getParameterMap,獲取所有的鍵值對,並封裝到一個對象中
    Map<String, String[]> map = req.getParameterMap();

    Set<String> strings = map.keySet();
    for (String string : strings) {
        System.out.println(string+" : "+map.get(string));
    }

}

九.request對象_BeanUtils工具類的使用

 

1.什么是"BeanUtils":它是一個第三方的軟件包。

作用自動解析客戶端的請求並根據一個Map自動封裝JavaBean

2..使用步驟:

        1).將BeanUtils所需jar包復制到lib目錄下,並關聯到模塊中。

        2).使用BeanUtils工具包:

 

 

1.    案例代碼

protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    User user=new User();
    //使用工具類
    try {
        BeanUtils.populate(user,req.getParameterMap());
    } catch (IllegalAccessException e) {
        e.printStackTrace();
    } catch (InvocationTargetException e) {
        e.printStackTrace();
    }
    System.out.println(user);
}

十.request對象_請求轉發

1).什么是請求轉發:當前Servlet進行一部分處理,然后轉發給另一個Servlet繼續處理。

2).第一個Servlet,要轉發給另一個Servlet,必須將request和response對象傳給另一個Servlet。

 

語句:

request.getRequestDispatcher(“路徑”).forward(request,response);

 

req.getRequestDispatcher("路徑").forward(req,resp);

 

十一.request對象_其它功能_域對象的概念

1).什么是域對象:是指可以在一定范圍內可以共享數據的一種對象。

2).幾個重要的域對象:

    1).request:可以在轉發的所有路徑上,共享同一個request對象。

    2).session:

    3).ServletContext:

 

十二.request對象的生命周期:

    1).客戶端每次發送請求,Tomcat都會為本次請求創建一個新的Request對象;

    2).在Servlet的處理請求的service()方法執行過程中,一直存活。

                 如果被轉發,此request會被傳到另一個Servlet,繼續存活;

    3).直到service()執行完畢,request對象立即被清理。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM