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