Request和Response-学习笔记01【Request_原理和继承体系、Request_获取请求数据】
- Java后端 學習路線 筆記匯總表【黑馬程序員】
目錄
01 Request_原理和繼承體系
Request_原理
Request_繼承體系
02 Request_獲取請求數據
Request_獲取請求行數據_方法介紹
Request_獲取請求行數據_代碼演示
Request_獲取請求頭數據
獲取所有請求頭名稱
演示獲取請求頭數據:user-agent
演示獲取請求頭數據、防盜鏈
Request_獲取請求體數據
Request_獲取請求參數通用方式
Request_獲取請求參數通用方式
1、String getParameter(String name):根據參數名稱獲取參數值
2、String[] getParameterValues(String name):根據參數名稱獲取參數值的數組
3、Enumeration getParameterNames():獲取所有請求的參數名稱
4、Map getParameterMap():獲取所有參數的map集合,string[]>
代碼——獲取請求參數通用方式
Request_獲取請求參數中文亂碼問題
get方法(tomcat 8 已經將get方式亂碼問題解決)
post方式(設置request的編碼)
01 Request_原理和繼承體系
Request_原理
1. request對象和response對象的原理
?? ?1. request和response對象是由服務器創建的。我們來使用它們。
?? ?2. request對象是來獲取請求消息,response對象是來設置響應消息。
Request_繼承體系
1. request對象和response對象的原理
?? ?1. request和response對象是由服務器創建的。我們來使用它們。
?? ?2. request對象是來獲取請求消息,response對象是來設置響應消息。
2. request對象繼承體系結構:?? ?
?? ?ServletRequest? ? ? ? ?--?? ?接口
?? ??? ?|?? ?繼承
?? ?HttpServletRequest??-- 接口
?? ??? ?|?? ?實現
?? ?org.apache.catalina.connector.RequestFacade 類(tomcat)
3. request:獲取請求消息
02 Request_獲取請求數據
Request_獲取請求行數據_方法介紹
1. request對象和response對象的原理
?? ?1. request和response對象是由服務器創建的。我們來使用它們。
?? ?2. request對象是來獲取請求消息,response對象是來設置響應消息。
2. request對象繼承體系結構:
?? ?ServletRequest?? ??? ?--?? ?接口
?? ??? ?|?? ?繼承
?? ?HttpServletRequest?? ?-- 接口
?? ??? ?|?? ?實現
?? ?org.apache.catalina.connector.RequestFacade 類(tomcat)
3. request功能:
?? ?1. 獲取請求消息數據
?? ??? ?1. 獲取請求行數據
?? ??? ??? ?* GET /day14/demo1?name=zhangsan HTTP/1.1
?? ??? ??? ?* 方法:
?? ??? ??? ??? ?1. 獲取請求方式 :GET
?? ??? ??? ??? ??? ?* String getMethod() ?
?? ??? ??? ??? ?2. (*)獲取虛擬目錄:/day14
?? ??? ??? ??? ??? ?* String getContextPath()
?? ??? ??? ??? ?3. 獲取Servlet路徑: /demo1
?? ??? ??? ??? ??? ?* String getServletPath()
?? ??? ??? ??? ?4. 獲取get方式請求參數:name=zhangsan
?? ??? ??? ??? ??? ?* String getQueryString()
?? ??? ??? ??? ?5. (*)獲取請求URI:/day14/demo1
?? ??? ??? ??? ??? ?* String getRequestURI():? ? ? ? ? ?/day14/demo1
?? ??? ??? ??? ??? ?* StringBuffer getRequestURL():http://localhost/day14/demo1
?? ??? ??? ??? ?6. 獲取協議及版本:HTTP/1.1
?? ??? ??? ??? ??? ?* String getProtocol()
?? ??? ??? ??? ?7. 獲取客戶機的IP地址:
?? ??? ??? ??? ??? ?* String getRemoteAddr()
?? ??? ?2. 獲取請求頭數據
?? ??? ?3. 獲取請求體數據
Request_獲取請求行數據_代碼演示
1. request對象和response對象的原理
?? ?1. request和response對象是由服務器創建的。我們來使用它們。
?? ?2. request對象是來獲取請求消息,response對象是來設置響應消息。
2. request對象繼承體系結構:
?? ?ServletRequest?? ??? ?--?? ?接口
?? ??? ?|?? ?繼承
?? ?HttpServletRequest?? ?-- 接口
?? ??? ?|?? ?實現
?? ?org.apache.catalina.connector.RequestFacade 類(tomcat)
3. request功能:
?? ?1. 獲取請求消息數據
?? ??? ?1. 獲取請求行數據
?? ??? ??? ?* GET /day14/demo1?name=zhangsan HTTP/1.1
?? ??? ??? ?* 方法:
?? ??? ??? ??? ?1. 獲取請求方式 :GET
?? ??? ??? ??? ??? ?* String getMethod() ?
?? ??? ??? ??? ?2. (*)獲取虛擬目錄:/day14
?? ??? ??? ??? ??? ?* String getContextPath()
?? ??? ??? ??? ?3. 獲取Servlet路徑: /demo1
?? ??? ??? ??? ??? ?* String getServletPath()
?? ??? ??? ??? ?4. 獲取get方式請求參數:name=zhangsan
?? ??? ??? ??? ??? ?* String getQueryString()
?? ??? ??? ??? ?5. (*)獲取請求URI:/day14/demo1
?? ??? ??? ??? ??? ?* String getRequestURI():?? ??? ?/day14/demo1
?? ??? ??? ??? ??? ?* StringBuffer getRequestURL() ?:http://localhost/day14/demo1
?? ??? ??? ??? ??? ?* URL:統一資源定位符 : http://localhost/day14/demo1?? ?中華人民共和國
?? ??? ??? ??? ??? ?* URI:統一資源標識符 : /day14/demo1?? ??? ??? ??? ??? ?共和國
?? ??? ??? ??? ?
?? ??? ??? ??? ?6. 獲取協議及版本:HTTP/1.1
?? ??? ??? ??? ??? ?* String getProtocol()
?? ??? ??? ??? ?7. 獲取客戶機的IP地址:
?? ??? ??? ??? ??? ?* String getRemoteAddr()
?? ??? ?2. 獲取請求頭數據? ? ? ? ? ??
?? ??? ?3. 獲取請求體數據
??
??
package cn.itcast.web.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;/*** 演示Request對象獲取請求行數據*/ @WebServlet("/requestDemo1") public class RequestDemo1 extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {/*1. 獲取請求方式 :GET* String getMethod()2. (*)獲取虛擬目錄:/day14* String getContextPath()3. 獲取Servlet路徑: /requestDemo1* String getServletPath()4. 獲取get方式請求參數:name=zhangsan* String getQueryString()5. (*)獲取請求URI:/day14/demo1* String getRequestURI(): /day14/requestDemo1* StringBuffer getRequestURL() :http://localhost/day14/requestDemo16. 獲取協議及版本:HTTP/1.1* String getProtocol()7. 獲取客戶機的IP地址:* String getRemoteAddr()*///1. 獲取請求方式 :GETString method = request.getMethod();System.out.println(method);//2.(*)獲取虛擬目錄:/day14String contextPath = request.getContextPath();System.out.println(contextPath);//3. 獲取Servlet路徑: /demo1String servletPath = request.getServletPath();System.out.println(servletPath);//4. 獲取get方式請求參數:name=zhangsanString queryString = request.getQueryString();System.out.println(queryString);//5.(*)獲取請求URI:/day14/demo1String requestURI = request.getRequestURI();StringBuffer requestURL = request.getRequestURL();System.out.println(requestURI);System.out.println(requestURL);//6. 獲取協議及版本:HTTP/1.1String protocol = request.getProtocol();System.out.println(protocol);//7. 獲取客戶機的IP地址:String remoteAddr = request.getRemoteAddr();System.out.println(remoteAddr);} }Request_獲取請求頭數據
1. request對象和response對象的原理
?? ?1. request和response對象是由服務器創建的。我們來使用它們。
?? ?2. request對象是來獲取請求消息,response對象是來設置響應消息。
2. request對象繼承體系結構:
?? ?ServletRequest?? ??? ?--?? ?接口
?? ??? ?|?? ?繼承
?? ?HttpServletRequest?? ?-- 接口
?? ??? ?|?? ?實現
?? ?org.apache.catalina.connector.RequestFacade 類(tomcat)
3. request功能:
?? ?1. 獲取請求消息數據
?? ??? ?1. 獲取請求行數據? ? ? ? ? ? ? ??
?? ??? ?2. 獲取請求頭數據
?? ??? ??? ?* 方法:
?? ??? ??? ??? ?* (*)String getHeader(String name):通過請求頭的名稱獲取請求頭的值
?? ??? ??? ??? ?* Enumeration<String> getHeaderNames():獲取所有的請求頭名稱
?? ??? ?3. 獲取請求體數據
獲取所有請求頭名稱
package cn.itcast.web.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; import java.util.Enumeration;@WebServlet("/requestDemo2") public class RequestDemo2 extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//演示獲取請求頭數據//1.獲取所有請求頭名稱Enumeration<String> headerNames = request.getHeaderNames();//2.遍歷while (headerNames.hasMoreElements()) {String name = headerNames.nextElement();//根據名稱獲取請求頭的值String value = request.getHeader(name);System.out.println(name + "---" + value);}} }演示獲取請求頭數據:user-agent
package cn.itcast.web.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; import java.util.Enumeration;@WebServlet("/requestDemo3") public class RequestDemo3 extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//演示獲取請求頭數據:user-agent 告訴服務器客戶端的版本是什么—>判斷瀏覽器版本String agent = request.getHeader("user-agent"); // user-agent不區分大小寫//判斷agent的瀏覽器版本if (agent.contains("Chrome")) {//谷歌System.out.println("谷歌來了...");} else if (agent.contains("Firefox")) {//火狐System.out.println("火狐來了...");}} }演示獲取請求頭數據、防盜鏈
package cn.itcast.web.request;import javax.servlet.ServletContext; 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;@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 {//演示獲取請求頭數據:refererString referer = request.getHeader("referer");System.out.println(referer);//http://localhost/day14/login.html//防盜鏈if (referer != null) {if (referer.contains("/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("想看電影嗎?來優酷吧...");}}} }Request_獲取請求體數據
1. request對象和response對象的原理
?? ?1. request和response對象是由服務器創建的。我們來使用它們。
?? ?2. request對象是來獲取請求消息,response對象是來設置響應消息。
2. request對象繼承體系結構:
?? ?ServletRequest?? ??? ?--?? ?接口
?? ??? ?|?? ?繼承
?? ?HttpServletRequest?? ?-- 接口
?? ??? ?|?? ?實現
?? ?org.apache.catalina.connector.RequestFacade 類(tomcat)
3. request功能:
?? ?1. 獲取請求消息數據
?? ??? ?1. 獲取請求行數據
?? ??? ?2. 獲取請求頭數據
?? ??? ?3. 獲取請求體數據:
?? ??? ??? ?* 請求體:只有POST請求方式,才有請求體,在請求體中封裝了POST請求的請求參數
?? ??? ??? ?* 步驟:
?? ??? ??? ??? ?1. 獲取流對象
?? ??? ??? ??? ??? ?* ?BufferedReader getReader():獲取字符輸入流,只能操作字符數據
?? ??? ??? ??? ??? ?* ?ServletInputStream getInputStream():獲取字節輸入流,可以操作所有類型數據
?? ??? ??? ??? ??? ??? ?* 在文件上傳知識點后講解
?? ??? ??? ??? ?2. 再從流對象中拿數據
package cn.itcast.web.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.BufferedReader; import java.io.IOException;@WebServlet("/requestDemo5") public class RequestDemo5 extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//獲取請求消息體--請求參數//1.獲取字符流BufferedReader br = request.getReader();//2.讀取數據String line = null;while ((line = br.readLine()) != null) {System.out.println(line);}}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {} }Request_獲取請求參數通用方式
1. request對象和response對象的原理
2. request對象繼承體系結構
3. request功能:
?? ?1. 獲取請求消息數據? ? ? ? ? ? ? ??
?? ?2. 其他功能:
?? ??? ?1. 獲取請求參數通用方式:不論get還是post請求方式都可以使用下列方法來獲取請求參數。
?? ??? ??? ?1. String getParameter(String name):根據參數名稱獲取參數值 username=zs&password=123
?? ??? ??? ?2. String[] getParameterValues(String name):根據參數名稱獲取參數值的數組 hobby=xx&hobby=game
?? ??? ??? ?3. Enumeration<String> getParameterNames():獲取所有請求的參數名稱
?? ??? ??? ?4. Map<String,String[]> getParameterMap():獲取所有參數的map集合
?? ??? ?2. 請求轉發
?? ??? ?3. 共享數據
?? ??? ?4. 獲取ServletContext
Request_獲取請求參數通用方式
獲取請求參數通用方式:不論get還是post請求方式都可以使用下列方法來獲取請求參數。
1、String getParameter(String name):根據參數名稱獲取參數值
2、String[] getParameterValues(String name):根據參數名稱獲取參數值的數組
3、Enumeration<String> getParameterNames():獲取所有請求的參數名稱
4、Map<String,String[]> getParameterMap():獲取所有參數的map集合
代碼——獲取請求參數通用方式
package cn.itcast.web.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.BufferedReader; import java.io.IOException; import java.util.Enumeration; import java.util.Map; import java.util.Set;@WebServlet("/requestDemo6") public class RequestDemo6 extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//post 獲取請求參數//根據參數名稱獲取參數值/* String username = request.getParameter("username");System.out.println("post");System.out.println(username);*///根據參數名稱獲取參數值的數組String[] hobbies = request.getParameterValues("hobby");/*for (String hobby : hobbies) {System.out.println(hobby);}*///獲取所有請求的參數名稱/*Enumeration<String> parameterNames = request.getParameterNames();while(parameterNames.hasMoreElements()){String name = parameterNames.nextElement();System.out.println(name);String value = request.getParameter(name);System.out.println(value);System.out.println("----------------");}*/// 獲取所有參數的map集合Map<String, String[]> parameterMap = request.getParameterMap();//遍歷Set<String> keyset = parameterMap.keySet();for (String name : keyset) {//獲取鍵 獲取值String[] values = parameterMap.get(name);System.out.println(name);for (String value : values) {System.out.println(value);}System.out.println("-----------------");}}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//get 獲取請求參數/* //根據參數名稱獲取參數值String username = request.getParameter("username");System.out.println("get");System.out.println(username);*/this.doPost(request, response);} }Request_獲取請求參數中文亂碼問題
中文亂碼問題:
? ? * get方式:tomcat 8 已經將get方式亂碼問題解決了。
? ? * post方式:會亂碼
? ? ? ? * 解決:在獲取參數前,設置request的編碼 request.setCharacterEncoding("utf-8") ;
get方法(tomcat 8 已經將get方式亂碼問題解決)
post方式(設置request的編碼)
總結
以上是生活随笔為你收集整理的Request和Response-学习笔记01【Request_原理和继承体系、Request_获取请求数据】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Servlet和HTTP请求协议-学习笔
- 下一篇: Request和Response-学习笔