麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發設計 > 正文

java攻城師之路--復習java web之request_respone

2019-11-14 21:13:23
字體:
來源:轉載
供稿:網友
java攻城師之路--復習java web之request_respone

Servlet技術 兩條主線1、HTTP協議 2、Servlet生命周期

init() 方法中參數 ServletConfig 對象使用通過ServletConfig 獲得 ServletContext對象 使用

service方法 含有兩個參數對象 ServletRequest ServletResponse 在實際開發Servlet過程中 不需要覆蓋service ---- HttpServlet 根據請求方式自動調用doGet 或者 doPost doGet和doPost參數 HttpServletRequest 和 HttpServletResponse

今天學習重點:HttpServletRequest HttpServletResponse

客戶端每次請求 都會創建request對象和response對象 ------ 被傳遞service / doGet /doPost

HttpServletRequest封裝 客戶端相關信息,服務器Servlet程序可以通過request對象 操作客戶端信息HttpServletResponse 封裝服務器 向客戶端發送響應數據信息,Servlet程序 通過response對象向客戶端發送響應

response常用 APIsetStatus 設置響應行 當中 狀態碼setHeader 設置響應頭信息getOutputStream 獲得字節流 ---- 輸出響應體內容getWriter 獲得字符流 ---- 輸出響應體內容

* HttpServletResponse 繼承 ServletResponse 接口 ,ServletResponse 并沒有提供與HTTP協議相關API ,HttpServletResponse 添加了與協議相關 API* JavaEE API 中并沒有提供 HttpServletResponse 實現類 ---- 實現類由tomcat服務器提供的

常用狀態碼 : 200 302 304 404 500 200 請求處理成功302 客戶端重定向304 客戶端訪問資源沒有被修改,客戶端訪問本地緩存404 訪問資源不存在500 服務器內部出錯

案例一:通過302 + Location 頭信息實現頁面重定向效果 response.setStatus(302);response.setHeader("Location", "/day06/welcome.html"); // 相對路徑 和 絕對路徑* / 由客戶端定向服務器,代表客戶端 / , 必須添加工程虛擬目錄

 1     public void doGet(HttpServletRequest request, HttpServletResponse response) 2             throws ServletException, IOException { 3         ServletContext  sc = getServletContext(); 4         int time=(Integer)sc.getAttribute("times"); 5          time++; 6          sc.setAttribute("times", time); 7          System.out.xml中設置的訪問虛擬路徑10          response.setHeader("Location", "/day03/count");11     }
設置客戶端請求重定向,必須添加工程虛擬目錄

頭信息存在多個值Accept-Encoding: gzip, deflate --- key:value1,value2 response.addHeader 用于設置響應頭有多個值 ------ 不常用 重點:setHeader

在Response API 中提供sendRedirect ---- 完成302+Location重定向效果 例如: response.sendRedirect("/day06/welcome.html");

案例二: 登陸重定向

 1     public void doGet(HttpServletRequest request, HttpServletResponse response) 2             throws ServletException, IOException { 3         String name = request.getParameter("username"); 4         String passWord = request.getParameter("password"); 5         if (name.equals("admin")&&password.equals("admin")) { 6         //    response.setStatus(302); 7         //    response.setHeader("Location", "/day04/response/Welcome.html"); 8             response.sendRedirect("/day04/response/Welcome.html"); 9         }else{10         //    response.setStatus(302);11         //    response.setHeader("Location", "/day04/loggin.html");12             //sendRedirect()它綜合了setStatus(302)+setHeader的效果13             response.sendRedirect("/day04/loggin.html");14         }15     }
使用response.sendRedirect實現登錄重定向

案例三: 自動刷新網頁 * 登陸成功,5秒后自動跳轉XX頁面 原理:通過refresh 頭信息 格式 ----- refresh: 時間;url=跳轉路徑例如: refresh:3;url=http://www.itcast.cn -------- 3秒后自動跳轉http://www.itcast.cn 網站

* HTML 頁面中存在一類非常特殊標簽 <meta> ,<meta> 起到設置頭信息作用 <meta content="3;url=/day06/response/demo3/result.html" http-equiv="refresh"> ---- 完成自動跳轉

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title here</title></head><body>    <form action="/day04/loggin" method="post">        <input type="text"  name="username">        <input type="password" name="password">        <input type="submit" value="登錄">    </form></body></html>
loggin.html
 1 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 2 <html> 3 <head> 4 <meta content="3;url=/day04/loggin.html" http-equiv="refresh"> 5 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 6 <title>Insert title here</title> 7 </head> 8 <body> 9    Welcome to loggin ~! 3秒后自動跳轉到登錄頁面....10 </body>11 </html>
Welcome.html
 1 package com.shellway.response; 2  3 import java.io.IOException; 4  5 import javax.servlet.ServletException; 6 import javax.servlet.http.HttpServlet; 7 import javax.servlet.http.HttpServletRequest; 8 import javax.servlet.http.HttpServletResponse; 9 10 public class ResponseForLoggin extends HttpServlet {11 12     public void doGet(HttpServletRequest request, HttpServletResponse response)13             throws ServletException, IOException {14         String name = request.getParameter("username");15         String password = request.getParameter("password");16         response.setContentType("text/html;charset=utf-8");17         if (name.equals("admin")&&password.equals("admin")) {18         //    response.setStatus(302);19         //    response.setHeader("Location", "/day04/response/Welcome.html");20             response.sendRedirect("/day04/response/Welcome.html");21         }else{22         //    response.setStatus(302);23         //    response.setHeader("Location", "/day04/loggin.html");24         //    sendRedirect()它綜合了setStatus(302)+setHeader的效果25             response.getWriter().println("您輸入的帳號和密碼有誤,3秒后將自動跳轉到登錄頁面...");26             response.setHeader("refresh", "3;url=/day04/loggin.html");27         //    response.sendRedirect("/day04/response/Error.html");28         }29     }30 31     public void doPost(HttpServletRequest request, HttpServletResponse response)32             throws ServletException, IOException {33                 doGet(request, response);34     }35 }
ResponseForLoggin

案例四:通過response頭信息設置 瀏覽器禁止緩存原理:和禁用緩存相關頭信息 三個 Cache-Control:no-cacheExpires:Thu, 01 Dec 1994 16:00:00 GMT ----- setDateHeader("expires",-1);Pragma : no-cache

IE 工具---Internet選項 ---常規 --- 設置 --- 查看文件對于Servlet生成HTML頁面,經常需要改變,禁止Servlet動態程序緩存 * 設置Expires時,通常 setDateHeader 為過期時間設置一個毫秒值,生成HTTP響應時,會自動轉換日期字符串表示

 1 public class ResponseServlet1 extends HttpServlet { 2  3     public void doGet(HttpServletRequest request, HttpServletResponse response) 4             throws ServletException, IOException { 5             response.setHeader("Cache-Control", "no-cache"); 6             response.setHeader("Pragma", "no-cache"); 7           //response.setHeader("expires", "Thu, 01 Dec 1994 16:00:00 GMT");一般用setDateHeader 8           //通過setDateHeader為expires設置毫秒值,從1970年1月1日 00:00:00毫秒開始 9             response.setDateHeader("expires", -1);//-1就是1970年1月1日前一天最后一秒,表示過期了10             response.getWriter().println("Hello,XXX");11     }12 13     public void doPost(HttpServletRequest request, HttpServletResponse response)14             throws ServletException, IOException {15         doGet(request, response);16     }17 }
禁用緩存:ResponseServlet1

---------------------------------------------------------------通過response 生成 客戶端響應體,通過字節流和字符流兩種輸出方式 * 哪些情況用字節流? 哪些情況用字符流 ? 文件拷貝 ---- 字節流 分析文件內容 --- 字符流 (中文操作 字符流)

案例五:輸出中文信息對中文信息進行編碼 response.setCharacterEncoding("utf-8");response.setContentType("text/html;charset=utf-8");

setCharacterEncodig 和 setContentType 區別 ?

結論:開發中只需要使用setContentType 就可以了

注意:1、getOutputStream和getWriter 不能同時使用2、必須在getOutputStream和getWriter 之前 設置響應 編碼 3、getOutputStream和getWriter 輸出內容 是 HTTP響應體 4、getOutputStream和getWriter 存在緩沖區的 ,在service方法結束時,自動關閉流,flush緩沖區內容

案例六 文件下載第一種:通過超鏈接 完成文件下載 * 如果瀏覽器可以識別該文件格式,直接打開,只有鏈接文件瀏覽器不識別文件格式,才會實現下載

第二種:通過Servlet程序實現下載 原理:通過Servlet讀取目標程序,將資源返回客戶端通過程序下載文件 設置兩個頭信息 Content-Type Content-Disposition

response.setContentType(getServletContext().getMimeType(filename)); ---- 設置文件類型 response.setHeader("Content-Disposition", "attachment;filename="+ filename); ---- 設置文件以附件形式下載(對于瀏覽器識別格式文件)

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title here</title></head><body>     <h1>通過超鏈接下載</h1>     <a href="/day04/resourses/2.rar">rar壓縮文件下載</a>     <a href="/day04/resourses/1.jpg">圖片下載</a>          <h1>通過程序下載</h1>     <a href="/day04/download?filename=2.rar">rar壓縮文件下載</a>     <a href="/day04/download?filename=1.jpg">圖片下載</a></body></html>
download.html
 1 package com.shellway.response; 2  3 import java.io.FileInputStream; 4 import java.io.FileOutputStream; 5 import java.io.IOException; 6  7 import javax.servlet.ServletException; 8 import javax.servlet.ServletOutputStream; 9 import javax.servlet.http.HttpServlet;10 import javax.servlet.http.HttpServletRequest;11 import javax.servlet.http.HttpServletResponse;12 13 public class ResponseDownload extends HttpServlet {14 15     public void doGet(HttpServletRequest request, HttpServletResponse response)16             throws ServletException, IOException {17         String filename =request.getParameter("filename");18         //下面這兩句比較固定,第一句根據所給的文件名分析得到文件格式19         response.setContentType(getServletContext().getMimeType(filename));20         //獲得文件格式后,通過消息頭設置文件以附件(attachment)的形式下載21         response.setHeader("Content-Disposition", "attachment;filename="+filename);22         23         String filepath = getServletContext().getRealPath("/resourses/"+filename);24         ServletOutputStream out = response.getOutputStream();25         FileInputStream fileInputStream = new FileInputStream(filepath);26         int len=0;27         while ((len = fileInputStream.read())!=-1) {28             out.write(len);29         }30         fileInputStream.close();31         out.close();32     }33 34     public void doPost(HttpServletRequest request, HttpServletResponse response)35             throws ServletException, IOException {36 37         doGet(request, response);38 39     }40 }
ResponseDownload

案例七 驗證碼輸出案例 Java圖形API 生成驗證碼圖片 ----- 了解 為什么需要驗證碼 ?防止有人通過程序惡意攻擊網站 驗證碼為什么是圖片 ?為什么雪花或者干擾線? 常用驗證碼 : 字母和數字

驗證碼旋轉效果 rotate(double theta, double x, double y) ----- 參數 theta 旋轉弧度 2PI 弧度 = 360 角度

-30 ---- 30 角度

驗證碼看不清楚,點擊切換驗證碼 ---- 編寫Javascript程序 方法一:設置驗證碼圖片不緩存方法二:每次訪問使url 不同 ----- url?new Date().getTime() 當前時間

 1 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 2 <html> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 5 <title>Insert title here</title> 6 <script type="text/javascript"> 7          // 重新加載驗證碼圖片  8         // 方法二:如果圖片緩存,注意document后面沒有括號 9   function change(){10      document.getElementById("myimage").src="/day04/response2?"+new Date().getTime();11   }12 </script>13 14 </head>15 <body>16      用戶名:  <input type="text" name="username"/><br/>17      密&nbsp;&nbsp;碼:  <input type="password" name="password"/><br/>18      驗證碼:  <input type="text" name="check"/> 19            <img src="/day04/response2" onclick="change()" id="myimage" style="cursor: pointer;"/>20             <input type="submit" value="注冊">21 </body>22 </html>
register.html
 1 package com.shellway.response; 2  3 import java.awt.Color; 4 import java.awt.Font; 5 import java.awt.Graphics; 6 import java.awt.Graphics2D; 7 import java.awt.image.BufferedImage; 8 import java.io.IOException; 9 import java.util.Random;10 11 import javax.imageio.ImageIO;12 import javax.servlet.ServletException;13 import javax.servlet.http.HttpServlet;14 import javax.servlet.http.HttpServletRequest;15 import javax.servlet.http.HttpServletResponse;16 17 public class ResponseServlet2 extends HttpServlet {18 19     public void doGet(HttpServletRequest request, HttpServletResponse response)20             throws ServletException, IOException {21         // response.setHeader("Cache-Control", "no-cache");22         // response.setDateHeader("Expires", -1);23         // response.setHeader("Pragma", "no-cache");24 25         int width = 120;26         int height = 30;27         // 1、創建一張 內存中緩沖圖片28         BufferedImage bufferedImage = new BufferedImage(width, height,29                 BufferedImage.TYPE_INT_RGB);30 31         // 2、背景色32         Graphics graphics = bufferedImage.getGraphics(); // 通過 graphics對象 繪制圖片33         // 設置顏色34         graphics.setColor(Color.YELLOW);35         graphics.fillRect(0, 0, width, height);36 37         // 3、邊框38         graphics.setColor(Color.BLUE);39         graphics.drawRect(0, 0, width - 1, height - 1);40 41         // 4、寫驗證碼內容42         Graphics2D graphics2d = (Graphics2D) bufferedImage.getGraphics();43         graphics2d.setColor(Color.RED);44         // 設置字體45         graphics2d.setFont(new Font("宋體", Font.BOLD, 18));46         // String content =47         // "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890";48         String content = "/u7684/u4e00/u4e86/u662f/u6211/u4e0d/u5728/u4eba/u4eec/u6709/u6765/u4ed6/u8fd9/u4e0a/u7740/u4e2a/u5730/u5230/u5927/u91cc/u8bf4/u5c31/u53bb/u5b50/u5f97/u4e5f/u548c/u90a3/u8981/u4e0b/u770b/u5929/u65f6/u8fc7/u51fa/u5c0f/u4e48/u8d77/u4f60/u90fd/u628a/u597d/u8fd8/u591a/u6ca1/u4e3a/u53c8/u53ef/u5bb6/u5b66/u53ea/u4ee5/u4e3b/u4f1a/u6837/u5e74/u60f3/u751f/u540c/u8001/u4e2d/u5341/u4ece/u81ea/u9762/u524d/u5934/u9053/u5b83/u540e/u7136/u8d70/u5f88/u50cf/u89c1/u4e24/u7528/u5979/u56fd/u52a8/u8fdb/u6210/u56de/u4ec0/u8fb9/u4f5c/u5bf9/u5f00/u800c/u5df1/u4e9b/u73b0/u5c71/u6c11/u5019/u7ecf/u53d1/u5de5/u5411/u4e8b/u547d/u7ed9/u957f/u6c34/u51e0/u4e49/u4e09/u58f0/u4e8e/u9ad8/u624b/u77e5/u7406/u773c/u5fd7/u70b9/u5fc3/u6218/u4e8c/u95ee/u4f46/u8eab/u65b9/u5b9e/u5403/u505a/u53eb/u5f53/u4f4f/u542c/u9769/u6253/u5462/u771f/u5168/u624d/u56db/u5df2/u6240/u654c/u4e4b/u6700/u5149/u4ea7/u60c5/u8def/u5206/u603b/u6761/u767d/u8bdd/u4e1c/u5e2d/u6b21/u4eb2/u5982/u88ab/u82b1/u53e3/u653e/u513f/u5e38/u6c14/u4e94/u7b2c/u4f7f/u5199/u519b/u5427/u6587/u8fd0/u518d/u679c/u600e/u5b9a/u8bb8/u5feb/u660e/u884c/u56e0/u522b/u98de/u5916/u6811/u7269/u6d3b/u90e8/u95e8/u65e0/u5f80/u8239/u671b/u65b0/u5e26/u961f/u5148/u529b/u5b8c/u5374/u7ad9/u4ee3/u5458/u673a/u66f4/u4e5d/u60a8/u6bcf/u98ce/u7ea7/u8ddf/u7b11/u554a/u5b69/u4e07/u5c11/u76f4/u610f/u591c/u6bd4/u9636/u8fde/u8f66/u91cd/u4fbf/u6597/u9a6c/u54ea/u5316/u592a/u6307/u53d8/u793e/u4f3c/u58eb/u8005/u5e72/u77f3/u6ee1/u65e5/u51b3/u767e/u539f/u62ff/u7fa4/u7a76/u5404/u516d/u672c/u601d/u89e3/u7acb/u6cb3/u6751/u516b/u96be/u65e9/u8bba/u5417/u6839/u5171/u8ba9/u76f8/u7814/u4eca/u5176/u4e66/u5750/u63a5/u5e94/u5173/u4fe1/u89c9/u6b65/u53cd/u5904/u8bb0/u5c06/u5343/u627e/u4e89/u9886/u6216/u5e08/u7ed3/u5757/u8dd1/u8c01/u8349/u8d8a/u5b57/u52a0/u811a/u7d27/u7231/u7b49/u4e60/u9635/u6015/u6708/u9752/u534a/u706b/u6cd5/u9898/u5efa/u8d76/u4f4d/u5531/u6d77/u4e03/u5973/u4efb/u4ef6/u611f/u51c6/u5f20/u56e2/u5c4b/u79bb/u8272/u8138/u7247/u79d1/u5012/u775b/u5229/u4e16/u521a/u4e14/u7531/u9001/u5207/u661f/u5bfc/u665a/u8868/u591f/u6574/u8ba4/u54cd/u96ea/u6d41/u672a/u573a/u8be5/u5e76/u5e95/u6df1/u523b/u5e73/u4f1f/u5fd9/u63d0/u786e/u8fd1/u4eae/u8f7b/u8bb2/u519c/u53e4/u9ed1/u544a/u754c/u62c9/u540d/u5440/u571f/u6e05/u9633/u7167/u529e/u53f2/u6539/u5386/u8f6c/u753b/u9020/u5634/u6b64/u6cbb/u5317/u5fc5/u670d/u96e8/u7a7f/u5185/u8bc6/u9a8c/u4f20/u4e1a/u83dc/u722c/u7761/u5174/u5f62/u91cf/u54b1/u89c2/u82e6/u4f53/u4f17/u901a/u51b2/u5408/u7834/u53cb/u5ea6/u672f/u996d/u516c/u65c1/u623f/u6781/u5357/u67aa/u8bfb/u6c99/u5c81/u7ebf/u91ce/u575a/u7a7a/u6536/u7b97/u81f3/u653f/u57ce/u52b3/u843d/u94b1/u7279/u56f4/u5f1f/u80dc/u6559/u70ed/u5c55/u5305/u6b4c/u7c7b/u6e10/u5f3a/u6570/u4e61/u547c/u6027/u97f3/u7b54/u54e5/u9645/u65e7/u795e/u5ea7/u7ae0/u5e2e/u5566/u53d7/u7cfb/u4ee4/u8df3/u975e/u4f55/u725b/u53d6/u5165/u5cb8/u6562/u6389/u5ffd/u79cd/u88c5/u9876/u6025/u6797/u505c/u606f/u53e5/u533a/u8863/u822c/u62a5/u53f6/u538b/u6162/u53d4/u80cc/u7ec6";49 50         // 內容四個字 --- 隨機從content中抽取四個字51         Random random = new Random();52         int x = 10;53         int y = 20;54         for (int i = 0; i < 4; i++) { // 循環四次55             // 為字 生成旋轉角度 -30 ---- 3056             double jiaodu = random.nextInt(60) - 30;57             // 將旋轉角度 換算弧度58             double theta = jiaodu / 180 * Math.PI;59 60             int index = random.nextInt(content.length());61             char letter = content.charAt(index); // letter 驗證碼內容62             graphics2d.rotate(theta, x, y);63             graphics2d.drawString(letter + "", x, y);64             // 將角度還原65             graphics2d.rotate(-theta, x, y);66             x += 30;67         }68 69         // 5 繪制隨機干擾線70         int x1;71         int x2;72         int y1;73         int y2;74         graphics.setColor(Color.LIGHT_GRAY);75         for (int i = 0; i < 10; i++) {76             x1 = random.nextInt(width);77             x2 = random.nextInt(width);78             y1 = random.nextInt(height);79             y2 = random.nextInt(height);80             // 根據兩點 繪制直線81             graphics.drawLine(x1, y1, x2, y2);82         }83 84         // 內存中資源 釋放85         graphics.dispose();86 87         // 將圖片輸出到 瀏覽器 ImageIO88         // 將內存的圖片 通過 瀏覽器輸出流 寫成 jpg格式圖片89         ImageIO.write(bufferedImage, "jpg", response.getOutputStream());90 91     }92 93     public void doPost(HttpServletRequest request, HttpServletResponse response)94             throws ServletException, IOException {95 96         doGet(request, response);97 98     }99 }
生成驗證碼:ResponseServlet2

-----------------------------------------------------------------HttpServletRequest 分為四個部分HttpServletRequest 想比 ServletRequest 添加與協議相關 API1、獲取客戶機信息URI和URL區別url:http://localhost/day06/request1 --- 完整uri:/day06/request1 ---- 部分

URI 包含 URL的 ,URL 一定完成路徑,URI可以相對路徑 http://localhost/day06/request1 是一個URL 同時也是 URI./hello /day06/request1 ---- 都是URI 不是URL

獲得ip : request.getRemoteAddr();

獲得當前訪問資源路徑 : request.getRequestURI().substring(request.getContextPath().length());

2、獲取請求頭信息getHeader 獲得頭信息的值,轉換一個字符串getHeaders 獲得頭信息值 ,獲得EnumerationgetHeaderNames 獲得所有頭信息名稱 返回 Enumeration

* 掌握getHeader使用,遍歷Enumeration 獲得所有頭信息

編寫防盜鏈程序,存在合法referer不是盜鏈,否則控制目標資源無法訪問 !* 通過URL 繞過盜鏈判斷

3、獲取請求參數什么是請求參數? 用戶通過請求提交服務器一些數據 ----- <a href="url?xxx=xxx" >、<form method="get"> 、 <form method="post">/day06/request4?name=zhangsan&city=beijing ---- 包括兩個參數的 name 和 city

常用API四個getParametergetParameterValuesgetParameterNamesgetParameterMap

非空校驗if (username != null && username.trim().length() > 0) {} ----- 短路

亂碼問題post ---- request.setCharacterEncoding("客戶端編碼集");

get亂碼手動解決username = URLEncoder.encode(username, "ISO-8859-1");// 用ISO編碼username = URLDecoder.decode(username, "utf-8"); // 用utf-8解碼簡化上面寫法 : username = new String(username.getBytes("ISO-8859-1"), "utf-8");

get亂碼 配置tomcat默認解碼字符集在tomcat/conf/server.xml Connector中 添加一個屬性 URIEncoding="utf-8"

結論:開發時,盡量不要修改tomcat默認解碼集 ,提交請求請盡量使用post ,如果非要使用get ,手動編碼

問題:http://localhost/day06/servlet?username=zhangsan+lisi在服務器端 通過 request.getParameter("username") 結果是 ??? ----- zhangsan lisi

4、利用請求域傳遞對象HttpServletRequest 和 ServletContext 類似 都是數據域對象 , 以Map方式保持數據區分:存活時間不同 ServletContext對象 服務器啟動對象創建,服務器停止對象銷毀ServletRequest對象 當產生一次請求時 創建,當響應結束后,對象銷毀

通過request轉發請求,request保存數據進行Servlet之間傳遞 ---- 應用?Servlet進行數據處理 --- 生成結果 --- 轉發結果給jsp顯示

注意事項1、在使用forward之前 不能將響應內容傳輸到客戶端情況一 response輸出流執行flush 情況二 同一個Servlet不能連續使用forward 和 redirect2、在執行forward 和 redirect時,清除之前寫入響應流數據 3、ServletContext進行轉發 路徑必須/開始,request進行轉發路徑可以使用相對路徑

轉發和重定向區別1、轉發一次請求、一次響應 重定向 兩次請求 兩次響應2、轉發只能跳轉站內程序,重定向定向任何站點 3、轉發 URL地址不變 ,重定向URL地址改變 4、轉發 對客戶端不可見,重定向對客戶端可見 5、轉發共享同一個Request中數據,重定向兩次請求,不同Request對象,不能共享Request數據

* request.setAttribute 必須和 request.getRequestDispatcher().forward 一起使用

RequestDispatcher 的 include 方法 用來做頁面布局 ------ <%@include%> <jsp:include> 將頁面公共部分抽取出來,通過include 引用到頁面中 ---- 更加方便維護

總結:1、Response 四個必須 API setStatus setHeader getOutputStream getWriter setStatus 狀態碼setHeader 頭信息getOutputStream getWriter 響應體

2、重定向 302 + Location ---- 簡寫 sendRedirect 案例 用戶登錄重定向

3、refresh自動刷新網頁 <meta> 標簽使用

4、禁用瀏覽器緩存 三個頭字段

5、響應中文亂碼 ---- 都使用setContentType

6、文件下載 超鏈接和Servlet程序 Servlet程序 設置兩個頭字段 Content-Type Content-Disposition

7、驗證碼程序 (寫完整存檔)* 驗證碼點擊切換 兩種方法

8、request請求行相關API getRequestURI getContextPath getRemoteAddr getMethod 思考:獲得訪問資源路徑

9、request頭信息獲得(不重要) ---- 掌握防盜鏈案例

10、獲得請求參數 亂碼解決 get 、post (超級重要)

11、轉發共享request數據 、include進行頁面布局 ---- 了解即可


上一篇:多線程基礎

下一篇:Thread的run和start

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 久久大陆 | 羞羞视频免费观看入口 | 中文在线观看视频 | 亚洲视频观看 | 免费专区 - 91爱爱 | 91精品国产综合久久婷婷香 | 99久久婷婷国产综合精品青牛牛 | 高潮娇喘嗯啊~文字 | 毛片网站视频 | 成人富二代短视频 | 国内免费视频成人精品 | 日本中文一级片 | 久草视频2| 在线高清中文字幕 | 性生活视频一级 | 一区二区三区国产视频 | av免费在线网 | 精品一区二区三区免费爱 | 黄色片免费在线播放 | 精品中文字幕久久久久四十五十骆 | 粉嫩蜜桃麻豆免费大片 | 日日夜av| 日韩av电影免费看 | 久色porn | 国产超碰人人做人人爱 | 中文字幕一区2区 | 97se亚洲综合在线韩国专区福利 | 亚洲一区二区国产 | 亚洲va久久久噜噜噜久牛牛影视 | 国产91久久久 | 毛片在线免费观看完整版 | 久色网站 | 日韩午夜一区二区三区 | 欧美一级黄 | 羞羞视频免费观看网站 | 国产精品欧美久久久久一区二区 | 久久出精品 | 日本68xxxx | wwwxxx国产| 日韩理论电影网 | 72pao成人国产永久免费视频 |