日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Servlet,HTTP,Ruquest,Response

發(fā)布時(shí)間:2025/3/15 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Servlet,HTTP,Ruquest,Response 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

目錄

一.Servlet3.0

1.1好處

1.2步驟

1.3相關(guān)配置

二.HTTP協(xié)議

2.1請(qǐng)求消息

1. 請(qǐng)求行

2. 請(qǐng)求頭

3. 請(qǐng)求空行4. 請(qǐng)求體

2.2響應(yīng)消息

1. 響應(yīng)行

2. 響應(yīng)頭:

3.響應(yīng)空行

4.響應(yīng)體:傳輸?shù)臄?shù)據(jù)

三.Request

四.Response


一.Servlet3.0

1.1好處

????????支持注解配置。可以不需要web.xml了。

1.2步驟

????????1. 創(chuàng)建JavaEE項(xiàng)目,選擇Servlet的版本3.0以上,可以不創(chuàng)建web.xml
?? ??? ?2. 定義一個(gè)類,實(shí)現(xiàn)Servlet接口
?? ??? ?3. 復(fù)寫方法
?? ??? ?4. 在類上使用@WebServlet注解,進(jìn)行配置
?? ??? ??? ?* @WebServlet("資源路徑")

1.3相關(guān)配置

?? ?1. urlpartten:Servlet訪問路徑
?? ??? ?1. 一個(gè)Servlet可以定義多個(gè)訪問路徑 : @WebServlet({"/d4","/dd4","/ddd4"})
?? ??? ?2. 路徑定義規(guī)則:
?? ??? ??? ?1. /xxx:路徑匹配
?? ??? ??? ?2. /xxx/xxx:多層路徑,目錄結(jié)構(gòu)
?? ??? ??? ?3. *.do:擴(kuò)展名匹配

二.HTTP協(xié)議

2.1請(qǐng)求消息

1. 請(qǐng)求行

請(qǐng)求方式 請(qǐng)求url 請(qǐng)求協(xié)議/版本
?? ??? ?GET /login.html?? ?HTTP/1.1

?? ??? ?* 請(qǐng)求方式:
?? ??? ??? ?* HTTP協(xié)議有7中請(qǐng)求方式,常用的有2種
?? ??? ??? ??? ?* GET:
?? ??? ??? ??? ??? ?1. 請(qǐng)求參數(shù)在請(qǐng)求行中,在url后。
?? ??? ??? ??? ??? ?2. 請(qǐng)求的url長(zhǎng)度有限制的
?? ??? ??? ??? ??? ?3. 不太安全
?? ??? ??? ??? ?* POST:
?? ??? ??? ??? ??? ?1. 請(qǐng)求參數(shù)在請(qǐng)求體中
?? ??? ??? ??? ??? ?2. 請(qǐng)求的url長(zhǎng)度沒有限制的
?? ??? ??? ??? ??? ?3. 相對(duì)安全

2. 請(qǐng)求頭

1. User-Agent:瀏覽器告訴服務(wù)器,我訪問你使用的瀏覽器版本信息
?? ??? ??? ??? ?* 可以在服務(wù)器端獲取該頭的信息,解決瀏覽器的兼容性問題

?? ??? ??? ?2. Referer:http://localhost/login.html
?? ??? ??? ??? ?* 告訴服務(wù)器,我(當(dāng)前請(qǐng)求)從哪里來?
?? ??? ??? ??? ??? ?* 作用:
?? ??? ??? ??? ??? ??? ?1. 防盜鏈:
?? ??? ??? ??? ??? ??? ?2. 統(tǒng)計(jì)工作:

3. 請(qǐng)求空行
4. 請(qǐng)求體

* 封裝POST請(qǐng)求消息的請(qǐng)求參數(shù)的

2.2響應(yīng)消息

1. 響應(yīng)行

?1. 組成:協(xié)議/版本 響應(yīng)狀態(tài)碼 狀態(tài)碼描述
?? ?2. 響應(yīng)狀態(tài)碼:服務(wù)器告訴客戶端瀏覽器本次請(qǐng)求和響應(yīng)的一個(gè)狀態(tài)。
?? ??? ?1. 狀態(tài)碼都是3位數(shù)字?
?? ??? ?2. 分類:
?? ??? ??? ?1. 1xx:服務(wù)器就收客戶端消息,但沒有接受完成,等待一段時(shí)間后,發(fā)送1xx多狀態(tài)碼
?? ??? ??? ?2. 2xx:成功。代表:200
?? ??? ??? ?3. 3xx:重定向。代表:302(重定向),304(訪問緩存)
?? ??? ??? ?4. 4xx:客戶端錯(cuò)誤。
?? ??? ??? ??? ?* 代表:
?? ??? ??? ??? ??? ?* 404(請(qǐng)求路徑?jīng)]有對(duì)應(yīng)的資源)?
?? ??? ??? ??? ??? ?* 405:請(qǐng)求方式?jīng)]有對(duì)應(yīng)的doXxx方法
?? ??? ??? ?5. 5xx:服務(wù)器端錯(cuò)誤。代表:500(服務(wù)器內(nèi)部出現(xiàn)異常)

2. 響應(yīng)頭:

1. 格式:頭名稱: 值
?? ?2. 常見的響應(yīng)頭:
?? ??? ?1. Content-Type:服務(wù)器告訴客戶端本次響應(yīng)體數(shù)據(jù)格式以及編碼格式
?? ??? ?2. Content-disposition:服務(wù)器告訴客戶端以什么格式打開響應(yīng)體數(shù)據(jù)
?? ??? ??? ?* 值:
?? ??? ??? ??? ?* in-line:默認(rèn)值,在當(dāng)前頁面內(nèi)打開
?? ??? ??? ??? ?* attachment;filename=xxx:以附件形式打開響應(yīng)體。文件下載

3.響應(yīng)空行

4.響應(yīng)體:傳輸?shù)臄?shù)據(jù)

三.Request


?? ?原理
?? ??? ?request對(duì)象是來獲取請(qǐng)求消息,response對(duì)象是來設(shè)置響應(yīng)消息
?? ?功能
?? ??? ?請(qǐng)求行數(shù)據(jù)
?? ??? ??? ?* GET /day14/demo1?name=zhangsan HTTP/1.1
?? ??? ??? ?* 方法:
?? ??? ??? ??? ?1. 獲取請(qǐng)求方式 :GET
?? ??? ??? ??? ??? ?* String getMethod() ?
?? ??? ??? ??? ?2. (*)獲取虛擬目錄:/day14
?? ??? ??? ??? ??? ?* String getContextPath()
?? ??? ??? ??? ?3. 獲取Servlet路徑: /demo1
?? ??? ??? ??? ??? ?* String getServletPath()
?? ??? ??? ??? ?4. 獲取get方式請(qǐng)求參數(shù):name=zhangsan
?? ??? ??? ??? ??? ?* String getQueryString()
?? ??? ??? ??? ?5. (*)獲取請(qǐng)求URI:/day14/demo1
?? ??? ??? ??? ??? ?* String getRequestURI():?? ??? ?/day14/demo1
?? ??? ??? ??? ??? ?* StringBuffer getRequestURL() ?:http://localhost/day14/demo1

?? ??? ??? ??? ??? ?* URL:統(tǒng)一資源定位符 : http://localhost/day14/demo1?? ?中華人民共和國
?? ??? ??? ??? ??? ?* URI:統(tǒng)一資源標(biāo)識(shí)符 : /day14/demo1?? ??? ??? ??? ??? ?共和國
?? ??? ??? ??? ?
?? ??? ??? ??? ?6. 獲取協(xié)議及版本:HTTP/1.1
?? ??? ??? ??? ??? ?* String getProtocol()

?? ??? ??? ??? ?7. 獲取客戶機(jī)的IP地址:
?? ??? ??? ??? ??? ?* String getRemoteAddr()
?? ??? ?請(qǐng)求頭數(shù)據(jù)
?? ??? ??? ?* 方法:
?? ??? ??? ??? ?* (*)String getHeader(String name):通過請(qǐng)求頭的名稱獲取請(qǐng)求頭的值
?? ??? ??? ??? ?* Enumeration<String> getHeaderNames():獲取所有的請(qǐng)求頭名稱
?? ??? ?請(qǐng)求體數(shù)據(jù)
?? ??? ??? ?* 請(qǐng)求體:只有POST請(qǐng)求方式,才有請(qǐng)求體,在請(qǐng)求體中封裝了POST請(qǐng)求的請(qǐng)求參數(shù)
?? ??? ??? ?* 步驟:
?? ??? ??? ??? ?1. 獲取流對(duì)象
?? ??? ??? ??? ??? ?* ?BufferedReader getReader():獲取字符輸入流,只能操作字符數(shù)據(jù)
?? ??? ??? ??? ??? ?* ?ServletInputStream getInputStream():獲取字節(jié)輸入流,可以操作所有類型數(shù)據(jù)
?? ??? ??? ??? ??? ??? ?* 在文件上傳知識(shí)點(diǎn)后講解

?? ??? ??? ??? ?2. 再從流對(duì)象中拿數(shù)據(jù)
?? ??? ?其他功能
?? ??? ??? ??? ??? ?1. ?不論get還是post請(qǐng)求方式都可以使用下列方法來獲取請(qǐng)求參數(shù)
?? ??? ??? ?1. String getParameter(String name):根據(jù)參數(shù)名稱獲取參數(shù)值 ? ?username=zs&password=123
?? ??? ??? ?2. String[] getParameterValues(String name):根據(jù)參數(shù)名稱獲取參數(shù)值的數(shù)組 ?hobby=xx&hobby=game
?? ??? ??? ?3. Enumeration<String> getParameterNames():獲取所有請(qǐng)求的參數(shù)名稱
?? ??? ??? ?4. Map<String,String[]> getParameterMap():獲取所有參數(shù)的map集合
?? ??? ?中文亂碼問題
?? ??? ??? ??? ?* get方式:tomcat 8 已經(jīng)將get方式亂碼問題解決了
?? ??? ??? ??? ?* post方式:會(huì)亂碼
?? ??? ??? ??? ??? ?* 解決:在獲取參數(shù)前,設(shè)置request的編碼request.setCharacterEncoding("utf-8");
?? ??? ?請(qǐng)求轉(zhuǎn)發(fā)
?? ??? ??? ?1. 通過request對(duì)象獲取請(qǐng)求轉(zhuǎn)發(fā)器對(duì)象:RequestDispatcher getRequestDispatcher(String path)
?? ??? ??? ??? ?2. 使用RequestDispatcher對(duì)象來進(jìn)行轉(zhuǎn)發(fā):forward(ServletRequest request, ServletResponse response)?
?? ??? ??? ? request.getRequestDispatcher("/FailServlet").forward(request,response);
?? ??? ?共享數(shù)據(jù)
?? ??? ??? ?* 域?qū)ο?#xff1a;一個(gè)有作用范圍的對(duì)象,可以在范圍內(nèi)共享數(shù)據(jù)
?? ??? ??? ?* request域:代表一次請(qǐng)求的范圍,一般用于請(qǐng)求轉(zhuǎn)發(fā)的多個(gè)資源中共享數(shù)據(jù)
?? ??? ??? ?* 方法:
?? ??? ??? ??? ?1. void setAttribute(String name,Object obj):存儲(chǔ)數(shù)據(jù)
?? ??? ??? ??? ?2. Object getAttitude(String name):通過鍵獲取值
?? ??? ??? ??? ?3. void removeAttribute(String name):通過鍵移除鍵值對(duì)
?? ??? ??? ?* 注意:這個(gè)放于forward方法的上面,不然響應(yīng)太快會(huì)導(dǎo)致無法獲取信息!
?? ??? ??? ?request.setAttribute("user",user);

User user =(User) request.getAttribute("user");
?? ??? ?獲取SeevletContext
?? ??? ??? ?獲取
?? ??? ??? ??? ??? ?1. 通過request對(duì)象獲取
?? ??? ?request.getServletContext();
?? ?2. 通過HttpServlet獲取
?? ??? ?this.getServletContext();
?? ??? ??? ?概念
?? ??? ??? ??? ?代表整個(gè)web應(yīng)用,可以和程序的容器(服務(wù)器)來通信
?? ??? ??? ?功能
?? ??? ??? ??? ?1.獲取MIME類型
?? ??? ??? ??? ??? ?* MIME類型:在互聯(lián)網(wǎng)通信過程中定義的一種文件數(shù)據(jù)類型
?? ??? ??? ?* 格式: 大類型/小類型 ? text/html?? ??? ?image/jpeg

?? ??? ?* 獲取:String getMimeType(String file) ?
?? ??? ??? ??? ?2. 域?qū)ο?#xff1a;共享數(shù)據(jù)
?? ??? ??? ??? ??? ?1. setAttribute(String name,Object value)
?? ??? ??? ??? ??? ?2. getAttribute(String name)
?? ??? ??? ??? ??? ?3. removeAttribute(String name)
?? ??? ??? ??? ?3. 獲取文件的真實(shí)(服務(wù)器)路徑
?? ??? ??? ??? ??? ?1. 方法:String getRealPath(String path) ?
?? ??? ??? ??? ??? ??? ? String b = context.getRealPath("/b.txt");//web目錄下資源訪問
?? ??? ??? ??? ??? ? ? ? ? ? System.out.println(b);
?? ??? ??? ??? ??? ?
?? ??? ??? ??? ??? ? ? ? ? ?String c = context.getRealPath("/WEB-INF/c.txt");//WEB-INF目錄下的資源訪問
?? ??? ??? ??? ??? ? ? ? ? ?System.out.println(c);
?? ??? ??? ??? ??? ?
?? ??? ??? ??? ??? ? ? ? ? ?String a = context.getRealPath("/WEB-INF/classes/a.txt");//src目錄下的資源訪問
?? ??? ??? ??? ??? ? ? ? ? ?System.out.println(a);

四.Response

功能
?? ?1. 設(shè)置響應(yīng)行
?? ??? ?1. 格式:HTTP/1.1 200 ok
?? ??? ?2. 設(shè)置狀態(tài)碼:setStatus(int sc)?
?? ?2. 設(shè)置響應(yīng)
?? ??? ?
?? ??? ?2. 設(shè)置響應(yīng)頭:setHeader(String name, String value)?
?? ?3. 設(shè)置響應(yīng)體:
?? ??? ?* 使用步驟:
?? ??? ??? ?1. 獲取輸出流
?? ??? ??? ??? ?* 字符輸出流:PrintWriter getWriter()
?? ??? ?
?? ??? ??? ?* 字節(jié)輸出流:ServletOutputStream getOutputStream()
?? ??? ?
?? ??? ??? ?2. 使用輸出流,將數(shù)據(jù)輸出到客戶端瀏覽器
?? ?案例:重定向
?? ??? ?//1. 設(shè)置狀態(tài)碼為302
?? ? ? ? ? ?response.setStatus(302);
?? ??? ?2.設(shè)置響應(yīng)頭location ?response.sendRedirect("/day15/responseDemo2")
?? ?重定向,轉(zhuǎn)發(fā)對(duì)比
?? ??? ??? ??? ?* 重定向的特點(diǎn):redirect
?? ??? ??? ?1. 地址欄發(fā)生變化
?? ??? ??? ?2. 重定向可以訪問其他站點(diǎn)(服務(wù)器)的資源
?? ??? ??? ?3. 重定向是兩次請(qǐng)求。不能使用request對(duì)象來共享數(shù)據(jù)
?? ??? ?* 轉(zhuǎn)發(fā)的特點(diǎn):forward
?? ??? ??? ?1. 轉(zhuǎn)發(fā)地址欄路徑不變
?? ??? ??? ?2. 轉(zhuǎn)發(fā)只能訪問當(dāng)前服務(wù)器下的資源
?? ??? ??? ?3. 轉(zhuǎn)發(fā)是一次請(qǐng)求,可以使用request對(duì)象來共享數(shù)據(jù)

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

總結(jié)

以上是生活随笔為你收集整理的Servlet,HTTP,Ruquest,Response的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。