5.Servlet 对象(request-response)
?
/*ServletResponse*/
/*responese常見應用*/
1.向客戶端輸出中文數據 (分別以OutputStream 和 PrintWriter輸出)?
2.文件下載和中文文件的下載 ( /*ResponseDemo3*/)
3.完成類似驗證碼的功能 (輸出一張隨機圖片)
4.用refresh控制瀏覽器自動刷新?
5.控制瀏覽器緩存(保存一定時間)
6.實現重定向 (一般能不采用 就 不采用)(因為重定向是轉到其他地址,所以重定向的地址需要比 轉發 的地址 /*多上web應用名稱*/)
?
Response的小細節:
1.getOutputStream 和 getWriter方法分別用于得到輸出二進制數據、輸出文本數據的ServletOutputStream、PrintWriter對象
2.getOutputStream 和 getWriter 這兩個方法互相排斥,調用了其中的任何一個方法后,就不能再調用另外一個方法
(轉到另外的頁面上,如果是通過重定向轉的,就可以同時使用(因為重定向 向服務器發送了兩次請求,有兩個response,兩次調用的是不同的))
3.Servlet的service方法結束后,Servlet引擎將檢查getWriter或getOutputStream方法返回的輸出流對象是否已經調用過close方法。
如果沒有,Servlet引擎將調用close方法關閉輸出流對象。
(即程序里面可以不用去 close )
4./*Request*/
request的常用方法:
(獲得客戶機信息) (URL(網絡上的web應用)和URI(所有web應用)的關系 : 狗和動物)
getRequestURL 返回客戶端發出請求時的完整URL
getRequestURI 返回請求行中的資源名部分
getQueryString 返回請求行中的參數部分
getRemoteAddr 返回發出請求的客戶機的IP地址
getRemoteHost 返回發出請求的客戶機的完整主機名
getRemotePort 返回客戶機所使用的網絡端口號
getLocalAddr 返回web服務器的IP地址
getLocalName 返回web服務器的主機名
getMethod 得到客戶機請求方式
/*request獲取請求頭和請求數據 RequestDemo2 test.html*/
/*通過表單搜集用戶數據*/ /*主要是HTML方面的 暫時先不寫了*/
/*request亂碼問題*/
通過表單提交中文字符產生的亂碼問題 : 1. get(手工) 2.post
通過超鏈接提交中文字符 : 想要避免亂碼問題 (手工)
?
/*MVC設計*/ //MVC (m model (javabaen) ; v view (jsp) ; c controller (servlet) ) 處理請求的是處理請求的 封裝數據的是封裝數據的 顯示數據的是顯示數據的
servlet收到請求 返回數據,數據封裝到javabean中,javabean中的數據存到request域中,通過轉發(forword)技術將轉到jsp頁面,jsp頁面從request域中取出數據顯示
請求轉發的細節: ( /*只有在客戶端沒有輸出時,才可以調用forword方法*/)
1.forword方法用于將請求轉發到 RequestDispatcher 對象封裝的資源
2.如果在forword方法之前,在servlet程序寫入的部分內容已經被真正傳遞到了客戶端 (流的關閉以及多個forword跳轉都可能導致),forword方法將拋出異常?
3.如果在調用forword方法之前,向servlet引擎的緩沖區(response)中寫入了內容,只要寫入到緩沖區的內容還沒有真正輸出到客戶端,
forword方法就可以被正常執行,原來寫入到輸入緩沖區的內容將被清空
例:String value = "aaaa";
response.getWriter().write(value); //此時 數據還沒有寫入到客戶機中,如果這個時候forword的話,response中的內容將被清空,轉發正常執行
request.getRequestDispatcher("/index.jsp").forward(request, response);
?
request實現頁面包含 (用include實現頁面包含(包含一些公共的頁面) ,一般不使用,因為這是動態包含(一般在jsp中做靜態包含更好 ))?
1 //用include實現頁面包含(包含一些公共的頁面) (一般在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")) { //如果頁面時直接訪問,沒有經過跳轉||或者不是以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);}}?
轉載于:https://www.cnblogs.com/xuzekun/p/7356872.html
總結
以上是生活随笔為你收集整理的5.Servlet 对象(request-response)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《妖猫传》大唐盛世背后那些事
- 下一篇: Java高效入门方法_萝魏紫