HttpServletRequest HttpServletResponse Cookie對(duì)象

HttpServletRequest

常用對(duì)象

常用方法?

?獲取請(qǐng)求時(shí)的完整路徑 (從http開始吼蚁,到"?"前面結(jié)束)

System.out.println("獲取請(qǐng)求時(shí)的完整路徑:"? + request.getRequestURL());

獲取請(qǐng)求時(shí)的部分路徑 (從站點(diǎn)名開始谒麦,到"?"前面結(jié)束)

System.out.println("獲取請(qǐng)求時(shí)的部分路徑:" + request.getRequestURI());

?獲取請(qǐng)求時(shí)的參數(shù)字符串 (從"?"開始到最后)

System.out.println("獲取請(qǐng)求時(shí)的參數(shù)字符串:" + request.getQueryString());

?獲取請(qǐng)求類型 (GET|POST)

System.out.println("獲取請(qǐng)求類型:" + request.getMethod());

獲取請(qǐng)求協(xié)議版本? (HTTP/1.1)

System.out.println("獲取請(qǐng)求協(xié)議版本: " +request.getProtocol());

?獲取站點(diǎn)名 (webapp的名稱)

System.out.println("獲取站點(diǎn)名: " +request.getContextPath());



請(qǐng)求亂碼的解決

?亂碼的原因:

?request在解析數(shù)據(jù)時(shí)使用的編碼格式是ISO-8859-1,該編碼本身就不支持中文肯腕。

解決方案:

1、設(shè)置request的解析編碼(只針對(duì)于POST請(qǐng)求有效)

?request.setCharacterEncoding("UTF-8");

?2柏肪、通過new String()將ISO-8859-1的編碼轉(zhuǎn)換為UTF-8

?new String(request.getParamter(name).getBytes("ISO-8859-1"),"UTF-8");

?POST請(qǐng)求 GET請(qǐng)求

?Tomcat8? ? ?????亂碼? ????? ? ? ? ? ? ?不亂碼

?request.setCharacterEncoding("UTF-8"); 不處理

Tomcat7? ? ? ????亂碼? ? ? ? ????????? ?亂碼

request.setCharacterEncoding("UTF-8");? ? ? ? ? ? ? new String(request.getParamter(name).getBytes("ISO-8859-1"),"UTF-8");



請(qǐng)求轉(zhuǎn)發(fā)跳轉(zhuǎn)

? 概念: 請(qǐng)求轉(zhuǎn)發(fā)是一種服務(wù)端的跳轉(zhuǎn)方式召衔,是服務(wù)端行為

?格式:request.getRequestDispatcher("地址").forward(request, response);

特點(diǎn):

1、服務(wù)端行為蘸际,服務(wù)端跳轉(zhuǎn)

?2座哩、瀏覽器的地址不發(fā)生改變

3、從始至終只有一個(gè)請(qǐng)求

4粮彤、請(qǐng)求轉(zhuǎn)發(fā)時(shí)根穷,數(shù)據(jù)可以共享(request對(duì)象共享)


request作用域

?設(shè)置request域?qū)ο?/p>

?request.setAttribute("限域變量名","域變量的值");

? 獲取指定域?qū)ο蟮闹?/p>

? ?request.getAttribute("限域變量名");

? 移除指定域?qū)ο蟮闹?/p>

? ?request.removeAttribute("限域變量名");

設(shè)置在request作用域中的數(shù)據(jù)可以實(shí)現(xiàn)數(shù)據(jù)共享,但只在一次請(qǐng)求中有效导坟,即只在請(qǐng)求轉(zhuǎn)發(fā)跳轉(zhuǎn)有效屿良。


HttpServletResponse

常用方法

?添加響應(yīng)頭

resp.addHeader("userName", "zhangsan");

?判斷響應(yīng)頭是否被設(shè)置

System.out.println(resp.containsHeader("userName"));

System.out.println(resp.containsHeader("userPwd"));

設(shè)置錯(cuò)誤狀態(tài)碼

?resp.sendError(404);

?resp.sendError(404,"由于顏值過低,無法訪問惫周!");

?設(shè)置自動(dòng)刷新

?resp.setHeader("refresh", "2"); // 每?jī)擅胨⑿乱淮?/p>

?設(shè)置固定時(shí)間后跳轉(zhuǎn)到某頁面

resp.setHeader("refresh", "3;URL=http://www.baidu.com"); // 3秒鐘后跳轉(zhuǎn)到百度

響應(yīng)數(shù)據(jù)

?1尘惧、輸出字符流

PrintWriter writer = response.getWriter();

?輸出字符串

?2、輸出字節(jié)流

?ServletOutputStream out = response.getOutputStream();

?輸出任意

? 注意:字符流和字節(jié)流不能同時(shí)使用

? ?java.lang.IllegalStateException: getWriter() has already been called for this response

響應(yīng)類型

?response.setContentType("響應(yīng)類型MIME-TYPE");

?text文本格式:text/plain

?html格式:text/html


響應(yīng)亂碼解決

getWriter()的字符亂碼

對(duì)于 getWriter()獲取到的字符流递递,響應(yīng)中文必定出亂碼喷橙。

由于服務(wù)器端在進(jìn)行編碼時(shí)默認(rèn)會(huì)使用 ISO-8859-1 格式的編碼,該編碼方式并不支持中文漾狼。

getOutputStream()字節(jié)亂碼

對(duì)于 getOutputStream()方式獲取到的字節(jié)流重慢,響應(yīng)中文時(shí),由于本身就是傳輸?shù)淖止?jié)逊躁, 所以此時(shí)可能出現(xiàn)亂碼似踱,也可能正確顯示。

當(dāng)服務(wù)器端給的字節(jié)恰好和客戶端使用的編碼方式一致時(shí)則文本正確顯示,否則出現(xiàn)亂碼核芽。

解決方案:

第一步:設(shè)置服務(wù)端的響應(yīng)編碼格式

response.setCharacterEncoding("UTF-8");

第二步:設(shè)置客戶端的編碼的格式

response.setHeader("content-type","text/html;charset=UTF-8");

總結(jié):

保證發(fā)送端和接收端的編碼一致囚戚;設(shè)置客戶端和服務(wù)端的編碼保持一致,且都支持中文轧简。

同時(shí)設(shè)置客戶端和服務(wù)端的編碼

response.setContentType("text/html;charset=utf-8");

響應(yīng)圖片

設(shè)置響應(yīng)類型

resp.setContentType("image/jpeg");

?getRealPath():得到項(xiàng)目存放在服務(wù)器中位置

String realPath = req.getServletContext().getRealPath("/");

System.out.println(realPath);

?得到圖片存放的路徑?

String filePath = realPath + "/WEB-INF/jay.jpg"; 得到file文件對(duì)象

File file = new File(filePath);

?得到輸出字節(jié)流

ServletOutputStream out = resp.getOutputStream();

?得到文件的輸入流

InputStream in = new FileInputStream(file);

?輸出數(shù)據(jù)

byte[] bytes = new byte[1024];

int len = 0;

while((len=in.read(bytes)) != -1) {

輸出

out.write(bytes, 0, len);

}

刷出流

out.flush();

關(guān)閉流

in.close();

out.close();


重定向

?一種跳轉(zhuǎn)方式驰坊,是一種由服務(wù)端指導(dǎo),客戶端的跳轉(zhuǎn)行為哮独。

流程:當(dāng)有請(qǐng)求到達(dá)服務(wù)器時(shí)拳芙,服務(wù)器接收請(qǐng)求,響應(yīng)給客戶端時(shí)會(huì)向客戶端響應(yīng)一個(gè)新的地址皮璧,客戶端接收到響應(yīng)后舟扎,會(huì)立刻馬上重新發(fā)起一次請(qǐng)求到新的地址,服務(wù)器再接收并接收悴务。

?特點(diǎn):

1睹限、客戶端跳轉(zhuǎn)

2、存在兩次請(qǐng)求

?3讯檐、地址欄會(huì)發(fā)生改變

?4羡疗、數(shù)據(jù)不共享(request對(duì)象不共享)


?請(qǐng)求轉(zhuǎn)發(fā)與重定向的區(qū)別

?1、請(qǐng)求轉(zhuǎn)發(fā)是服務(wù)端跳轉(zhuǎn)别洪,重定向是客戶端跳轉(zhuǎn)

?2叨恨、請(qǐng)求轉(zhuǎn)發(fā)時(shí)地址欄不發(fā)生改變,重定向時(shí)地址欄發(fā)生改變

?3挖垛、請(qǐng)求轉(zhuǎn)發(fā)時(shí)從始至終只有一次請(qǐng)求特碳,重定向時(shí)存在兩次請(qǐng)求

?4、請(qǐng)求轉(zhuǎn)發(fā)時(shí)數(shù)據(jù)可以共享(request對(duì)象和域?qū)ο螅┰位唬囟ㄏ驎r(shí)數(shù)據(jù)不共享

?5、請(qǐng)求轉(zhuǎn)發(fā)時(shí)地址只能定位到當(dāng)前站點(diǎn)下(不能跨域)站宗,重定向時(shí)地址可以是任意地址


請(qǐng)求路徑問題

?相對(duì)路徑

?相對(duì)于當(dāng)前資源所在的路徑

?絕對(duì)路徑

1闸准、以http://開頭的路徑,已經(jīng)跨域梢灭,可以定位到任意地址

?2夷家、以/開頭

?如果是服務(wù)端跳轉(zhuǎn),"/"代表的含義是? http://IP:端口/站點(diǎn)名/

?如果是客戶端跳轉(zhuǎn)敏释,"/"代表的含義是? http://IP:端口/


Cookie對(duì)象

Cookie

?客戶端的緩存技術(shù)库快,瀏覽器技術(shù)。

?作用: 提高網(wǎng)頁效率钥顽,減輕服務(wù)器負(fù)載义屏。

?一、Cookie的創(chuàng)建和發(fā)送

?Cookie的創(chuàng)建:

?Cookie cookie = new Cookie("名稱","值");

?Cookie的發(fā)送:

?response.addCookie(cookie);


Cookie對(duì)象的獲取

返回是cookie數(shù)組

?獲取cookie數(shù)組

Cookie[] cookies = request.getCookies();

判斷非空

if (cookies != null && cookies.length >0) {

遍歷cookie數(shù)組

for (Cookie cookie : cookies) {

System.out.println("名稱:" + cookie.getName() + ",值:" + cookie.getValue());

獲取uname的名稱

if ("uname".equals(cookie.getName())) {

System.out.println("name的值為:" + cookie.getValue());

}

}

}


Cookie到期時(shí)間的設(shè)定

到期時(shí)間闽铐,到期時(shí)間用來指定該 cookie 何時(shí)失效蝶怔。默認(rèn)為當(dāng)前瀏覽器關(guān)閉即失效。

?通過 setMaxAge(int time);方法設(shè)定 cookie 的最大有效時(shí)間兄墅,以秒為單位踢星。

?大于0的整數(shù)

?表示cookie存活指定秒數(shù)

在瀏覽器中存活指定秒數(shù),在時(shí)間未到之前隙咸,cookie會(huì)一直存在沐悦,無論是關(guān)閉瀏覽器還是關(guān)閉電腦,都不影響五督。但是不跨瀏覽器和電腦藏否。

?小于0的整數(shù)

?表示不存儲(chǔ),默認(rèn)關(guān)閉瀏覽器失效

?0

?表示刪除

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末概荷,一起剝皮案震驚了整個(gè)濱河市秕岛,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌误证,老刑警劉巖继薛,帶你破解...
    沈念sama閱讀 222,183評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異愈捅,居然都是意外死亡遏考,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門蓝谨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來灌具,“玉大人,你說我怎么就攤上這事譬巫】ч梗” “怎么了?”我有些...
    開封第一講書人閱讀 168,766評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵芦昔,是天一觀的道長(zhǎng)诱贿。 經(jīng)常有香客問我,道長(zhǎng)咕缎,這世上最難降的妖魔是什么珠十? 我笑而不...
    開封第一講書人閱讀 59,854評(píng)論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮凭豪,結(jié)果婚禮上焙蹭,老公的妹妹穿的比我還像新娘。我一直安慰自己嫂伞,他們只是感情好孔厉,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,871評(píng)論 6 398
  • 文/花漫 我一把揭開白布拯钻。 她就那樣靜靜地躺著,像睡著了一般烟馅。 火紅的嫁衣襯著肌膚如雪说庭。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,457評(píng)論 1 311
  • 那天郑趁,我揣著相機(jī)與錄音刊驴,去河邊找鬼。 笑死寡润,一個(gè)胖子當(dāng)著我的面吹牛捆憎,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播梭纹,決...
    沈念sama閱讀 40,999評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼躲惰,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了变抽?” 一聲冷哼從身側(cè)響起础拨,我...
    開封第一講書人閱讀 39,914評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎绍载,沒想到半個(gè)月后诡宗,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,465評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡击儡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,543評(píng)論 3 342
  • 正文 我和宋清朗相戀三年塔沃,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片阳谍。...
    茶點(diǎn)故事閱讀 40,675評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡蛀柴,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出矫夯,到底是詐尸還是另有隱情鸽疾,我是刑警寧澤,帶...
    沈念sama閱讀 36,354評(píng)論 5 351
  • 正文 年R本政府宣布训貌,位于F島的核電站肮韧,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏旺订。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,029評(píng)論 3 335
  • 文/蒙蒙 一超燃、第九天 我趴在偏房一處隱蔽的房頂上張望区拳。 院中可真熱鬧,春花似錦意乓、人聲如沸樱调。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽笆凌。三九已至圣猎,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間乞而,已是汗流浹背送悔。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評(píng)論 1 274
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留爪模,地道東北人欠啤。 一個(gè)月前我還...
    沈念sama閱讀 49,091評(píng)論 3 378
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像屋灌,于是被迫代替她去往敵國(guó)和親洁段。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,685評(píng)論 2 360

推薦閱讀更多精彩內(nèi)容