1. 程式人生 > >Java 中的 Servlet&Http&Request

Java 中的 Servlet&Http&Request

# 今日內容 : 1. Servlet 2. HTTP 協議 3. Request (就是 Servlet 中 service 方法的 形參. (有這個))     ## Servlet : 1. 概念 2. 執行步驟 3. 執行原理 (反射) 4. 生命週期 5. Servlet 3.0 註解配置.   6. Servlet 的 體系結構 Servlet -- 介面 有 這 兩個 實現類. | GenericServlet ---- 實現了 Servlet 介面, 它是 一個 抽象類. 兒子 | HttpServlet 繼承了 GenericServlet 它 是一個 抽象類. 孫子.   GenericServlet : 將 Servlet 介面中 其他的方法 做了 預設 空實現, 只將 service() 方法 作為 抽象. * 將來 定義 Servlet 時, 可以 繼承 GenericServlet , 實現 service() 方法 即可. * 其它的 方法 想 複寫 哪個 就複寫 哪個.   idea 使用: 複寫 方法的 話, 知道方法名, 直接打 方法名, 會有提示 複寫方法.       GenericServlet 類 實現了 Servlet 介面, 實現了 除 service() 以外的 其它 方法, 那些 方法的 實現 都是 空實現, 只有 一個 abstract service() 是 抽象的, 我們 繼承 這個 類 時 只需要 重寫 這個 抽象的 service() 方法, 這就 達到了 我們的 初步需求, 只 實現 service() 這一個 方法. (但是 實際開發中,一般 不用這種方式. )   * HttpServlet : 是對 HTTP 協議的 封裝 和 描述., 簡化操作. 不再 複寫 service 方法, service 方法 人家 給你 邏輯判斷過了 get, post 等 請求方式. 1. 定義類 繼承 HtttpServlet. 2. 複寫 doGet / doPost 方法.   ( *** 推薦 以後 寫 Servlet 的 時候, 繼承 HttpServlet , 複寫 其中的 doGet 和 doPost 方法. ) * 如果 不是繼承它, 你就要開始 寫 判斷邏輯, 獲取 請求方式, 如果 是 get, 如果 是 post , 怎麼怎麼樣, 繁瑣, 繼承 HttpServlet 就只要 重寫 doGet() 或者 doPost 中 自己的 需求 即可, 已經 獲取到 請求方式.   Http協議 有 7 中 請求方式, 常用的 就 get post 兩種. 通過 瀏覽器 直接請求 是 doGet 方式. 我們現在 掌握的知識 只有 表單 才有 post 這種 請求方式. 80 After lanuch : 這個 不勾選 的話, 伺服器啟動了, 不會自己開啟 瀏覽器 . 需要手動 開啟瀏覽器. /     我們 編寫一個 類 繼承 Servlet 介面 就要實現 其中 所有的 方法, 不得不實現, 我們 這個 類 也不是 一個 抽象類, 但是 大多數 情況下 我們 只需要 用 service() 一個 方法 就可以了. 所以 怎麼辦? 先 瞭解 Servlet 繼承的 體系結構.       7. Servlet 相關配置 (web.xml 註解配置) 配置啥: 1. urlpattern : Servlet 訪問 路徑.   在 註解配置 WebServlet 中 String[ ] urlPatterns() default {}; 這裡定義的 urlPatterns 是一個 陣列, 陣列的 意思就是說 將來我們 可以為 這 一個 Servlet 定義 多個 訪問 路徑.   * 一個 Servlet 可以定義多個 訪問 路徑 : (不過 一般 我們還是 只 定義一個.)   寫法: @WebServlet({"/d4","/dd4","/ddd4","/demoFour"})   2. 路徑的 定義規則: 1. / xxx 2. /xxx/xxx : 多層 路徑, 目錄結構, 3. *.do   * * Servlet 路徑配置. * */ // *** 多個 就要 用大括號 括起來, 一個的話 大括號 就可以省略. // 1. @WebServlet({"/d4","/dd4","/ddd4","/demoFour"})   // *** 這裡寫的 有 兩層 路徑, 將來 訪問的 時候 就要將 這兩層 路徑 都寫上. // @WebServlet("/user/demo4")   // *** 也可以寫成 , 這種形式, 代表 /user 後面 想寫啥 就 寫啥. * 是一個 萬用字元. // @WebServlet("/user/*")   // *** 更狠, 寫什麼 都可以訪問到 ServletDemo4. // /* 的這種方式優先順序 是最低的, 是 別的 都訪問 不到 才會找它. // @WebServlet("/*") @WebServlet("*.do") // *** * 前面 不能加 / , 否則 會報 資源的 配置 路徑 不合法. .do 可以隨便寫. public class ServletDemo4 extends HttpServlet {   查詢 JavaEE 的 API (中的 Servlet interface)         ## HTTP : * 概念: Hyper Text Transfer Protocol 超文字 傳輸協議. * 傳輸協議 : 定義了 客戶端 和 伺服器端 通訊時, 傳送資料的 格式(規則). * 特點: 1. 基於 TCP / IP 的 高階協議. (TCP 是一個 安全的 協議,經過 三次 握手, HTTP 是基於 TCP的, 所以 HTTP 也是一個 安全的 協議. ) 2. 預設埠號: 80 例如: http://www.itcast.cn : 80 3. 基於請求 / 響應模型的, 一次請求 對應 一次響應. 4. 無狀態的 : 每次 請求之間 相互獨立, 不能通訊(互動)資料.   // *** 一個網頁中, 每一個 圖片資源, css 資源, js 資源 等等 都要發 請求. 每一次 的請求 最後 才組成了 這個 頁面.   // *** 開啟 網頁, F12, Network 裡 列表的 每一項 都是一次請求 或者 一次響應. (網頁中的 圖片 也會有對應的 響應, copy url , 搜尋 url , 得到 這張圖片, 哈哈. ) * 歷史版本: HTTP 1.0 : 每一次請求 都會建立 新的連線 . (效率低, 消耗資源. ) HTTP 1.1 : 複用這個連線, 對 快取的 支援比較好. (也就是說, 第一次 請求, 連線上了, 返回響應, 等一會, 如果 後面還有資源, 那麼 複用 這個連線, 不需要建立 新的連線. )     HTTP 協議 請求 和 響應 是兩部分, 所以 會有 兩部分的 格式.     // *** login.html F12, Network Headers General Response Headers Request Headers     // *** 在 Firefox 瀏覽器中, F13 , 網路, 訊息頭, 請求頭 原始頭. * 請求訊息 資料格式 1. 請求行 請求方式 請求url 請求協議 / 版本 GET login.html HTTP / 1.1   * 請求方式: * HTTP 協議 有 7中 請求方式, 常用的有 2 種 * GET : 1. 請求引數 在 請求行中, (在 url 後) 例如: http://localhost/demo3?username=zhangsan 2. 請求的 url 長度 是有限制的. 3. 不太安全 (請求訊息的 位置在 url 位址列中. ) * POST : 1. 請求引數 在 請求體 中. 2. 請求的 url 長度是沒有限制的. (例如 上傳一個 檔案, 就只能用 POST, 檔案的 長度 遠遠超過了 url 的長度. )   知道了 這兩種方式的 區別, 以後 用程式碼 來獲取 這個 請求引數, 才知道 在哪裡 獲取. 3. 相對安全. (請求訊息的 位置在 請求體中.)   但是 會的人, 通過 抓包 技術, 攔截 你這個 請求, 請求體一樣還是被 獲取到 .       2. 請求頭 : 客戶端 (瀏覽器) 告訴 伺服器 一些 資訊, (伺服器 可以來 解析 這些 資訊)   這些 資訊 頭 都是 固定的, 值 是 不一樣的. 例如: Host : localhost , Host: 10.254.1.219   請求頭名稱 : 請求頭的 值(有多個值, 用 逗號 隔開) (瀏覽器 告訴 伺服器 我自身的 一些 資訊. ) * 常見的 請求頭: 0. Host : 表示 了 請求的 主機 是 localhost 1. User-Agent : 瀏覽器 告訴 伺服器, 我訪問你 使用的 瀏覽器 版本資訊. * 可以在 伺服器端 獲取 該 頭的 資訊, 解決瀏覽器的 相容性問題(將來會在 編碼中 使用它). User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:70.0) Gecko/20100101 Firefox/70.0   2. Referer : http://localhost/login.html * 告訴伺服器, 我(當前請求) 從 哪裡來? * 作用: 1. 防盜鏈 : 2. 統計工作 :     referer 就是在當前 這個 電影的 播放頁面 獲取當前 這個 (超連結) 請求, 從哪裡來, 你如果 是從 優酷首頁來, 就讓你 放電影, 如果不是, 說明 當前 這個 請求連結 是被盜取的, 是 盜鏈來的 一個請求.       3. 請求空行   空行 (起分隔 作用, 分隔 POST請求 請求頭 和 請求體. ) 4. 請求體(正文) GET 方式 請求 是 沒有 請求體的.   * 封裝 POST 請求訊息的 請求體(請求引數)的. (引數)   username = zhangsan   * 字串格式 : POST / login.html HTTP / 1.1 // *** 請求行 下面 就是 請求頭 , 沒有 分隔. Host: localhost User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:70.0) Gecko/20100101 Firefox/70.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2 Accept-Encoding: gzip, deflate Connection: keep-alive (1.1) Upgrade-Insecure-Requests: 1 (關於升級的資訊) If-Modified-Since: Sat, 30 Nov 2019 01:43:36 GMT If-None-Match: W/"549-1575078216305" Cache-Control: max-age=0   username = zhangsan   *** 訊息體(正文) : 將 login.html 這個表單中的 method 改為 POST, 在 頁面中 輸入 資料, 提交, 這時 F12 , 網路 訊息頭, 請求方法 : POST, 引數 username: zhangsan (這種形式 是 瀏覽器 解析後的結果. )   訊息體的內容: username = zhangsan   * 響應訊息 資料格式     3. Request   ServletRequest servletRequest, ServletResponse servletResponse   servletRequest 對應的 就是 請求訊息 資料. servletResponse 對應的 就是 響應 訊息資料.   ## Request : 1. request 物件 和 response 物件的原理: 1. tomcat 伺服器 會根據 請求 url 中的 資源路徑(demo1), 建立 對應的 ServletDemo1 的物件 2. tomcat 伺服器, 會建立 request 和 response 物件, request 物件 中 封裝 請求訊息 資料. 3. tomcat 將 request 和 response 兩個 物件 傳遞給 service 方法, 並且 呼叫 service 方法. 4. 程式設計師(我們) , 可以通過 request 物件 獲取 請求訊息資料, 通過 response 物件 設定 響應 訊息資料 5. 伺服器 在 給 瀏覽器做出響應 之前, 會從 response 物件中 拿 程式設計師 設定的 響應訊息資料, 放到 響應 訊息中, 返回給 客戶端(瀏覽器)   1. request 和 response 物件 是由 伺服器(tomcat) 建立的. 我們來使用它們   2. request 物件 是用來 獲取請求 訊息的, response 物件 是用來 設定 響應訊息.   2. request 物件 繼承 體系結構 : ServletRequest -- 介面 | 繼承 HttpServletRequest -- 介面 (查閱 還是 看這個 介面的 原始碼, 因為 tomcat 編寫的 這個類 是實現 HttpServletReques 這個介面的, 實現了 其中的 方法. ) | 實現 org.apache.catalina.connector.RequestFacade -- 類 (tomcat 編寫的. tomcat 將來 就會通過 這個類 來建立 Request 的物件, 來 傳遞 給 service 方法. ) (多型, 父型別 接收 子類物件. )   查閱 tomcat 的原始碼包. java / org / apache / catalina / connector / RequestFacade.java   發現 : public class RequestFacade implements HttpServletRequest{   }   查閱 javaEE 開發文件, SevletRequest.           3. request 功能 :   1. request : 獲取 請求 訊息資料 : 獲取 : 1. 請求行 資料 請求方式 請求 url 請求的引數 HTTP 協議 版本 * GET / day14 / demo1?name = zhangsan HTTP / 1.1 * 方法 : (HttpServlet) 1. 獲取 請求方式 : GET // *** 這個 方法 已經被 service 方法 內部使用了, 因為 我們 這裡要走的 就是 doGet 或者 doPost 方法. 說明 已經 給我們 判斷過了, 我們 用到的 機會 會 很少. * String getMethod( );   2. (** 重點掌握) 獲取 虛擬目錄 : /day14 * String getContextPath( );   3. 獲取 Servlet 的 路徑 : / demo1 * String getServletPath( ); 4. 獲取 GET 方式的 請求引數 : name = zhangsan // 4. 獲取 GET 方式的 請求引數 : name=zhangsan 這裡 現在只有一對引數, 如果 有很多 引數, 我們 用 & 符號隔開, 這個 方法 會將 後面的 所有 引數 都獲取到. (這個 方法 也一般 不用. ) // *** name=zhangsan&age=12 每一對 用 & 分隔. * String getQueryString(); 5. (** 重點掌握)獲取 請求的 URI : /day14/demo1 (許可權 控制 框架 的 時候 會用. ) * String getRequestURI( ); : /day14/demo1 * StringBuffer getRequestURL( ); : http://localhost/day14/demo1   // *** 請求的 Servlet 資源路徑. * URL : 統一資源定位符 : http://localhost/day14/demo1 例如: 中華人民共和國 * URI : 統一資源識別符號 : /day14/demo1 (這個 代表的 範圍更大一些. ) 沒有 IP 和 埠號. 例如: 共和國   6. 獲取 協議 及 版本 : HTTP / 1.1 * String getProtocol (Servlet)   7. (** 重點掌握 ) 獲取 客戶機的 IP 地址 : * String getRemoteAddr( ); (Servlet)   2. 獲取請求頭 資料 * 方法 : (**)String getHeader(String name) : 通過 請求頭的 名稱 獲取請求頭的 值. 一般 只用 這個方法, 因為 我們 已經 明確 有哪些頭. * Enumeration<String> getHeaderNames( ) : 獲取 所有的 請求頭名稱.   jdk 開發文件 : Enumeration : 列舉, 一個 介面, 該介面的 功能 由 Iterator 介面複製. hasMoreElements( ); boolean 測試 此 列舉是否 包含 更多 元素. nextElement( ); 如果 此 列舉物件 至少有一個要提供的 元素, 則返回此列舉 的 下一個元素.     這裡 要演示 盜鏈的 功能 , 要兩個 tomcat 伺服器 啟動, 所以 這裡 加一個 tomcat 伺服器. 新建立的 tomcat 伺服器的 名字, 埠號, JMX port 埠號 都不能相同, 然後 部署一下 專案, 改一下 虛擬 路徑. 分別啟動 兩個 tomcat. 判斷 referer
package request;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * @author Yujiang
 * @create 2019-12-02-13:04
 */
@WebServlet("/requestDemo4")
public class RequestDemo4 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        // *** 演示 獲取 請求頭資料:  referer   :  告訴 伺服器 , 連結, 請求 從哪裡來.
        // *** 現在不是 點別人的 超連結 訪問的 demo4, 是在 瀏覽器 位址列中 直接輸入的, 所以 referer 是沒有的. 獲取 不到.
       // *** 應該 從一個 連結 或者 從 一個 路徑 點進來 訪問到 demo4.
        String referer = request.getHeader("referer");  // *** 獲取 referer 請求頭中 對應的 值.

        System.out.println(referer);  // *** null  // *** 之後 寫了 一個 超連結,  輸出結果: http://10.254.1.219/day14/login.html  表示 是從 login.html 頁面中來的.

     // *** 防盜鏈 :  例如 看電影:

     if(referer != null){
         if(referer.contains("/day14")){

            // *** 假設 這裡的 day14  是 優酷 首頁 , 正常訪問
          //   System.out.println("播放電影......");
             // *** 寫成中文

             response.setContentType("text/html;charset=utf-8");
             response.getWriter().write("播放電影......");

         }else{
             // *** 盜鏈

          //   System.out.println("想看電影嗎? 來優酷吧...");

             response.setContentType("text/html;charset=utf-8");
             response.getWriter().write("想看電影嗎? 來優酷吧...");

             // *** 使用 response 物件 就可以在 頁面上 展示了. 
         }


         // *** 現在 是輸出到 控制檯, 將來 學習了 response 物件 是可以 往 頁面裡面    輸出 資料的.

        // *** 需要 兩個專案 來訪問, 一個 虛擬目錄 包含 day14, 另一個 例如 是自己寫的 電影網站, 是不包含 day14 的.



     }
    }
}
  http://localhost/day14/login.html 播放電影...... http://localhost:8080/index.html 想看電影嗎? 來優酷吧... *** response.setContentType("text/html;charset=utf-8"); response.getWriter().write("想看電影嗎? 來優酷吧...");       (3. 請求 空行)   3. 獲取 請求體資料 : * 請求體 : 只有 POST 請求方式, 才有請求體, 在 請求體中 封裝了 POST 請求的 請求引數. request 物件 對 請求體 中的 資料 將其 封裝成 流. * 步驟 : 1. 獲取 流物件 (獲取 一個 字元輸入流,; 如果 是 檔案的 上傳, 圖片 等 就是 位元組流 Bufferedreader : 高效的, 帶有緩衝區的, 有 readline 方法的. * Bufferedreader getReader( ) : 獲取字元輸入流, 只能 操作 字元 資料   * ServletInputStream getInputStream( ) : 獲取 位元組 輸入流, 可以 操作 所有型別的 資料. * 將 這個 流 就當作 InputStream 來使用, 因為 它 繼承了 InputStream. * 在 檔案上傳 知識點 後 講解. 2. 再 從 流物件 中 拿 資料.       2. 其他 功能 (重要 ): 1. 獲取 請求 引數 通用方式 : 不論 get 還是 post 請求方式 都可以使用 下列 方法 來獲取 請求 引數. 1. String getParameter(String name) : 根據 引數名稱 獲取 引數值. 例如 : username=zhangsan&password=123; (常用) 2. Stirng[ ] String getParameterValues(Stirng name) : 根據 引數名稱 獲取 引數值的 陣列. (瞭解. ) 例如: hobby=xx&hobby=game (這種 多用於 複選框) Enumeration: 是個 列舉. 3. Enumeration<String> getParameterNames( ): 獲取 所有的 請求引數的 名稱. (瞭解.) 4. Map<String , String[ ]> getParameterMap( ): 獲取 所有引數 的 map 集合, 鍵值對 的集合. (常用)   * 中文 亂碼 問題 : (在很多的 頁面上 , 我們 可能都需要 填寫 中文, 這時 後臺 獲取到的 中文 資訊 可能 會出現 亂碼 問題. )   * get 方式 : tomcat 8 已經 將 get 方式亂碼 問題 解決了.   * post 方式 : 會亂碼 * 解決 : 在 獲取 引數前, 設定 request 的 編碼 request.setCharacterEncoding("utf-8"); (這個 編碼 就是從 我們 的 HTML 頁面中 而來. )   那也就是說, 無論 post 還是 get 請求方式 在 獲取 引數的 編碼的 第一行 都寫上 request.setCharacterEncoding("utf-8");     2. 請求轉發 : 一種 在 伺服器 內部的 資源跳轉 方式. 1. 步驟 : 1. 通過 request 物件 獲取 請求 轉換器 物件. RequestDispatcher getRequestDispatcher(String path); 這個 方法 傳一個 要 訪問 的 資源的 路徑. 2. 使用 RequestDispatcher 物件 進行 轉發 : forward(ServletRequest request, ServletResponse response)   2. 特點 (面試題) : 前提 : 只 請求了 requestDemo9 , 訪問到了 requestDemo 和 requestDemo10 兩個 資源. 1. 瀏覽器 位址列 路徑 不發生 變化. 2. 只能 轉發到 當前 伺服器 內部資源中. 3. F12 , Network (抓包 工具), 轉發 是 一次 請求. 使用的是 同一次 請求.     3. 共享資料 * 域物件 : 一個 有 作用 範圍的 物件, 可以在 範圍內 共享資料. 域 : 範圍. * request域 : 代表一次 請求的 範圍. 因為 轉發 屬於 一次 請求, 所以 這個 request 域 一般用於 請求 轉發 的 多個資源中 共享資料. * 方法 : 1. void setAttribute(String name,Object obj) : 儲存 資料. 2. Object getAttribute(String name) : 通過 鍵(名稱) 獲取值. 3. void removeAttribute(String name) : 通過 鍵 移除 鍵值對   *** 在 轉發 之前 儲存 資料到 request 域 中. 1. request 域 的範圍 是 一次請求, 它 只能 用於 轉發的 情況. 一次 請求 訪問 多個 資源的 情況下, 也就是 轉發 的 情況下 才可以使用 request 域 來 共享 資料.   4. 獲取 ServletContext :   使用 request 物件 中的 方法 : ServletContext getServletContext( );   ServletContext servletContext = request.getServletContext(); System.out.println(servletContext); // *** 輸出 結果: org.apache.catalina.core.ApplicationContextFacade@576e2cd5   這個 物件 以後說.       補充: 在 idea 工具中, 可以直接 new Servlet, 它會 自動補全 註解 配置. 繼承 HttpServlet , 複寫 doPost( ), 和 doGet( ) 方法.   ## Response 物件 : * 功能 : 設定 響應 訊息 1. 設定 響應 行 1. 格式 : HTTP / 1.1 200 ok 200 : 狀態碼 設定 狀態碼 : setStatus(int sc)   2. 設定 響應 頭 1. 格式 : setHeader(String name, String value) 3. 設定 響應 體 : * 使用 步驟 : 通過 流 的 方式 : 與 請求體 一樣, 獲取的 話 要通過 流 的 方式. (getReader( ) ) 1. 獲取 輸出流 : (輸出 到 客戶端 瀏覽器上 ) * 字元 輸出流 : PrintWriter getWriter( ); (返回一個 列印流 物件 ) * 位元組 輸出流 : ServletOutputStream getOutputStream( ) (可以當作 OutputStream 來使用. )

相關推薦

Java Servlet&amp;Http&amp;Request

# 今日內容 : 1. Servlet 2. HTTP 協議 3. Request (就是 Servlet 中 service 方法的 形參. (有這個))     ## Servlet : 1. 概念 2. 執行步驟 3. 執行原理 (反射) 4. 生命週期 5. Servlet 3

java的邏輯運算子&amp;&amp;、&amp;、|、|| 詳解

java中的邏輯運算子&&、&、|、|| 詳解 **目錄: 邏輯與(&&) 邏輯與(&)、按位運算子(&) 邏輯或(||) 邏輯或(|)、按位或運算子(|)** 1.邏輯運算子(&&a

**伺服器的請求與轉發_Servlet&amp;HTTP&amp;Request [web基礎day14] *

Servlet * 概念 * 步驟 * 執行原理 * 生命週期 * Servlet 3.0 註解配置 * Servlet的體系結構 Servlet -- 介面 | GenericServlet--抽象類 | HttpServlet--抽象類 *

理解--->Java的值傳遞&amp;引用傳遞

  轉自:https://mp.weixin.qq.com/s?__biz=MzI4Njc5NjM1NQ==&mid=2247486882&idx=2&sn=0056f7c027b0db429650ea4df03985e5&chksm=ebd6328edca1bb9

關於WEBService&amp;HTTP&amp;Soap定義的備忘

文章目錄 HTTP HTTP方法 Web Services Soap HTTP 超文字傳輸協議(HTTP)的設計目的是保證客戶機與伺服器之間的通訊。 HTTP 的工作方式是客戶機與伺服器之間的請求-應答協議。 HTTP 在 TCP

java如何設定HTTP協議的頭資訊(header)

首先,我們先看一下http的頭資訊到底是什麼:HTTP(HyperTextTransferProtocol) 即超文字傳輸協議,目前網頁傳輸的的通用協議。HTTP協議採用了請求/響應模型,瀏覽器或其他客戶端發出請求,伺服器給與響應。就整個網路資源傳輸而 言,包括messag

SpringMVCservlet處理http請求原始碼解析

    Spring MVC的核心控制器為Servlet,所有訪問服務端的請求都將由servlet攔截接受,並進行相應處理最終進行返回。下面我們來看看它究竟是怎麼做的。     SpringMVC中的Servl

java servlet和jsp的概念及區別

目錄 一、瞭解Servlet的概念         Servlet定義:Servlet是基於Java技術的Web元件,由容器管理併產生動態的內容。Servlet引擎作為WEB伺服器 的擴充套件提供支援Servlet的功能。Servlet與客戶端通過Servlet

javaServlet之域物件

在Servlet裡面,有三個非常常用而且重要的物件,它們是:1. Request (Request域)2. Session (Session域)3. ServletContext (ServletContext域)這三個物件與別的物件有什麼特殊之處呢?答:這三個物件可以存放

java servlet的總結

1:servlet定義:Servlet是一個Java應用程式,執行在伺服器端,用來處理客戶端請求並作出響應的程式。Servlet多執行緒體系結構是建立在Java多執行緒機制之上的,它的生命週期是由Web容器負責的。 當客戶端第一次請求某個Servlet時,Servlet容器將

java在Service層獲取request,獲取絕對路徑

話不多說,直接上程式碼: HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();

JavaServlet

servlet-api.jar servlet-api.jar檔案為Servlet API的類庫檔案。Servlet API主要由兩個java包組成:javax.sevlet和javax.servlet.http。在javax.servlet包中定義了Serv

Java用於傳送http請求的工具類HttpRequestUtil

專案環境:jdk1.8+spring4.3.12如果jdk的版本比較低或者spring的版本比較低的話,或許有些包引用不到。在專案開發中,經常用呼叫http介面,下面是封裝apache的httpclient工具類。import org.apache.http.client.c

Java基礎——Servlet(七)過濾器&amp;監聽器 相關

計數器 cti inf width 正在 tab implement eve login 一、過濾器簡介 Filter 位於客戶端和請求資源之間,請求的資源可以是 Servlet Jsp html (img,javascript,css)等。用於攔截瀏覽器發給服務器的請求(

【本地資源路徑&amp;&amp;網絡資源路徑&amp;&amp;正反斜杠在Java的用法】

mage pow cnblogs 環境 而在 來看 pan 開始 命令行 一、概念和用法 左正右反 先來看看轉義字符的概念:通過 \ ,?來轉變後面字母或符號的含義。意思就是改變字母本身的含義。 以"\"符號為例,JAVA中有很多操作,例如文件操作等,需要用到路徑這個東

Java &amp;&amp;和&amp;的區別

log 不能 if判斷 ava nbsp 第一個 als post body &&時判斷第一個條件為false,後面的條件就沒有進行判斷。 &時要對所有的條件進行判斷,所以會對後面的條件進行判斷。 例如if((1!=1)&&(1/0!

Scala &amp; IntelliJ IDEA環境搭建升級版:在JAVA調用Scala的helloworld

手動 tor 三種 csdn right cati ngx folder 點擊 --------------------- 前言 --------------------- 項目關系,希望用Spark GraphX做數據分析及圖像展示,但前提是得會spark;spark是基

Java,&amp;&amp;與&amp;,||與|的區別

key int ron sso keyword 邏輯運算 一個 || mil 原文地址: Java中,&&與&,||與|的區別 在java的邏輯運算符中,有這麽四類:&&(短路與),&,|,||(短路或)。 &am

HTTP Status 500 - javax.servlet.ServletException: File &amp;quot;/common.jsp&amp;quot; not found

 在jsp頁面上插入.swf格式的視訊,報瞭如下錯誤  出現這種異常,而且頁面也找不到的話,那就是路徑出了問題了,仔細檢查路徑即可。 我的錯誤是一下的pluginspage="路徑找不到",我沒有這個播放器,也沒下載過,我拷貝別人的程式碼,不知道是什麼意思,導致錯誤

從客戶端(content1=&amp;quot;&amp;lt;img src=&amp;quot;/web/news/...&amp;quot;)檢測到有潛在危險的 Request.Form 值。

一開始一直不能上傳圖片 配置了所有應該配置的引數,從網上找各種大神貼,依舊不行,本來都是測試成功的不知道問啥突然就不能上傳圖片,藍瘦香菇一陣後決定重新下載安裝配置,整了一波後終於ok,但是又出現新的問題 提交不成功,一直提示: 從客戶端(content1="<img src="/web/news/…"