jsp 中request與response的用法詳解
概要:
在學(xué)習(xí)這兩個(gè)對(duì)象之前,我們應(yīng)該已經(jīng)有了http協(xié)議的基本了解了,如果不清楚http協(xié)議的可以看我的關(guān)于http協(xié)議的介紹。因?yàn)槠鋵?shí)request和response的使用大部分都是對(duì)http協(xié)議的操作。
request對(duì)象的介紹
我們先從request對(duì)象進(jìn)行介紹:
我們知道http協(xié)議定義了請(qǐng)求服務(wù)器的格式:
請(qǐng)求行
請(qǐng)求頭
空格
請(qǐng)求體(get請(qǐng)求沒(méi)有請(qǐng)求體)
好了,這里我們就不詳細(xì)介紹了,我們只看幾個(gè)應(yīng)用就可以了,沒(méi)什么難度:
應(yīng)用1 獲取請(qǐng)求頭
/** * 獲取http請(qǐng)求頭 * string getheader(string name),適用于單值頭 * int getintheader(string name),適用于單值int類(lèi)型的請(qǐng)求頭 * long getdateheader(string name),適用于單值毫秒類(lèi)型的請(qǐng)求頭 * enumeration<string> getheaders(string name),適用于多值請(qǐng)求頭 * * */ public class cservlet extends httpservlet { public void doget(httpservletrequest request, httpservletresponse response) throws servletexception, ioexception { string ip = request.getremoteaddr();//獲取ip地址 string method = request.getmethod();//獲取請(qǐng)求方式 system.out.println(ip); system.out.println(method); getliulanqi(request); protectmethod(request, response); } //防盜鏈 public void protectmethod(httpservletrequest request, httpservletresponse response) { string url = request.getheader("referer"); system.out.println(url); if(url != null && url.equalsignorecase("http://localhost:8080/day10/myhtml.html") ) { system.out.println("hi"); } else { response.setstatus(302); response.setheader("location","/day10/myhtml.html"); system.out.println("重定向"); } } //判斷瀏覽器的類(lèi)型 public void getliulanqi(httpservletrequest request) { string user = request.getheader("user-agent"); if(user != null) { string usernoc = user.tolowercase(); if(usernoc.contains("chrome")) { system.out.println("瀏覽器類(lèi)型:谷歌" ); } else if(usernoc.contains("firefox/")) { system.out.println("瀏覽器類(lèi)型:火狐"); } else { system.out.println("瀏覽器類(lèi)型:ie"); } } else { system.out.println("null"); } } }
應(yīng)用2獲取url路徑
/** * 獲取請(qǐng)求url http://localhost:8080/day10_2/aservlet?username=xxx&password=yyy > string getscheme():獲取協(xié)議,http > string getservername():獲取服務(wù)器名,localhost > string getserverport():獲取服務(wù)器端口,8080 > *****string getcontextpath():獲取項(xiàng)目名,/day10_2 > string getservletpath():獲取servlet路徑,/aservlet > string getquerystring():獲取參數(shù)部分,即問(wèn)號(hào)后面的部分。username=xxx&password=yyy > string getrequesturi():獲取請(qǐng)求uri,等于項(xiàng)目名+servlet路徑。/day10_2/aservlet > string getrequesturl():獲取請(qǐng)求url,等于不包含參數(shù)的整個(gè)請(qǐng)求路徑。http://localhost:8080/day10_2/aservlet * * */ public class dservlet extends httpservlet { public void doget(httpservletrequest request, httpservletresponse response) throws servletexception, ioexception { system.out.println(request.getscheme()); system.out.println(request.getservername()); system.out.println(request.getserverport()); system.out.println(request.getcontextpath()); system.out.println(request.getservletpath()); system.out.println(request.getquerystring()); system.out.println(request.getrequesturi()); system.out.println(request.getrequesturl()); } }
應(yīng)用3獲取請(qǐng)求參數(shù)
/** * * 請(qǐng)求參數(shù):有一個(gè)參數(shù)一個(gè)值的,還有一個(gè)參數(shù)多個(gè)值! > *****string getparameter(string name):獲取指定名稱(chēng)的請(qǐng)求參數(shù)值,適用于單值請(qǐng)求參數(shù) > string[] getparametervalues(string name):獲取指定名稱(chēng)的請(qǐng)求參數(shù)值,適用于多值請(qǐng)求參數(shù) > enumeration<string> getparameternames():獲取所有請(qǐng)求參數(shù)名稱(chēng) > *****map<string,string[]> getparametermap():獲取所有請(qǐng)求參數(shù),其中key為參數(shù)名,value為參數(shù)值。 * */ public class eservlet extends httpservlet { public void doget(httpservletrequest request, httpservletresponse response) throws servletexception, ioexception { dopost(request,response); } public void dopost(httpservletrequest request, httpservletresponse response) throws servletexception, ioexception { request.setcharacterencoding("utf-8");//調(diào)用他來(lái)解決亂碼問(wèn)題的,不會(huì)的可以看我寫(xiě)的解決亂碼的那一篇 string name = request.getparameter("name"); string password = request.getparameter("password"); string[] aihao = request.getparametervalues("aihao"); response.setheader("content-type", "text/html;charset=utf-8"); printwriter pw = response.getwriter(); pw.println("name:" + name + "<br/>"); pw.println("password:" + password + "<br/>"); pw.print("aihao"); for (int i = 0; i < aihao.length; i++) { switch (i) { case 1: pw.print("吃飯"); break; case 2: pw.print("睡覺(jué)"); break; case 3: pw.print("打豆豆"); break; default: break; } } pw.close(); } }
<!-- 用于發(fā)送請(qǐng)求的html --> <html> <head> <title>denglu.html</title> <meta http-equiv="content-type" content="text/html; charset=utf-8"> </head> <body> <form action="/day10/eservlet" method="post"><!-- 通過(guò)post方法提交 --> 姓名:<input type="text" name="name"/><br/> 密碼:<input type="password" name="password"><br/> 愛(ài)好:<input type="checkbox" name="aihao" value="1"/>吃飯 <input type="checkbox" name="aihao" value="2"/>睡覺(jué) <input type="checkbox" name="aihao" value="3"/>打豆豆 <input type="submit" value="提交"> </form> </body> </html>
應(yīng)用4設(shè)置request對(duì)象屬性
用來(lái)實(shí)現(xiàn)同一個(gè)應(yīng)用程序servlet之間值得傳遞,我們還用到了轉(zhuǎn)發(fā)
/** * ** request域 servlet中三大域?qū)ο螅簉equest、session、application,都有如下三個(gè)方法: > void setattribute(string name, object value) > object getattribute(string name) > void removeattribute(string name); > 同一請(qǐng)求范圍內(nèi)使用request.setattribute()、request.getattribute()來(lái)傳值!前一個(gè)servlet調(diào)用setattribute()保存值,后一個(gè)servlet調(diào)用getattribute()獲取值。 * */ public class fservlet extends httpservlet { public void doget(httpservletrequest request, httpservletresponse response) throws servletexception, ioexception { request.setattribute("name","weijinhao"); request.setattribute("password", "123"); requestdispatcher rd = request.getrequestdispatcher("/gservlet"); rd.forward(request, response); } }
public class gservlet extends httpservlet { public void doget(httpservletrequest request, httpservletresponse response) throws servletexception, ioexception { string name = (string)request.getattribute("name"); string password = (string)request.getattribute("password"); response.setheader("content-type", "text/html;charset=utf-8"); printwriter pw = response.getwriter(); pw.println("name:" + name + "<br/>"); pw.println("password:" + password + "<br/>"); pw.close(); } }
好了,request的用法大致就是這摸多了。
讓我們來(lái)看看response對(duì)象吧。
response對(duì)象的使用
http協(xié)議定義了響應(yīng)瀏覽器的格式:
響應(yīng)行
響應(yīng)頭
空格
響應(yīng)體
response對(duì)象的大致應(yīng)用是用在設(shè)置響應(yīng)碼,設(shè)置響應(yīng)頭,及設(shè)置響應(yīng)正文。
應(yīng)用1設(shè)置響應(yīng)正文
/** * response的正文 * 1,字符流 * 2,字節(jié)流 */ public void doget(httpservletrequest request, httpservletresponse response) throws servletexception, ioexception { //string n = "hello javaweb"; //byte[] b = n.getbytes(); //字節(jié)流的使用 /*servletoutputstream outputstream = response.getoutputstream(); outputstream.write(b); outputstream.close();*/ //字符流的使用 /*printwriter p = response.getwriter(); p.write(n); p.close();*/ //commoms工具包的使用 fileinputstream fileinputstream = new fileinputstream("c:/users/74087/desktop/6226354_994604.jpg"); byte[] b = ioutils.tobytearray(fileinputstream); servletoutputstream outputstream = response.getoutputstream(); outputstream.write(b); outputstream.close(); } }
應(yīng)用2 設(shè)置響應(yīng)碼和響應(yīng)頭
/** *response 的響應(yīng)碼 *1, senderror(int sc)//發(fā)送錯(cuò)誤代碼 *2, senderror(int sc, java.lang.string msg) //發(fā)送錯(cuò)誤代碼及描述 *3, setstatus(int sc) //發(fā)送成功響應(yīng)代碼 *response 的響應(yīng)頭 *1, setdateheader(java.lang.string name, long date) *2, setheader(java.lang.string name, java.lang.string value) *3, setintheader(java.lang.string name, int value) * 下面的和上面的作用一樣但是是為了進(jìn)行多值的添加 * adddateheader(java.lang.string name, long date) * addheader(java.lang.string name, java.lang.string value) * addintheader(java.lang.string name, int value) */ public void doget(httpservletrequest request, httpservletresponse response) throws servletexception, ioexception { //sendnum(response); //sendre(response); //refresh(response); //nocache(response); } //禁用瀏覽器緩存 public void nocache(httpservletresponse response) { response.setheader("cache-control","no-cache"); response.setheader("pragma","0"); response.setheader("expires","no-cache"); } //自動(dòng)跳轉(zhuǎn) public void refresh(httpservletresponse response) { response.setheader("refresh", "5;url=http://www.baidu.com"); } //重定向的使用 public void sendre(httpservletresponse response) { response.setstatus(302); response.setheader("location", "http://www.baidu.com"); } public void sendnum(httpservletresponse response) throws ioexception { response.setstatus(200); response.senderror(404); response.senderror( 404, "ser accept your request but i don't want to you see my web page"); } }
如有疑問(wèn)請(qǐng)留言或者到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
- jsp+servlet實(shí)現(xiàn)文件上傳與下載功能
- EJB3.0部署消息驅(qū)動(dòng)Bean拋javax.naming.NameNotFoundException異常
- 在JSP中使用formatNumber控制要顯示的小數(shù)位數(shù)方法
- 秒殺系統(tǒng)Web層設(shè)計(jì)的實(shí)現(xiàn)方法
- 將properties文件的配置設(shè)置為整個(gè)Web應(yīng)用的全局變量實(shí)現(xiàn)方法
- JSP使用過(guò)濾器防止Xss漏洞
- 在JSP頁(yè)面中動(dòng)態(tài)生成圖片驗(yàn)證碼的方法實(shí)例
- 詳解JSP 內(nèi)置對(duì)象request常見(jiàn)用法
- 使用IDEA編寫(xiě)jsp時(shí)EL表達(dá)式不起作用的問(wèn)題及解決方法
- jsp實(shí)現(xiàn)局部刷新頁(yè)面、異步加載頁(yè)面的方法
- Jsp中request的3個(gè)基礎(chǔ)實(shí)踐
- JavaServlet的文件上傳和下載實(shí)現(xiàn)方法
- JSP頁(yè)面的靜態(tài)包含和動(dòng)態(tài)包含使用方法