本文包括:
out(常用)
request(重點)
response(重點)
get與post(難點)
請求重定向與請求轉(zhuǎn)發(fā)(難點)
JSP內(nèi)置對象簡介
-
JSP內(nèi)置對象是Web容器創(chuàng)建的一組對象称诗,【不使用new關(guān)鍵字】就可以使用的內(nèi)置對象萍悴。
-
例如:
-
-
JSP九大內(nèi)置對象:
out、request寓免、response癣诱、session、application(五大常用對象)
Page袜香、pageContext狡刘、exception、config(四個不太常用對象)
1困鸥、out(常用)
1.1嗅蔬、什么是緩沖區(qū)?
緩沖區(qū):Buffer疾就,所謂緩沖區(qū)就是內(nèi)存的一塊區(qū)域用來保存臨時數(shù)據(jù)澜术。
比如:IO輸出最原始的就是一個字節(jié)一個字節(jié)輸出,就像一粒一粒吃一樣猬腰,效率太差鸟废。緩沖區(qū)可以先將多個字節(jié)讀出來,再一次性的輸出姑荷,提高效率盒延。
1.2、out對象
out對象是JspWriter類的實例鼠冕,是向客戶端(這里指瀏覽器)輸出內(nèi)容的常用對象添寺。
-
常用方法:
2、request(重點)
2.1懈费、request對象
-
介紹與方法
2.2计露、示例:String[] getParameterValues(String name)
-
方法比較:
String getParameter(String name)//獲取單個參數(shù)值
String[] getParameterValues(String name)//獲取多個參數(shù)值(獲得提交參數(shù)具有相同名稱的集合),如獲取checkbox的值
-
比如這個注冊表單:
-
數(shù)據(jù)提交到request.jsp頁面:
-
運行結(jié)果:
2.3、示例:setAttribute()\getAttribute()
-
方法比較:
setAttribute()設(shè)置屬性時是以鍵值對的形式
getAttribute()獲取屬性只需要輸入鍵的值票罐,就可以獲得屬性的值叉趣。
-
示例:
2.4、示例:其他參數(shù)
-
方法:
請求體的MIME類型:<%=request.getContentType() %>
協(xié)議類型及版本號:<%=request.getProtocol() %>
服務(wù)器主機名:<%=request.getServerName() %>
服務(wù)器端口號:<%=request.getServerPort() %>
請求文件的長度:<%=request.getContentLength() %>
請求客戶端的IP地址:<%=request.getRemoteAddr() %>
請求的真實路徑:<%=request.getRealPath("request.jsp") %>
請求的上下文路徑:<%=request.getContextPath() %>
-
運行結(jié)果
2.5该押、解決url傳中文參數(shù)出現(xiàn)亂碼問題:
-
表單post方式:
-
解決措施:
request.setCharacterEncoding(“utf-8”);//解決post請求傳遞中文參數(shù)的亂碼問題疗杉,設(shè)置的編碼要與發(fā)送請求的頁面的編碼設(shè)置的一致。但是無法解決URL鏈接傳遞中文參數(shù)的亂碼問題蚕礼。
-
URL傳值(get)方式:
-
解決措施:
URL傳中文參數(shù)不能用setCharacterEncoding("utf-8")解決乡数,可通過修改TOMCAT的conf文件夾下server.xml解決,在connector標(biāo)簽添加屬性URIEncoding="utf-8"闻牡。tomcat > conf> server.xml
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="utf-8" />
3净赴、response(重點)
3.1、response對象
response對象具有頁面作用域罩润,即訪問一個頁面時玖翅,該頁面的response對象只對本次訪問有效,其他頁面的response對象對當(dāng)前頁面無效割以。
-
常用方法
String setCharacterEncoding()//設(shè)置響應(yīng)字符編碼格式
String getCharacterEncoding()//獲取響應(yīng)字符編碼格式
void setContentType(String type)//設(shè)置響應(yīng)MIME類型
sendRedirect(java.lang.String location)//請求重定向
PrintWriter getWriter()//獲取打印輸出對象
注意:PrintWriter對象的輸出先于內(nèi)置out對象
解決方法:
out.println();
out.flush();//清空緩沖區(qū)并將緩沖區(qū)內(nèi)容輸出到瀏覽器金度,這樣就可以先輸出out,再輸出PrintWriter(即按照代碼順序執(zhí)行)
PrintWriter outer=response.getWriter();
outer.println();
4严沥、get與post(難點)
表單有兩種提交方式:get與post猜极。
-
定義方式如下所示:
<form action="dologin.jsp" name="loginForm" method="提交方式***"></form>
-
特點:
get:以【明文】方式,通過URL提交數(shù)據(jù)消玄,數(shù)據(jù)在URL中可以看到跟伏。提交數(shù)據(jù)最多不超過【2KB】。安全性較低翩瓜,但效率比post方式高受扳。適合提交數(shù)據(jù)量不大,且安全要求不高的數(shù)據(jù):比如:搜索兔跌、查詢等功能勘高。
post:將用戶提交的信息封裝在HTML HEADER內(nèi),數(shù)據(jù)在URL中【不能看到】適合提交數(shù)據(jù)量大坟桅,安全性高的用戶信息华望。如:注冊、修改仅乓、上傳等功能赖舟。
區(qū)別:
post隱式提交,get顯示提交
post安全方灾,get不安全
get提交數(shù)據(jù)的長度有限(255字符之內(nèi))建蹄,post無限
什么情況下是GET提交,什么情況下又是POST提交呢裕偿?
-
GET提交:
1)洞慎、默認(rèn)的表單提交方法2)、以“<A(括回)”鏈接的方法提交數(shù)據(jù)
3)嘿棘、直接在地址欄的URL中追加數(shù)據(jù)
4)劲腿、js中使用location.href='xxxxx';
-
POST提交:
1)、顯示指定表單的method為POST鸟妙,絕大多數(shù)的表單都采用POST提交焦人,只有向Baidu、Google這樣的搜索引擎才采用GET方法提交
編碼格式轉(zhuǎn)換
-
post請求編碼格式轉(zhuǎn)換:
request.setCharacterEncoding("utf-8");
-
get請求編碼格式轉(zhuǎn)換:
String s=request.getParament(“stu”); String str=new String(s.getBytes(“iso8859-1”),“utf-8”);
5重父、請求重定向與請求轉(zhuǎn)發(fā)(難點)
-
請求重定向:
response.sendRedirect("xx.jsp");//重定向
【客戶端行為】:即客戶端會訪問兩次花椭,第一次訪問后會立即跳轉(zhuǎn)到第二個重定向頁面上,【從本質(zhì)上講等于兩次請求】房午,而前一次的請求封裝的request對象不會保存矿辽,地址欄的URL地址會改變。
-
請求轉(zhuǎn)發(fā):
request.getRequestDispatcher("xx.jsp").forward(request,response);//請求轉(zhuǎn)發(fā)
forward(request,response)用于保存內(nèi)置對象request和response郭厌。
【服務(wù)器行為】:服務(wù)器會代替客戶端去訪問轉(zhuǎn)發(fā)頁面袋倔,【從本質(zhì)是一次請求】,轉(zhuǎn)發(fā)后請求對象會保存折柠,地址欄的URL地址不會改變宾娜。 -
區(qū)別
請求重定向從本質(zhì)上講等于兩次請求,而請求轉(zhuǎn)發(fā)從本質(zhì)上將等于一次請求扇售。
轉(zhuǎn)發(fā)是在服務(wù)器端發(fā)揮作用前塔,通過forward方法將提交信息在多個頁面間進(jìn)行傳遞。
轉(zhuǎn)發(fā)是在服務(wù)器內(nèi)部控制權(quán)的轉(zhuǎn)移承冰,客戶端瀏覽器的地址欄不會顯示出轉(zhuǎn)向后的地址嘱根,即地址欄URL不變。
重定向是通過瀏覽器重新請求地址巷懈,在地址欄中可以顯示轉(zhuǎn)向后的地址该抒,即地址欄URL會變。
-
形象解釋: