激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務器之家 - 編程語言 - JAVA教程 - Java Web請求與響應實例詳解

Java Web請求與響應實例詳解

2020-04-26 11:34luoxn28 JAVA教程

這篇文章主要介紹了Java Web請求與響應實例詳解的相關資料,需要的朋友可以參考下

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

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

Java Web請求與響應實例詳解

1、HttpServletResponse

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

發送狀態碼相關函數

 

方法

說明

public void setStatus(int sc)

設置響應消息狀態碼,Web服務器默認產生一個狀態碼為200的狀態行

public void sendError(int sc)

發送表示錯誤信息的狀態碼,第二個方法還增加了一個用于提示說明的文本信息

public void sendError(int sc, String msg)

 

發送響應消息頭相關函數

 

方法

說明

public void addHeader(String name, String value)

設置HTTP響應頭字段,name指定字段名稱,value指定字段值。addHeader可以增加同名的響應頭字段,setHeader則會覆蓋同名的頭字段

public void setHeader(String name, String value)

public void setContentLength(int len)

設置響應消息的實體內容的大小,單位為字節,即設置Content-Length字段的值

public void setContentType(String type)

設置Servlet輸出內容的MIME類型,即設置Content-Type字段的值

public void setCharacterEncoding(String charset)

設置輸出內容字符編碼,即設置Content-Type字段的值,注意,該方法優先級比setContentType的高

public void sendRedirect(String location)

Servlet請求重定向

 

發送響應消息體相關函數

 

方法

說明

public ServletOutputStream getOutputStream()

獲取HttpServletResponse的字節輸出流ServletOutputStram類型

public PrintWriter getWriter()

獲取HttpServletResponse的字符輸出流ServletWriter類型

 

中文輸出亂碼問題

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

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

HttpServletResponse程序示例

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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頭字段可以通知瀏覽器在指定的時間內自動刷新并跳轉到其他頁面,網頁定時刷新并跳轉到指定頁面。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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()

獲取請求行中的參數部分

public String getProtocol()

獲取請求行中協議名稱和版本,如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字段的值

 

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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對象,該對象會將實體內容字節數據轉換為指定字符集編碼的文本字符串

 

獲取請求參數

 

方法

說明

public String getParameter(String name)

獲取指定的參數值,沒有該參數返回null

public Enumeration<String> getParameterNames()

返回一個包含所有參數名的Enumeration對象

public String[] getParameterValues(String name)

HTTP請求中可能有多個相同的參數,獲取同一個參數名對應的所有參數值

 

3、RequestDispatcher接口

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

RequestDispatcher接口中方法

 

方法

功能

public void forward(ServletRequest request, ServletResponse response)

將一個Servlet傳遞給另外一個Web資源,將請求傳遞給其他資源進行響應

public void include(ServletRequest request, ServletResponse response)

用于將其他資源作為當前響應內容包含進來

 

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 婷婷亚洲一区二区三区 | 免费一级在线观看 | 看片一区二区三区 | 欧美成人精品 | 日本免费aaa观看 | 高清av在线 | 日本在线视频一区二区三区 | 天天都色视频 | 色日本视频 | 污版视频在线观看 | 国产69精品久久久久99尤 | 三级xxxx | 欧美性生活久久 | 亚洲精品午夜国产va久久成人 | 欧美日韩精品不卡一区二区三区 | 国产精品99久久久久久大便 | 国产视频软件在线 | 在线看毛片的网站 | xxxeexxx性国产 | 一本精品999爽爽久久久 | 草草视频在线播放 | 欧产日产国产精品乱噜噜 | 国产一级毛片在线看 | 久久精品小短片 | 手机在线看片国产 | 777sesese| 国产99久久精品一区二区 | 九九午夜 | 国产超碰人人做人人爱ⅴa 国产精品久久久久久久hd | 中国老女人一级毛片视频 | 精品欧美一区二区精品久久 | 少妇一级淫片高潮流水电影 | 国产精品国产 | 19禁国产精品福利视频 | 久久99国产视频 | 欧美日韩在线视频观看 | 精品一区二区三区免费毛片 | 娇妻被各种姿势c到高潮小说 | 久久吊 | 欧美四级在线观看 | 免费一级特黄欧美大片勹久久网 |