前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。
Web服務器收到一個http請求,會針對每個請求創建一個HttpServletRequest和HttpServletResponse對象,
從客戶端取數據找HttpServletRequest,向客戶端發送數據找HttpServletResponse。
?
HTTP?協議是基于請求-響應的協議,客戶端請求一個文件,服務器對該請求進行響應。
HTTP?使用?TCP?協議,默認使用?80?端口。最初的?HTTP?協議版本是?HTTP/0.9,后被?HTTP/1.0?替代。目前使用的版本是?HTTP/1.1,
在?HTTP?協議中,總是由主動建立連接、發送?HTTP?請求的客戶端來初始化一個事務。
服務器不負責連接客戶端,或創建一個到客戶端的回調連接(callback connection)。
?
?
HttpServletRequest?
公共接口類HttpServletRequest繼承自ServletRequest.客戶端瀏覽器發出的請求被封裝成為一個HttpServletRequest對象。
所有的信息包括請求的地址,請求的參數,提交的數據,上傳的文件客戶端的IP,甚至客戶端操作系統都包含在其內。
?
一個 HTTP?請求包含以下三部分:
a.請求地址(URL)
b.請求頭(Request headers)
c.實體數據(Entity body)
?
每個?HTTP?請求都會有一個請求方法,HTTP1.1?中支持的方法包括,GET、POST、HEAD、OPTIONS、PUT、DELETE?和?TRACE。
互聯網應用中最常用的是?GET?和?POST。
URI?指明了請求資源的地址,通常是從網站根目錄開始計算的一個相對路徑,因此它總是以斜線 “/”開頭的。
URL?實際上是?URI?的一種類型,請求頭(header)中包含了一些關于客戶端環境和請求實體(entity)的有用的信息。
例如,客戶端瀏覽器所使用的語言,請求實體信息的長度等。每個請求頭使用?CRLF(回車換行符,“\r\n”)分隔。
注意請求頭的格式:請求頭名+英文空格+請求頭值。
?
常用方法
1.獲得客戶機信息
getRequestURL方法返回客戶端發出請求時的完整URL。
getRequestURI方法返回請求行中的資源名部分。
getQueryString?方法返回請求行中的參數部分。
getRemoteAddr方法返回發出請求的客戶機的IP地址
getRemoteHost方法返回發出請求的客戶機的完整主機名
getRemotePort方法返回客戶機所使用的網絡端口號
getLocalAddr方法返回WEB服務器的IP地址。
getLocalName方法返回WEB服務器的主機名
getMethod得到客戶機請求方式
getServerPath()獲取請求的文件的路徑
?
?2.獲得客戶機請求頭
getHeader(string name)方法?
getHeaders(String name)方法?
getHeaderNames方法?
?
?3.?獲得客戶機請求參數(客戶端提交的數據)
getParameter(name)方法?獲取請求中的參數,該參數是由name指定的
getParameterValues(String name)方法?獲取指定名稱參數的所有值數組。
它適用于一個參數名對應多個值的情況。如頁面表單中的復選框,多選列表提交的值。
?
getParameterNames方法?返回一個包含請求消息中的所有參數名的Enumeration對象。
通過遍歷這個Enumeration對象,就可以獲取請求消息中所有的參數名。
?
getCharacterEncoding()?返回請求的字符編碼方式
getAttributeNames()返回當前請求的所有屬性的名字集合賦值:setAttribute()
getAttribute(String name)?返回name指定的屬性值
getsession()返回和客戶端相關的session,如果沒有給客戶端分配session,則返回null
getParameterMap():返回一個保存了請求消息中的所有參數名和值的Map對象。
Map對象的key是字符串類型的參數名,value是這個參數所對應的Object類型的值數組。
?
RequestDispatcher.forward?方法的請求轉發過程結束后,瀏覽器地址欄保持初始的URL地址不變。
方法在服務器端內部將請求轉發給另外一個資源,瀏覽器只知道發出了請求并得到了響應結果,并不知道在服務器程序內部發生了轉發行為。
?
request.setCharacterEncoding("utf-8");
getReader()?獲取請求體的數據流。
getInputStream()?獲取請求的輸入流中的數據。
?