摘要:概述在創建時會覆蓋方法,或這些方法都有兩個參數,一個為代表請求的和代表響應。方法中的的類型是,而方法的的類型是,是的子接口,功能和方法更加強大。
1.HttpServletRequest概述
在創建Servlet時會覆蓋service()方法,或doGet()/doPost(),這些方法都有兩個參數,一個為代表請求的request和代表響應response。
service方法中的request的類型是ServletRequest,而doGet/doPost方法的request的類型是HttpServletRequest,HttpServletRequest是ServletRequest的子接口,功能和方法更加強大。2.request的運行流程 3.通過抓包工具抓取Http請求
因為request代表請求,所以我們可以通過該對象分別獲得Http請求的請求行,請求頭和請求體。
請求行:請求資源-http協議版本:1.1/1.0
請求頭
格式:鍵值對key:value
請求頭是瀏覽器自動封裝的,這些是瀏覽器要告知服務器的一些信息
請求體
請求參數(post提交的請求參數)
get提交:請求參數在url地址后面?
post提交:請求參數在http請求體重封裝
4.通過request獲得請求行獲得客戶端的請求方式:String getMethod()獲得請求的資源:
String getRequestURI()
StringBuffer getRequestURL()
String getContextPath() ---web應用的名稱
String getQueryString() ---- get提交url地址后的參數字符串
username=zhangsan&password=123
request.getRemoteAddr() --- 獲得訪問的客戶端IP地址
//1.獲得請求方式 String method = request.getMethod(); System.out.println("method:" + method); //2.獲得請求的資源相關的內容 String requestURI = request.getRequestURI(); System.out.println("requestURI:" + requestURI); StringBuffer requestURL = request.getRequestURL(); System.out.println("requestURL:" + requestURL); //3.獲得web應用的名稱 String contextPath = request.getContextPath(); System.out.println("web應用:" + contextPath); //4.地址后的參數的字符串 String queryString = request.getQueryString(); System.out.println("queryString:" + queryString); //5.獲得客戶端的IP地址 String remoteAddr = request.getRemoteAddr(); System.out.println("remoteAddr:" + remoteAddr);5.通過request獲得請求頭
long getDateHeader(String name)
String getHeader(String name)
Enumeration getHeaderNames()
Enumeration getHeaders(String name)
int getIntHeader(String name)
//1.獲得指定的頭 String header = request.getHeader("User-Agent"); System.out.println(header); //2.獲得所有頭的名字 EnumerationheaderNames = request.getHeaderNames(); while (headerNames.hasMoreElements()){ String headerName = headerNames.nextElement(); String headerValue = request.getHeader(headerName); System.out.println(headerName + ":" + headerValue); }
referer頭的作用:執行該此訪問的的來源, 做防盜鏈
//對該新聞的來源進行判斷 String header = request.getHeader("referer"); if (header!=null&&header.startsWith("http://localhost")) { //是從我自己的網站跳轉過去的,可以看新聞 response.setContentType("text/html;charset=UTF-8"); response.getWriter().write("英雄聯盟IG戰隊奪冠..."); }else{ response.getWriter().write("請不要盜鏈!"); }6.通過request獲得請求體
請求體中的內容是通過post提交的請求參數,格式是:
username=zhangsan&password=123&hobby=football&hobby=basketball
key value username [zhangsan] password [123] hobby [football,basketball]
以上面參數為例,通過一下方法獲得請求參數:
String getParameter(String name)
String(#getParameterValues(java.lang.String))(String name)
Enumeration getParameterNames()
MapgetParameterMap()
注意:get請求方式的請求參數 上述的方法一樣可以獲得
request.setCharacterEncoding("utf-8"); //1.獲得單個表單值 String username = request.getParameter("username"); System.out.println(username); String password = request.getParameter("password"); System.out.println(password); //2.獲得多個表單的值 String[] hobbys = request.getParameterValues("hobby"); for (String hobby:hobbys){ System.out.println(hobby); } //3.獲得所有的請求參數的名稱 EnumerationparameterNames = request.getParameterNames(); while(parameterNames.hasMoreElements()){ System.out.println(parameterNames.nextElement()); } System.out.println("----------------------"); //4.獲得所有的參數,封裝到一個Map Map parameterMap = request.getParameterMap(); for (Map.Entry entry:parameterMap.entrySet()){ System.out.println(entry.getKey()); for (String str:entry.getValue()){ System.out.println(str); } System.out.println("----------------------"); }
post提交亂碼:request.setCharacterEncoding("UTF-8"); get提交亂碼:parameter = new String(parameter.getbytes("iso8859-1"),"utf-8");7.request的其他功能
request對象也是一個存儲數據的區域對象,所以也具有如下方法:
setAttribute(String name, Object o)
getAttribute(String name)
removeAttribute(String name)
注意:request域的作用范圍:一次請求中
獲得請求轉發器----path是轉發的地址
RequestDispatcher getRequestDispatcher(String path)通過轉發器對象轉發
requestDispathcer.forward(ServletRequest request, ServletResponse response)
ServletContext域與Request域的生命周期比較?
Servlet Context:
創建:服務器啟動
銷毀:服務器關閉
域的作用范圍:整個web應用
request:
創建:訪問時創建request
銷毀:響應結束request銷毀
域的作用范圍:一次請求中
轉發與重定向的區別?
1)重定向兩次請求,轉發一次請求
2)重定向地址欄的地址變化,轉發地址不變
3)重新定向可以訪問外部網站 轉發只能訪問內部資源
4)轉發的性能要優于重定向
客戶端地址與服務器端地址的寫法?
客戶端地址:
是客戶端去訪問服務器的地址,服務器外部的地址,
特點:寫上web應用名稱
直接輸入地址:
重定向
服務器端地址:
服務器內部資源的跳轉的地址,
特點:不需要寫web應用的名稱
轉發
8. 總結
request獲得行的內容
request.getMethod()
request.getRequestURI()
request.getRequestURL()
request.getContextPath()
request.getRemoteAddr()
request獲得頭的內容
request.getHeader(name)
request獲得體(請求參數)
String request.getParameter(name)
Map
String[] request.getParameterValues(name);
注意:客戶端發送的參數 到服務器端都是字符串
獲得中文亂碼的解決:
post:request.setCharacterEncoding(“UTF-8”);
get:parameter = new String(parameter.getBytes(“iso8859-1”),”UTF-8”);
request轉發和域
request.getRequestDispatcher(轉發的地址).forward(req,resp);
request.setAttribute(name,value)
request.getAttribute(name)
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/72042.html
摘要:概述是公司提供的一門用于開發動態資源的技術。把開發好的類部署到服務器中。應用程序被停止或重新啟動之前,引擎將卸載,并在卸載之前調用的方法。 servlet概述 Servlet是sun公司提供的一門用于開發動態web資源的技術。 Sun公司在其API中提供了一個servlet接口,用戶若想用發一個動態web資源(即開發一個Java程序向瀏覽器輸出數據),需要完成以下2個步驟: (1)...
摘要:創建與銷毀對象是發送請求服務器就會創建它,當響應產生時,對象就會銷毀。是容器為開發人員提供的對象,它提供了對某一資源的已過濾請求調用鏈的視圖。 一、Listener監聽器 Javaweb開發中的監聽器,是用于監聽web常見對象 HttpServletRequest HttpSession ServletContext 監聽它們的創建與銷毀 屬性變化 session綁...
摘要:方法對象銷毀時執行方法其中的參數每次在執行方法時容器負責創建一個和一個對象作為的參數傳遞進來。該個該就是在訪問目標資源的方法時的和。 一、過濾器Filter1.filter的簡介filter是對客戶端訪問資源的過濾,符合條件放行,不符合條件不放行,并且可以對目 標資源訪問前后進行邏輯處理2.快速入門步驟:1)編寫一個過濾器的類實現Filter接口2)實現接口中尚未實現的方法(著重...
摘要:文件上傳解析請求正文的每部分的內容。獲取上傳文件的大小獲取上傳文件對應的輸入流把上傳的文件保存到指定文件中。如果上傳的文件超過,用磁盤作為緩存。如果自己用流實現的文件上傳,要在流關閉后,清理臨時文件。 一、文件的上傳和下載1、文件上傳的原理分析1.1文件上傳的必要前提:a、提供form表單,method必須是postb、form表單的enctype必須是multipart/form-d...
摘要:文件拷貝的模板代碼會自動關閉但是,如果下載中文文件,頁面在下載時會出現中文亂碼或不能顯示文件名的情況,原因是不同的瀏覽器默認對下載文件的編碼方式不同,是編碼方式,而火狐瀏覽器是編碼方式。 1.HttpServletResponse概述 我們在創建Servlet時會覆蓋service()方法,或doGet()/doPost(),這些方法都有兩個參數,一個為代表請求的request和代表...
閱讀 2077·2023-04-25 19:15
閱讀 2245·2021-11-23 09:51
閱讀 1264·2021-11-17 09:33
閱讀 2165·2021-08-26 14:15
閱讀 2476·2019-08-30 15:54
閱讀 1582·2019-08-30 15:54
閱讀 2167·2019-08-30 12:50
閱讀 1132·2019-08-29 17:08