- import java.io.IOException;
- import java.io.PrintWriter;
- import javax.servlet.ServletException;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- public class demo5 extends HttpServlet {
- /**
- *路勁問題:
- * 首先給每個需要寫路徑的地方帶上一個/,然後區分
- * 1)服務器行爲 :則斜槓就代表是在項目下的地方,需要訪問什麼路勁便可以直接填寫
- * 2)瀏覽器行爲 :則斜槓就代表是在webapps下,但是不確定是在什麼項目,所以路徑需要先填寫一個項目名
- */
- public void doGet(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- //請求轉發,屬於服務器行爲
- request.getRequestDispatcher("/index.jsp").forward(request, response);
- //響應重定向,屬於瀏覽器行爲
- response.sendRedirect("/Myitcast_day05/index.jsp");
- //讀取web應用的文件,屬於服務器行爲
- this.getServletContext().getRealPath("/index.jsp");
- this.getServletContext().getResourceAsStream("/index.jsp");
- //超鏈接,屬於在瀏覽器發送請求,是瀏覽器行爲
- //<a href="/Myitcast_day05/index.jsp">點擊</a>
- //表單提交,也是在瀏覽器發送請求,是瀏覽器行爲
- //<form action="/Myitcast_day05/index.jsp"></form>
- }
- public void doPost(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- doGet(request, response);
- }
- }
二、根據在視圖層顯示字符數據
- import java.io.IOException;
- import java.io.OutputStream;
- import java.io.PrintWriter;
- import javax.servlet.ServletException;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- public class demo6 extends HttpServlet {
- /**
- *顯示數據字符給視圖
- */
- public void doGet(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- //告訴瀏覽器以utf-8的形式輸出內容,但是瀏覽器的碼錶卻沒有改
- //所以一般是設置setContentType這個方法,這個方法便可以省略了
- response.setCharacterEncoding("UTF-8");
- //輸出的內容以html形式,text/html也是瀏覽器默認設置的形式
- response.setContentType("text/html;charset=utf-8");
- //輸出響應頭信息content-type爲text/html;charset=utf-8,這個方法是總的方法
- //當輸出了setContentTy這個方法便不用輸出這個
- response.setHeader("content-type","text/html;charset=utf-8");
- //把輸出的內容換成xml的形式輸出
- response.setContentType("text/xml;charset=utf-8");
- //在瀏覽器輸出內容的時候查詢的碼錶是ISO-8859-1,不支持中文,所以需要轉碼錶
- //PrintWriter out = response.getWriter();
- //out.write("暴龍");
- OutputStream out = response.getOutputStream();
- out.write("暴龍".getBytes()); //這個字節碼的形式輸出參照的碼錶是GBK,所以需要轉換爲utf-8來輸出
- out.write("暴龍".getBytes("UTF-8"));
- }
- public void doPost(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- doGet(request,response);
- }
- }
三、在視圖層下載數據給用戶
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.IOException;
- import java.io.OutputStream;
- import javax.servlet.ServletException;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- public class demo7 extends HttpServlet {
- /**
- * 在瀏覽器下載給用戶
- */
- public void doGet(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- //讀取服務器發佈的內容,創建成一個文件
- String path = this.getServletContext().getRealPath("/attach/hibernate.zip");
- File file = new File(path);
- //設置響應頭content-disposition來設置下載的形式
- response.setHeader("content-disposition", "attachment; filename="+file.getName());
- //讀文件並按照流的方式輸出
- FileInputStream in = new FileInputStream(file);
- OutputStream out = response.getOutputStream();
- byte[] b = new byte[512];
- int length = 0;
- while((length=in.read())!=1){
- out.write(b, 0, length);
- }
- out.close();
- in.close();
- }
- public void doPost(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- doGet(request, response);
- }
- }
四、關於request和response的刷新轉發重定向的問題
- import java.io.IOException;
- import javax.servlet.ServletException;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- public class demo8 extends HttpServlet {
- /**
- * The doGet method of the servlet. <br>
- *
- * This method is called when a form has its tag value method equals to get.
- *
- * @param request the request send by the client to the server
- * @param response the response send by the server to the client
- * @throws ServletException if an error occurred
- * @throws IOException if an error occurred
- */
- public void doGet(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- //設置響應頭爲refresh,當值爲整數時候,表示當多少秒時該網頁會自動刷新
- response.setHeader("refresh", "3");
- //當值爲整數;url=xxxx,表示當多少秒後會刷新到url指定的頁面
- response.setHeader("refresh", "3;url=/Myitcast_day05/index.jsp");
- //設置響應頭location,表示會轉發到後面指定的url頁面,常常配合狀態碼302
- response.setHeader("location", "/Myitcast_day05/index.jsp");
- response.setStatus(302);
- //整個web應用只有一個servletContext對象,
- //放入ServletContet的數據常駐內存的,一般是不用這個屬性的
- this.getServletContext().setAttribute("p", "9");
- //另一個域對象:HttpServletRequest對象
- //注意:只需要使用1次的數據,可以用request對象共享出去
- request.setAttribute("p", "9");
- //request的請求轉發是可以得到共享數據的,但是response的重定向是不可以的
- request.getRequestDispatcher("/demo4").forward(request, response);
- response.sendRedirect("/Myitcast_day05/demo4");
- //request能夠得到在request域中存放的共享數據
- request.getAttribute("p");
- }
- public void doPost(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- doGet(request, response);
- }
- }
最後的總結:
responset的重定向和request的轉發的區別:
請求重定向:
1)瀏覽器一共發出了2次請求
2)瀏覽器行爲
3)地址欄會改變,變成了去到的地址
4)請求重定向不能通過request共享數據
請求轉發:
1)瀏覽器只發出1次請求
2)服務器行爲
3)地址欄不會改變的!
4)請求轉發可以通過request共享數據