javaee中request與response分不清以及請求轉發

  1. import java.io.IOException;  
  2. import java.io.PrintWriter;  
  3.   
  4. import javax.servlet.ServletException;  
  5. import javax.servlet.http.HttpServlet;  
  6. import javax.servlet.http.HttpServletRequest;  
  7. import javax.servlet.http.HttpServletResponse;  
  8.   
  9. public class demo5 extends HttpServlet {  
  10.   
  11.     /** 
  12.      *路勁問題: 
  13.      *  首先給每個需要寫路徑的地方帶上一個/,然後區分 
  14.      * 1)服務器行爲 :則斜槓就代表是在項目下的地方,需要訪問什麼路勁便可以直接填寫 
  15.      * 2)瀏覽器行爲 :則斜槓就代表是在webapps下,但是不確定是在什麼項目,所以路徑需要先填寫一個項目名 
  16.      */  
  17.     public void doGet(HttpServletRequest request, HttpServletResponse response)  
  18.             throws ServletException, IOException {  
  19.   
  20.         //請求轉發,屬於服務器行爲  
  21.         request.getRequestDispatcher("/index.jsp").forward(request, response);  
  22.           
  23.         //響應重定向,屬於瀏覽器行爲  
  24.         response.sendRedirect("/Myitcast_day05/index.jsp");  
  25.           
  26.         //讀取web應用的文件,屬於服務器行爲  
  27.         this.getServletContext().getRealPath("/index.jsp");  
  28.         this.getServletContext().getResourceAsStream("/index.jsp");  
  29.           
  30.         //超鏈接,屬於在瀏覽器發送請求,是瀏覽器行爲  
  31.         //<a href="/Myitcast_day05/index.jsp">點擊</a>  
  32.           
  33.         //表單提交,也是在瀏覽器發送請求,是瀏覽器行爲  
  34.         //<form action="/Myitcast_day05/index.jsp"></form>  
  35.           
  36.           
  37.     }  
  38.   
  39.       
  40.     public void doPost(HttpServletRequest request, HttpServletResponse response)  
  41.             throws ServletException, IOException {  
  42.   
  43.         doGet(request, response);  
  44.     }  
  45.   
  46. }  

二、根據在視圖層顯示字符數據

[java] view plain copy
  1. import java.io.IOException;  
  2. import java.io.OutputStream;  
  3. import java.io.PrintWriter;  
  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 demo6 extends HttpServlet {  
  11.   
  12.     /** 
  13.      *顯示數據字符給視圖  
  14.     */  
  15.         public void doGet(HttpServletRequest request, HttpServletResponse response)  
  16.             throws ServletException, IOException {  
  17.       
  18.             //告訴瀏覽器以utf-8的形式輸出內容,但是瀏覽器的碼錶卻沒有改  
  19.             //所以一般是設置setContentType這個方法,這個方法便可以省略了  
  20.             response.setCharacterEncoding("UTF-8");  
  21.               
  22.             //輸出的內容以html形式,text/html也是瀏覽器默認設置的形式  
  23.             response.setContentType("text/html;charset=utf-8");  
  24.               
  25.             //輸出響應頭信息content-type爲text/html;charset=utf-8,這個方法是總的方法  
  26.             //當輸出了setContentTy這個方法便不用輸出這個  
  27.             response.setHeader("content-type","text/html;charset=utf-8");  
  28.               
  29.             //把輸出的內容換成xml的形式輸出  
  30.             response.setContentType("text/xml;charset=utf-8");  
  31.               
  32.               
  33.             //在瀏覽器輸出內容的時候查詢的碼錶是ISO-8859-1,不支持中文,所以需要轉碼錶  
  34.             //PrintWriter out = response.getWriter();  
  35.             //out.write("暴龍");  
  36.               
  37.               
  38.             OutputStream out = response.getOutputStream();  
  39.             out.write("暴龍".getBytes());   //這個字節碼的形式輸出參照的碼錶是GBK,所以需要轉換爲utf-8來輸出  
  40.             out.write("暴龍".getBytes("UTF-8"));  
  41.         }  
  42.   
  43.       
  44.         public void doPost(HttpServletRequest request, HttpServletResponse response)  
  45.             throws ServletException, IOException {  
  46.       
  47.         doGet(request,response);  
  48.         }  
  49.   
  50. }  

三、在視圖層下載數據給用戶

[java] view plain copy
  1. import java.io.File;  
  2. import java.io.FileInputStream;  
  3. import java.io.IOException;  
  4. import java.io.OutputStream;  
  5.   
  6. import javax.servlet.ServletException;  
  7. import javax.servlet.http.HttpServlet;  
  8. import javax.servlet.http.HttpServletRequest;  
  9. import javax.servlet.http.HttpServletResponse;  
  10.   
  11. public class demo7 extends HttpServlet {  
  12.   
  13.     /** 
  14.      * 在瀏覽器下載給用戶 
  15.      */  
  16.     public void doGet(HttpServletRequest request, HttpServletResponse response)  
  17.             throws ServletException, IOException {  
  18.   
  19.         //讀取服務器發佈的內容,創建成一個文件  
  20.         String path = this.getServletContext().getRealPath("/attach/hibernate.zip");  
  21.         File file = new File(path);  
  22.           
  23.         //設置響應頭content-disposition來設置下載的形式  
  24.         response.setHeader("content-disposition""attachment; filename="+file.getName());  
  25.           
  26.         //讀文件並按照流的方式輸出  
  27.         FileInputStream in = new FileInputStream(file);  
  28.           
  29.         OutputStream out = response.getOutputStream();  
  30.           
  31.         byte[] b = new byte[512];  
  32.         int length = 0;  
  33.         while((length=in.read())!=1){  
  34.             out.write(b, 0, length);  
  35.         }  
  36.           
  37.         out.close();  
  38.         in.close();  
  39.     }  
  40.   
  41.       
  42.     public void doPost(HttpServletRequest request, HttpServletResponse response)  
  43.             throws ServletException, IOException {  
  44.   
  45.         doGet(request, response);  
  46.     }  
  47.   
  48. }  

四、關於request和response的刷新轉發重定向的問題

[java] view plain copy
  1. import java.io.IOException;  
  2.   
  3. import javax.servlet.ServletException;  
  4. import javax.servlet.http.HttpServlet;  
  5. import javax.servlet.http.HttpServletRequest;  
  6. import javax.servlet.http.HttpServletResponse;  
  7.   
  8. public class demo8 extends HttpServlet {  
  9.   
  10.     /** 
  11.      * The doGet method of the servlet. <br> 
  12.      * 
  13.      * This method is called when a form has its tag value method equals to get. 
  14.      *  
  15.      * @param request the request send by the client to the server 
  16.      * @param response the response send by the server to the client 
  17.      * @throws ServletException if an error occurred 
  18.      * @throws IOException if an error occurred 
  19.      */  
  20.     public void doGet(HttpServletRequest request, HttpServletResponse response)  
  21.             throws ServletException, IOException {  
  22.   
  23.         //設置響應頭爲refresh,當值爲整數時候,表示當多少秒時該網頁會自動刷新  
  24.         response.setHeader("refresh""3");  
  25.           
  26.         //當值爲整數;url=xxxx,表示當多少秒後會刷新到url指定的頁面  
  27.         response.setHeader("refresh""3;url=/Myitcast_day05/index.jsp");  
  28.           
  29.           
  30.         //設置響應頭location,表示會轉發到後面指定的url頁面,常常配合狀態碼302  
  31.         response.setHeader("location""/Myitcast_day05/index.jsp");  
  32.         response.setStatus(302);  
  33.           
  34.           
  35.         //整個web應用只有一個servletContext對象,  
  36.         //放入ServletContet的數據常駐內存的,一般是不用這個屬性的  
  37.         this.getServletContext().setAttribute("p""9");  
  38.   
  39.         //另一個域對象:HttpServletRequest對象  
  40.         //注意:只需要使用1次的數據,可以用request對象共享出去  
  41.         request.setAttribute("p""9");  
  42.           
  43.         //request的請求轉發是可以得到共享數據的,但是response的重定向是不可以的  
  44.         request.getRequestDispatcher("/demo4").forward(request, response);  
  45.         response.sendRedirect("/Myitcast_day05/demo4");  
  46.           
  47.         //request能夠得到在request域中存放的共享數據  
  48.         request.getAttribute("p");  
  49.           
  50.     }  
  51.   
  52.       
  53.     public void doPost(HttpServletRequest request, HttpServletResponse response)  
  54.             throws ServletException, IOException {  
  55.   
  56.         doGet(request, response);  
  57.     }  
  58.   
  59. }  

最後的總結:

responset的重定向和request的轉發的區別:

請求重定向:

1)瀏覽器一共發出了2次請求

2)瀏覽器行爲

3)地址欄會改變,變成了去到的地址

4)請求重定向不能通過request共享數據


請求轉發:

1)瀏覽器只發出1次請求

2)服務器行爲 

3)地址欄不會改變的!

4)請求轉發可以通過request共享數據


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章