5.Servlet 对象(request-response)
?
/*ServletResponse*/
/*responese常見應(yīng)用*/
1.向客戶端輸出中文數(shù)據(jù) (分別以O(shè)utputStream 和 PrintWriter輸出)?
2.文件下載和中文文件的下載 ( /*ResponseDemo3*/)
3.完成類似驗證碼的功能 (輸出一張隨機圖片)
4.用refresh控制瀏覽器自動刷新?
5.控制瀏覽器緩存(保存一定時間)
6.實現(xiàn)重定向 (一般能不采用 就 不采用)(因為重定向是轉(zhuǎn)到其他地址,所以重定向的地址需要比 轉(zhuǎn)發(fā) 的地址 /*多上web應(yīng)用名稱*/)
?
Response的小細節(jié):
1.getOutputStream 和 getWriter方法分別用于得到輸出二進制數(shù)據(jù)、輸出文本數(shù)據(jù)的ServletOutputStream、PrintWriter對象
2.getOutputStream 和 getWriter 這兩個方法互相排斥,調(diào)用了其中的任何一個方法后,就不能再調(diào)用另外一個方法
(轉(zhuǎn)到另外的頁面上,如果是通過重定向轉(zhuǎn)的,就可以同時使用(因為重定向 向服務(wù)器發(fā)送了兩次請求,有兩個response,兩次調(diào)用的是不同的))
3.Servlet的service方法結(jié)束后,Servlet引擎將檢查getWriter或getOutputStream方法返回的輸出流對象是否已經(jīng)調(diào)用過close方法。
如果沒有,Servlet引擎將調(diào)用close方法關(guān)閉輸出流對象。
(即程序里面可以不用去 close )
4./*Request*/
request的常用方法:
(獲得客戶機信息) (URL(網(wǎng)絡(luò)上的web應(yīng)用)和URI(所有web應(yīng)用)的關(guān)系 : 狗和動物)
getRequestURL 返回客戶端發(fā)出請求時的完整URL
getRequestURI 返回請求行中的資源名部分
getQueryString 返回請求行中的參數(shù)部分
getRemoteAddr 返回發(fā)出請求的客戶機的IP地址
getRemoteHost 返回發(fā)出請求的客戶機的完整主機名
getRemotePort 返回客戶機所使用的網(wǎng)絡(luò)端口號
getLocalAddr 返回web服務(wù)器的IP地址
getLocalName 返回web服務(wù)器的主機名
getMethod 得到客戶機請求方式
/*request獲取請求頭和請求數(shù)據(jù) RequestDemo2 test.html*/
/*通過表單搜集用戶數(shù)據(jù)*/ /*主要是HTML方面的 暫時先不寫了*/
/*request亂碼問題*/
通過表單提交中文字符產(chǎn)生的亂碼問題 : 1. get(手工) 2.post
通過超鏈接提交中文字符 : 想要避免亂碼問題 (手工)
?
/*MVC設(shè)計*/ //MVC (m model (javabaen) ; v view (jsp) ; c controller (servlet) ) 處理請求的是處理請求的 封裝數(shù)據(jù)的是封裝數(shù)據(jù)的 顯示數(shù)據(jù)的是顯示數(shù)據(jù)的
servlet收到請求 返回數(shù)據(jù),數(shù)據(jù)封裝到j(luò)avabean中,javabean中的數(shù)據(jù)存到request域中,通過轉(zhuǎn)發(fā)(forword)技術(shù)將轉(zhuǎn)到j(luò)sp頁面,jsp頁面從request域中取出數(shù)據(jù)顯示
請求轉(zhuǎn)發(fā)的細節(jié): ( /*只有在客戶端沒有輸出時,才可以調(diào)用forword方法*/)
1.forword方法用于將請求轉(zhuǎn)發(fā)到 RequestDispatcher 對象封裝的資源
2.如果在forword方法之前,在servlet程序?qū)懭氲牟糠謨?nèi)容已經(jīng)被真正傳遞到了客戶端 (流的關(guān)閉以及多個forword跳轉(zhuǎn)都可能導(dǎo)致),forword方法將拋出異常?
3.如果在調(diào)用forword方法之前,向servlet引擎的緩沖區(qū)(response)中寫入了內(nèi)容,只要寫入到緩沖區(qū)的內(nèi)容還沒有真正輸出到客戶端,
forword方法就可以被正常執(zhí)行,原來寫入到輸入緩沖區(qū)的內(nèi)容將被清空
例:String value = "aaaa";
response.getWriter().write(value); //此時 數(shù)據(jù)還沒有寫入到客戶機中,如果這個時候forword的話,response中的內(nèi)容將被清空,轉(zhuǎn)發(fā)正常執(zhí)行
request.getRequestDispatcher("/index.jsp").forward(request, response);
?
request實現(xiàn)頁面包含 (用include實現(xiàn)頁面包含(包含一些公共的頁面) ,一般不使用,因為這是動態(tài)包含(一般在jsp中做靜態(tài)包含更好 ))?
1 //用include實現(xiàn)頁面包含(包含一些公共的頁面) (一般在jsp中做包含 ) 2 public class RequestDemo6 extends HttpServlet { 3 4 public void doGet(HttpServletRequest request, HttpServletResponse response) 5 throws ServletException, IOException { 6 7 request.getRequestDispatcher("/public/Head.jsp").include(request, response); 8 String value = "body"; 9 response.getWriter().write(value); 10 request.getRequestDispatcher("/public/Foot.jsp").include(request, response); 11 } 12 13 public void doPost(HttpServletRequest request, HttpServletResponse response) 14 throws ServletException, IOException { 15 doGet(request, response); 16 } 17 18 }?
?
web工程中各類地址的寫法( /*看地址是給誰用的*/)
?
利用referer防盜鏈
//利用referer防盜鏈 public class RequestDemo7 extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {String referer = request.getHeader("referer");if(referer == null || !referer.startsWith("localhost")) { //如果頁面時直接訪問,沒有經(jīng)過跳轉(zhuǎn)||或者不是以localhost開頭response.sendRedirect("/day06/index.jsp");return;}String data = "日記";response.getWriter().write(data);}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);}}?
轉(zhuǎn)載于:https://www.cnblogs.com/xuzekun/p/7356872.html
總結(jié)
以上是生活随笔為你收集整理的5.Servlet 对象(request-response)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《妖猫传》大唐盛世背后那些事
- 下一篇: centos提示找不到netstat 和