欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java Web請求與響應實例詳解

 更新時間:2016年05月09日 11:23:14   作者:luoxn28  
這篇文章主要介紹了Java Web請求與響應實例詳解的相關資料,需要的朋友可以參考下

  Servlet最主要作用就是處理客戶端請求并作出回應,為此,針對每次請求,Web容器在調用service()之前都會創(chuàng)建兩個對象,分別是HttpServletRequest和HttpServletResponse。其中HttpServletRequest封裝HTTP請求消息,HttpServletResponse封裝HTTP響應消息。需要注意的是,Web服務器運行過程中,每個Servlet都會只創(chuàng)建一個實例對象,不過每次請求都會調用Servlet實例的service(ServletRequest req, ServletResponse res)方法,這里HttpServletRequest是ServletRequest的子類,HttpServletResponse是ServletResponse的子類。

  HttpServletRequest和HttpServletResponse接口繼承關系圖如下所示:

1、HttpServletResponse

  HttpServletResponse接口繼承自ServletResponse接口,由于HTTP響應消息分為狀態(tài)行、響應消息體、消息體三部分,因此,在HttpServletResponse接口中定義了向客戶端發(fā)送響應狀態(tài)碼、響應消息頭、響應消息體的方法。雖然HttpServletResponse接口中的方法較多,但是我們常用的也就是那么幾個,如果用到其他的方法了可以閱讀響應的源碼或者相關資料就行了。

發(fā)送狀態(tài)碼相關函數(shù)

方法 說明
public void setStatus(int sc) 設置響應消息狀態(tài)碼,Web服務器默認產生一個狀態(tài)碼為200的狀態(tài)行
public void sendError(int sc) 發(fā)送表示錯誤信息的狀態(tài)碼,第二個方法還增加了一個用于提示說明的文本信息
public void sendError(int sc, String msg)

發(fā)送響應消息頭相關函數(shù)

方法 說明
public void addHeader(String name, String value) 設置HTTP響應頭字段,name指定字段名稱,value指定字段值。addHeader可以增加同名的響應頭字段,setHeader則會覆蓋同名的頭字段
public void setHeader(String name, String value)
public void setContentLength(int len) 設置響應消息的實體內容的大小,單位為字節(jié),即設置Content-Length字段的值
public void setContentType(String type) 設置Servlet輸出內容的MIME類型,即設置Content-Type字段的值
public void setCharacterEncoding(String charset) 設置輸出內容字符編碼,即設置Content-Type字段的值,注意,該方法優(yōu)先級比setContentType的高
public void sendRedirect(String location) Servlet請求重定向

發(fā)送響應消息體相關函數(shù)

方法 說明
public ServletOutputStream getOutputStream() 獲取HttpServletResponse的字節(jié)輸出流ServletOutputStram類型
public PrintWriter getWriter() 獲取HttpServletResponse的字符輸出流ServletWriter類型

中文輸出亂碼問題

  計算機中的數(shù)據(jù)都是以二進制形式存儲的,因此,傳輸文本時,就會發(fā)生字符的字節(jié)之間的轉換。字符與字節(jié)之間的轉換時通過查碼表完成的,字符轉換為字節(jié)的過程稱為編碼,字節(jié)轉換為字符的過程稱為解碼,如果編碼和解碼使用的碼表不一樣,則會出現(xiàn)亂碼問題。

  注意:HttpServletResponse對象的字符輸出流在編碼時,默認采用的是ISO 8859-1編碼,該編碼方式不兼容中文,比如會將"中國"編碼為"63 63"(在ISO 8959-1的碼表中查不到的字符會顯示63)。當瀏覽器對接收到的數(shù)據(jù)進行解碼時,會默認采用GB2312,將"63"解碼為"?",瀏覽器就將"中國"兩個字符解碼為"??"。

HttpServletResponse程序示例

package zzz;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class Hello extends HttpServlet {
  @Override
  public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
    // 設置響應消息編碼,注釋后"中國"會顯示"??"亂碼
    response.setContentType("text/html;charset=utf-8");
    PrintWriter out = response.getWriter();
    out.println("hello 中國");
  }
  @Override
  public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {
    this.doGet(request, response);
  }
}

  有時會遇到定時跳轉頁面的問題,HTTP中Refresh頭字段可以通知瀏覽器在指定的時間內自動刷新并跳轉到其他頁面,網(wǎng)頁定時刷新并跳轉到指定頁面。

package zzz;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class Hello extends HttpServlet {
  @Override
  public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
    // 設置響應消息編碼
    response.setContentType("text/html;charset=utf-8");
    response.setHeader("Refresh", "2;url=http://www.baidu.com");
    PrintWriter out = response.getWriter();
    out.println("hello 中國,2秒后跳轉到百度...");
  }
  @Override
  public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {
    this.doGet(request, response);
  }
}

 2、HttpServletRequest

  HttpServletRequest接口繼承ServletRequest接口,專門用于封狀HTTP請求消息。由于HTTP請求信息包括請求行、請求頭和請求體三部分,所以HttpServletRequest接口定義了獲取請求行、請求頭和請求體的相關方法。

獲取請求行的相關方法

方法 說明
public String getMethod() 獲取HTTP請求方式,POST、GET等
public String getRequestURI() 獲取請求行中資源名稱部分
public String getQueryString() 獲取請求行中的參數(shù)部分
public String getProtocol() 獲取請求行中協(xié)議名稱和版本,如HTTP 1.1
public String getContextPath() 獲取請求URL中屬于Web應用程序的路徑

  其實關于請求行的方法從方法名中就可以看出其作用,這里就不一一貼出來了。

獲取請求消息頭的相關方法

方法 說明
public String getHeader(String name) 獲取指定字段的值,如果沒有返回null,如果有多個返回第一個值
public Enumeration<String> getHeaders(String name) 返回一個指定字段的Enumeration集合對象
public Enumeration<String> getHeaderNames() 返回一個包含所有字段的Enumeration集合對象
public String getContentType() 獲取Content-Type字段的值

打印請求消息頭字段的所有值

package zzz;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class Hello extends HttpServlet {
  @Override
  public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
    // 設置響應消息編碼
    response.setContentType("text/html;charset=utf-8");
    PrintWriter out = response.getWriter();
    Enumeration<String> names = request.getHeaderNames();
    while (names.hasMoreElements()) {
      String name = names.nextElement();
      String value = request.getHeader(name);
      out.println(name + ": " + value + "</br>");
    }
  }
  @Override
  public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {
    this.doGet(request, response);
  }
}

獲取請求體的相關方法

方法 說明
public ServletInputStream getInputStream() 獲取請求的ServletInputStream對象,如果實體內容為非文本,只能通過getInputStream方法獲取請求體消息體
public BufferedReader getReader() 獲取請求的BufferedReader對象,該對象會將實體內容字節(jié)數(shù)據(jù)轉換為指定字符集編碼的文本字符串

獲取請求參數(shù)

方法 說明
public String getParameter(String name) 獲取指定的參數(shù)值,沒有該參數(shù)返回null
public Enumeration<String> getParameterNames() 返回一個包含所有參數(shù)名的Enumeration對象
public String[] getParameterValues(String name) HTTP請求中可能有多個相同的參數(shù),獲取同一個參數(shù)名對應的所有參數(shù)值

3、RequestDispatcher接口

  當一個Web資源受到客戶端請求后,如果希望服務器通知另外一個資源如處理請求,除了使用功能sendRedirect()實現(xiàn)重定向外,還可以通過RequestDispatcher接口的實例對象來實現(xiàn),在ServletRequest接口中定義了一個獲取RequestDispatcher對象的方法--getRequestDispatcher(String path),它返回某個路徑所指定資源的RequestDispatcher對象,參數(shù)path必須以"/"開頭,用于表示當前Web應用的根目錄,也就是path路徑必須是在本W(wǎng)eb程序中,否則會出現(xiàn)異常。

RequestDispatcher接口中方法

方法 功能
public void forward(ServletRequest request, ServletResponse response) 將一個Servlet傳遞給另外一個Web資源,將請求傳遞給其他資源進行響應
public void include(ServletRequest request, ServletResponse response) 用于將其他資源作為當前響應內容包含進來

以上所述是小編給大家介紹的Java Web請求與響應實例詳解的相關內容,希望對大家有所幫助!

相關文章

  • 解析spring-security權限控制和校驗的問題

    解析spring-security權限控制和校驗的問題

    這篇文章主要介紹了解析spring-security權限控制和校驗的問題,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03
  • 基于Java實現(xiàn)多線程下載并允許斷點續(xù)傳

    基于Java實現(xiàn)多線程下載并允許斷點續(xù)傳

    這篇文章主要介紹了基于Java實現(xiàn)多線程下載并允許斷點續(xù)傳,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-03-03
  • Java內存釋放實現(xiàn)代碼案例

    Java內存釋放實現(xiàn)代碼案例

    這篇文章主要介紹了Java內存釋放實現(xiàn)代碼案例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-12-12
  • java線程本地變量ThreadLocal詳解

    java線程本地變量ThreadLocal詳解

    ThreadLocal則為每一個線程提供了一個變量副本,從而隔離了多個線程訪問數(shù)據(jù)的沖突,ThreadLocal提供了線程安全的對象封裝,下面我們就來詳細了解一下吧
    2019-06-06
  • 詳解Spring Boot中整合Sharding-JDBC讀寫分離示例

    詳解Spring Boot中整合Sharding-JDBC讀寫分離示例

    這篇文章主要介紹了詳解Spring Boot中整合Sharding-JDBC讀寫分離示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-03-03
  • 解決mybatis 數(shù)據(jù)庫date 與 java中Date類型映射問題

    解決mybatis 數(shù)據(jù)庫date 與 java中Date類型映射問題

    這篇文章主要介紹了解決mybatis 數(shù)據(jù)庫date 與 java中Date類型映射問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來吧
    2020-11-11
  • Idea 2020.2安裝MyBatis Log Plugin 不可用的解決方法

    Idea 2020.2安裝MyBatis Log Plugin 不可用的解決方法

    小編在使用時發(fā)現(xiàn)Idea 2020.2 MyBatis Log Plugin 收費了,這個可以替代用,小編特此把解決方案分享到腳本之家平臺供大家參考,感興趣的朋友一起看看吧
    2020-11-11
  • IntelliJ IDEA中出現(xiàn)

    IntelliJ IDEA中出現(xiàn)"PSI and index do not match"錯誤的解決辦法

    今天小編就為大家分享一篇關于IntelliJ IDEA中出現(xiàn)"PSI and index do not match"錯誤的解決辦法,小編覺得內容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-10-10
  • SpringBoot使用GTS的示例詳解

    SpringBoot使用GTS的示例詳解

    這篇文章主要介紹了SpringBoot使用GTS的示例詳解,代碼簡單易懂,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-10-10
  • 簡單了解synchronized和lock的區(qū)別

    簡單了解synchronized和lock的區(qū)別

    這篇文章主要介紹了簡單了解synchronized和lock的區(qū)別,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-09-09

最新評論