Request物件和Response物件詳解
- 請求轉發與請求包含
3)若轉發前有資料寫入到response緩衝區,則請求轉發會清空response緩衝區的實體內容, 但不會清空請求頭資訊. 請求包含: 當需要將多個servlet的輸出合併到一塊打給瀏覽器時可以使用請求包含 request.getRequestDispatcher("/DispatcherTest2").include(request, response); 或 this.getServletContext().getRequestDispatcher("/DispatcherTest2").include(request, response); Notice: 1)被包含的Servlet程式不能改變響應訊息的狀態碼和響應頭,如果它裡面存在這樣的語句,這些語句的執行結果將被忽略. 2)常被用來進行頁面佈局 請求重定向: response.sendRedirect(request.getContextPath() + "/DispatcherTest2"); Notice: 1) 不能在資料已經發送到瀏覽器之後再進行請求重定向: java.lang.IllegalStateException: Cannot call sendRedirect() after the response has been committed 2) 在請求重定向之前寫入到response緩衝區的資料會被清空 3) 一次請求只能重定向一次
Summary: 請求重定向位址列會發生變化.請求轉發位址列不發生變化. 請求重定向兩次請求兩次響應.請求轉發一次請求一次響應. 如果需要在資源跳轉時利用request域傳遞域屬性則必須使用請求轉發 如果希望資源跳轉後修改使用者的位址列則使用請求重定向 如果使用請求轉發也可以重定向也可以,則優先使用請求轉發,減少瀏覽器對伺服器的訪問次數減輕伺服器的壓力. Response 1.response ServletResponse -- 通用的response提供了一個響應應該具有最基本的屬性和方法 | |-HttpServletResponse -- 在ServletResponse的基礎上針對於HTTP協議增加了很多強化的屬性和方法 2.輸出資料 1)getOutputStream位元組輸出流 response.getOutputStream().write("中國".getBytes("utf-8")); string.getBytes()如果沒有指定編碼方式,會使用平臺預設的編碼方式
2)getWriter字元輸出流 response.getWriter().write("北京"); Notice: getWriter和getOutputStream在一次請求中只能使用一個 使用字元輸出流輸出中文時, 由於網線上只能輸出高低電平,如果沒有指定編碼方式,那麼伺服器在傳送資料時會使用預設的ISO-8859-1對資料編碼(該碼錶中沒有漢字, 因此漢字會被編碼為?, 傳送到瀏覽器上的資料實際就是?). 3)解決亂碼 1> 通知伺服器傳送資料時使用utf-8編碼 response.setCharacterEncoding("utf-8"); 2> 通知瀏覽器接受資料時使用utf-8解碼 response.setHeader("Content-Type", "text/html;charset=utf-8"); 3> Notice: a. response物件中對Content-Type響應頭進行了封裝,可以使用一下程式碼代替 2> response.setContentType("text/html;charset=utf-8"); b. 如果設定了Content-Type,伺服器會自動的設定 characterEncoding,因此解決亂碼只需要設定Content-Type響應頭一行程式碼就可以了,但是為了程式碼的可讀性更高,一般還是建議同時設定 characterEncoding 和 Content-Type. 3)實現下載 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("美女.jpg")); InputStream in = new FileInputStream(this.getServletContext().getRealPath("美女.jpg")); OutputStream out = response.getOutputStream(); byte[] bytes = new byte[1024]; int len = -1; while(-1 != (len = in.read(bytes))) { out.write(bytes, 0, len); } in.close(); } 4) 實現定時重新整理 1.Servlet實現 response.setContentType("text/html;charset=utf-8"); response.getWriter().write("恭喜您註冊成功, 3秒後回到主頁"); response.setHeader("Refresh", "3;url=OutServlet"); 2.html實現 <meta charset="UTF-8"> <meta http-equiv="Refresh" content="3; url=index.jsp" > <title>Insert title here</title> </head> <body> 恭喜您註冊成功, 3秒後回到主頁.... </body> 5)控制瀏覽器是否快取 response.setIntHeader("Expires", -1); response.setHeader("Cache-Control", "no-cache"); response.setHeader("Pragma", "no-cache"); response.getWriter().write(new Date().toLocaleString()); 6)實現請求重定向 response.sendRedirect(this.getServletContext().getContextPath()); 7)輸出驗證碼圖片 package com.inetsoft.response; import java.awt.Color; import java.awt.Font; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.IOException; import java.util.Random; import javax.imageio.ImageIO; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * @Description: 用於輸出驗證碼圖片的Servlet * @Warning: * @Author DreamLi * @Package Day04-Response-Request -- com.inetsoft.response.ValidServlet * @Date: 2017年12月17日 下午4:51:22 * @Version: 1.0.0 */ @WebServlet("/ValidServlet") public class ValidServlet extends HttpServlet { private static final long serialVersionUID = -70985881600765636L; private Random rand = new Random(); public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //設定響應頭讓瀏覽器不再快取驗證碼圖片 response.setDateHeader("Expires", -1); response.setHeader(
相關推薦
java Request物件和Response物件詳解
一:概述 Web伺服器收到客戶端的http請求,會針對每一次請求,分別建立一個用於代表請求的request物件、和代表響應的response物件 一、Response物件 1.Resonse的繼承結構: ServletResponse--H
JavaWeb之Request物件和Response物件詳解
一:概述 Web伺服器收到客戶端的http請求,會針對每一次請求,分別建立一個用於代表請求的request物件、和代表響應的response物件一、Response物件 1.Resonse的繼承結構: ServletResponse--Ht
Request物件和Response物件詳解
Request 1.獲取請求的基本資訊 1>獲取請求的url和uri 2>獲取url後面的請求引數部分的字串 3>獲取請求方式 4>獲取主機名,IP地址 5>獲取 Contexpath String url = request.get
Java非靜態內部類外部this物件和final型別詳解
1. 非靜態內部類是如何引用外部類this物件的 Java內部類分為靜態內部類和非靜態內部類。它們有一個比較大的區別在於,非靜態內部類擁有外部類的this物件的引用,從而使得非靜態內部類可以訪問外部類的成員函式,成員變數。這個結論我們大家都比較清楚,那麼原理大家都懂嗎?這篇文章我講通
jsp 九大內建物件和其作用詳解
JSP中一共預先定義了9個這樣的物件,分別為:request、response、session、application、out、pagecontext、config、page、exception 1、request物件 request 物件是 javax.servlet.httpServletRequ
SpringMVC獲取request物件和response物件
其他Action繼承BaseAction 方法一: 1、BaseAction類 public class BaseAction { protected HttpServletRequest request; protected HttpServletRespo
request物件和response物件
一、請求響應流程圖 伺服器處理請求的流程: (1)伺服器每次收到請求時,都會為這個請求開闢一個新的執行緒。 (2)伺服器會把客戶端的請求資料封裝到request物件中,reques
Servlet詳解(二):request和response物件
什麼是request和response request物件是伺服器對瀏覽器請求的封裝,而response是伺服器對伺服器響應的封裝。 request用來取出請求資訊,而response則用來新增要返回給瀏覽器的資訊。 使用response物件設定h
response物件&重定向 詳解
2018年10月26日16:10:47 於易動 客戶端瀏覽器和伺服器: 請求的時候: request物件: HttpServletRequest 響應的時候: response物件: HttpServletResp
DRF自帶的Request和Response物件
# 轉載請留言聯絡 1.Request物件 DRF傳入檢視的request物件,不再是Django預設的HttpRequest物件,而是擴充套件了HttpRequest類的Request類的物件。 REST framework 提供了Parser解析器,在接收到請求後會自動根據Content-Type指
Servlet入門(五)request和response物件
前言 本章學習servlet中的request、response物件 方法 1.概念 相信大家在之前的章節已經看到了,我用到了request物件獲取前臺傳遞過來的資料: String username = request.getPar
Request物件和Response session
request.getContextPath()到底獲取的誰的絕對路徑?什麼叫絕對路徑?在硬盤裡存在的嗎? 假設有一個專案名為:report_emp request.getContextPath()獲得的是當前的專案名 /report_emp, 要想獲得專案實際在磁碟中存貯路徑可以使用reques
Python-模型類-F()物件和Q()物件詳解
定義模型 from django.db import models from django.db.models import F, Q class Publisher(models.Model): """出版社""" name = models.CharField(ma
Servlet(四):request和response物件
Request物件:問題: 瀏覽器發起請求到伺服器,會遵循HTTP協議將請求資料傳送給伺服器。 那麼伺服器接受到請求的資料改怎麼儲存呢?不但要存,而且要保證完成性。 解決: 使用物件進行儲存,伺服器每接受一個請求,就建立一個物件專門的存 儲此次請求的請求資料。 實現: requ
ASP.NET常用物件——Request(請求)和Response(響應)物件
請求與響應 Request物件 創建出5個Web窗體頁面 編寫或拖放超連結控制元件 不同頁面之間引數傳遞:第一個引數之前使用?,引數之間使用&連線 Que
Nodejs之request 和 response 物件的具體介紹
res.app:同req.app一樣 res.append():追加指定HTTP頭 res.set()在res.append()後將重置之前設定的頭 res.cookie(name,value [,option]):設定Cookie opition: domain / expires / httpOnly
request和response物件的使用集合
Asp使用request.ServerVariables當討論Request物件內容時,要研究的集合之一就是ServerVariables集合。 powered by 25175.net 這個集合包含了兩種值的結合體,一種是隨同頁面請求從客戶端傳送到伺服器的HTTP報頭中的值,另外一種是由伺服器在接收到請求
spring單例和多例詳解。如何在單例中呼叫多例物件
spring生成物件預設是單例的。通過scope屬性可以更改為多例。 <bean id="user" class="modle.User" scope="prototype"> </bean> 在使用Spring3對控制器Controller進行bean管理時,如果要對控制器是
JSON字串和物件之間的轉換詳解
JSON(JavaScript Object Notation) 是JavaScript程式語言的一個子集。正因JSON是JavaScript的一個子集,所以它可清晰的運用於此語言中。 eval函式 JSON文字轉換為物件 為了將JSON文字轉換為物件,可以使用eva
為什麼C++中常量引用可以繫結非常量的物件、字面值和一般表示式 詳解
在c++語言中,除兩種例外情況,其他引用的型別都要和與之繫結的物件嚴格匹配,如int型的引用只能繫結int型的物件;並且引用不能直接與字面值常量或表示式結果繫結。 其中一種例外情況是:初始化常量引用時,允許用任意表達式作為初始值,只要該表示式的結果能轉換成引用的