03 HttpServletRequest_HttpServletResponse
生活随笔
收集整理的這篇文章主要介紹了
03 HttpServletRequest_HttpServletResponse
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
HttpServletRequest:一次來(lái)自客戶端的請(qǐng)求的相關(guān)信息 請(qǐng)求行 request.getMethod() 獲取http請(qǐng)求方式 request.getRequestURI() 獲取統(tǒng)一資源標(biāo)識(shí)符 request.getRequestURL() 獲取統(tǒng)一資源定位符 request.getQueryString() 獲取查詢字符串 request.getProcotol() 獲取協(xié)議版本 request.getScheme() 獲取協(xié)議名 請(qǐng)求頭 request.getHeader() 獲取請(qǐng)求頭信息 request.getHeaderNames() 獲取所有請(qǐng)求頭的名字 實(shí)體內(nèi)容 request.getParameter() 獲取請(qǐng)求實(shí)體中的參數(shù)、或URL后的請(qǐng)求參數(shù) request.getInputStream() 獲取請(qǐng)求參數(shù),當(dāng)表單提交的enctype="multipart/form-data" 網(wǎng)絡(luò)相關(guān)信息 request.getRemoteAddr() 獲取客戶端的IP地址 request.getRemotePort() 獲取客戶端的端口號(hào) request.getLocalAddr() 獲取服務(wù)器端的IP地址 request.getLocalPort() 獲取服務(wù)器端的端口號(hào) HttpServletResponse:一次發(fā)送給客戶端的響應(yīng)的相關(guān)信息 狀態(tài)行 應(yīng)答頭 response.setHeader() 設(shè)置應(yīng)答頭 response.setContentType("text/html; charset=utf-8") 設(shè)置響應(yīng)內(nèi)容及字符集 響應(yīng)實(shí)體 response.getWriter() 獲取打印流,輸出字符數(shù)據(jù) response.getOutputStream() 獲取字節(jié)輸出流,輸出二進(jìn)制數(shù)據(jù) 一、客戶端請(qǐng)求服務(wù)器的數(shù)據(jù)有亂碼 1.get方式請(qǐng)求 ①修改tomcat/conf/server.xml,在<Connector> 標(biāo)簽中添加屬性u(píng)seBodyEncodingForURI="true" ②在獲取請(qǐng)求數(shù)據(jù)之前,設(shè)置 request.setCharacterEncoding("utf-8"); 2.post方式請(qǐng)求 在獲取請(qǐng)求數(shù)據(jù)之前,設(shè)置 request.setCharacterEncoding("utf-8"); 二、服務(wù)器返回給客戶端的數(shù)據(jù)有亂碼 response.setContentType("text/html; charset=utf-8"); 請(qǐng)求轉(zhuǎn)發(fā) request.getRequestDispathcer("path").forward(reqeust,response); 請(qǐng)求轉(zhuǎn)發(fā)的特點(diǎn): 1.地址欄沒(méi)有發(fā)生變化 2.用戶只發(fā)起了一次請(qǐng)求 3.請(qǐng)求轉(zhuǎn)發(fā)只能轉(zhuǎn)發(fā)本服務(wù)器以內(nèi)的資源 4.由于請(qǐng)求是同一個(gè)對(duì)象,所以可以利用該request做servlet之間數(shù)據(jù)的傳輸 重定向 response.sendRedirect("path") 重定向的特點(diǎn): 1.地址欄會(huì)發(fā)生改變 2.用戶發(fā)起了兩次請(qǐng)求 3.重定向可以訪問(wèn)服務(wù)器以外的資源 4.重定向由于請(qǐng)求多次的,所以HttpServletRequest不是同一個(gè)對(duì)象,故不能使用它傳遞數(shù)據(jù) 一、分析 1.找出一個(gè)url中的項(xiàng)目名稱 項(xiàng)目名稱前面的“/”是服務(wù)器地址,例:http://127.0.0.1:8080/ 項(xiàng)目名稱后面的“/”是項(xiàng)目地址,例:http://127.0.0.1:8080/proejctname/ 二、判斷 1.判斷一次請(qǐng)求行為是誰(shuí)發(fā)出的 如果是瀏覽器行為,則表示項(xiàng)目名稱前面的“/”,即服務(wù)器地址 如果是服務(wù)器內(nèi)部行為,則表示項(xiàng)目名稱后面的“/”,即項(xiàng)目地址 1.服務(wù)器內(nèi)部行為:請(qǐng)求轉(zhuǎn)發(fā) 2.瀏覽器行為:重定向、頁(yè)面中form提交、頁(yè)面中a標(biāo)簽、js中通過(guò)location.href定位一個(gè)路徑 Cookie:在瀏覽器中保存用戶的信息 使用:由服務(wù)器創(chuàng)建,發(fā)送到瀏覽器保存,之后隨著請(qǐng)求發(fā)回到服務(wù)器 1.創(chuàng)建cookie Cookie cookie = new Cookie("name","value"); 2.發(fā)送cookie到瀏覽器 response.addCookie(cookie對(duì)象); 3.獲取來(lái)自客戶端的cookie Cookie[] cookies = request.getCookies(); 使用注意: 1.cookie第一次是由servlet發(fā)送到瀏覽器中,第一次不能獲取cookie 2.不同的瀏覽器存放的cookie不是同一個(gè) 3.如果設(shè)置了cookie的maxage,則cookie會(huì)保存在瀏覽器所在電腦的硬盤上,如果沒(méi)設(shè)置該屬性,則保存在瀏覽器的內(nèi)存中 Session:在服務(wù)器中保存用戶信息 使用:在服務(wù)器端創(chuàng)建Session,來(lái)保存當(dāng)前訪問(wèn)服務(wù)器的用戶的信息 1.獲取session(如果已經(jīng)創(chuàng)建了session,則返回當(dāng)前session)或創(chuàng)建session: HttpSession session = request.getSession(); 2.設(shè)置session最大不活躍時(shí)間 session.setMaxInactiveInteval() //以秒為單位 3.使用session保存信息 session.setAttribute(String key,Object value); session.getAttribute(String key); 4.立即銷毀session session.invalidate(); HttpServletRequest:封裝了一次來(lái)自客戶端的Http的請(qǐng)求信息 請(qǐng)求消息包含幾個(gè)部分? 1請(qǐng)求行 private void getRequestLine(HttpServletRequest request,HttpServletResponse response) {
//請(qǐng)求方式 String method = request.getMethod();System.out.println(method);
//資源路徑String uri =request.getRequestURI();String url=request.getRequestURL().toString();System.out.println(uri);System.out.println(url);
//請(qǐng)求參數(shù)字符串String queryString =request.getQueryString();System.out.println(queryString);
//協(xié)議及版本號(hào)String protocol = request.getProtocol();System.out.println(protocol);String scheme = request.getScheme();System.out.println(scheme);}
?
2請(qǐng)求頭 private void getRequestHead(HttpServletRequest request,HttpServletResponse response) {// 根據(jù)header的key獲取其valueString user_agent = request.getHeader("User-Agent");System.out.println(user_agent);// 查詢header所有的keynameEnumeration<String> enu = request.getHeaderNames();while (enu.hasMoreElements()) {System.out.println(enu.nextElement());}}?
3 實(shí)體內(nèi)容 private void getRequestBody(HttpServletRequest request,HttpServletResponse response) throws IOException {// 獲取請(qǐng)求實(shí)體中的數(shù)據(jù)// 請(qǐng)求實(shí)體中的數(shù)據(jù)有三種形式:// 1.application/x-www-form-urlencoded// 2.multipart/form-data// 3.text/plain// 對(duì)于1、3// getParameter() //無(wú)論post方式還是get方式都可以獲取用戶的請(qǐng)求數(shù)據(jù)String value = request.getParameter("username");System.out.println(value);String coment = request.getParameter("coment");System.out.println(coment);ServletInputStream in= request.getInputStream();FileOutputStream out = new FileOutputStream("d:\\1.txt");int len = 0;byte[] flush = new byte[1024];while ((len = in.read(flush)) != -1) {out.write(flush, 0, len);}out.close();in.close();}?
4網(wǎng)絡(luò)信息 private void getIntenetInfo(HttpServletRequest request,HttpServletResponse response) {System.out.println("訪問(wèn)服務(wù)器的地址為:" + request.getRemoteAddr() + ":"+ request.getRemotePort());System.out.println("服務(wù)器的本地地址為:" + request.getLocalAddr() + ":"+ request.getLocalPort());}}?
響應(yīng)消息分為幾步? public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {// 狀態(tài)行// 協(xié)議版本 http狀態(tài)碼 htt狀態(tài)描述// 應(yīng)答頭// 響應(yīng)實(shí)體// 設(shè)置應(yīng)答頭response.setHeader("content-type", "image/jpeg; charset=utf-8");// 向用戶輸出字符數(shù)據(jù)/** PrintWriter out = response.getWriter(); out.write("<h1>你好世界!</h1>");* out.flush(); out.close();*/// 我們只能打開一個(gè)流為用戶輸出數(shù)據(jù)FileInputStream in = new FileInputStream("D:\\1.jpg");ServletOutputStream out = response.getOutputStream();int len = 0;byte[] flush = new byte[1024 * 1024];while ((len = in.read(flush)) != -1) {out.write(flush, 0, len);}out.flush();out.close();in.close();}?
轉(zhuǎn)載于:https://www.cnblogs.com/aknife/p/10846819.html
總結(jié)
以上是生活随笔為你收集整理的03 HttpServletRequest_HttpServletResponse的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 1.5-1.6 oozie部署
- 下一篇: 四叶草社交平台——十天冲刺(4)