91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Netty4之怎么實現HTTP請求、響應

發布時間:2023-04-04 10:44:52 來源:億速云 閱讀:176 作者:iii 欄目:開發技術

本文小編為大家詳細介紹“Netty4之怎么實現HTTP請求、響應”,內容詳細,步驟清晰,細節處理妥當,希望這篇“Netty4之怎么實現HTTP請求、響應”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。

1.Netty中HTTP請求和響應類

請求(FullHttpRequest)

/**
 * Combine the {@link HttpRequest} and {@link FullHttpMessage}, so the request is a <i>complete</i> HTTP
 * request.
 */
public interface FullHttpRequest extends HttpRequest, FullHttpMessage {

可以看到,它結合了HttpRequest、FullHttpMessag,作為一個完整的HTTP請求體。

默認實現為DefaultFullHttpRequest

響應(FullHttpResponse)

/**
 * Combination of a {@link HttpResponse} and {@link FullHttpMessage}.
 * So it represent a <i>complete</i> http response.
 */
public interface FullHttpResponse extends HttpResponse, FullHttpMessage {

同樣,它結合了HttpResponse、FullHttpMessage

默認實現為DefaultFullHttpResponse

*

2.Netty中客戶端、服務端的編解碼器

作為服務端而言:

主要工作就是接收客戶端請求,將客戶端的請求內容解碼;發送響應給客戶端,并將發送內容編碼

所以,服務端需要兩個編解碼器

* HttpRequestDecoder(將請求內容解碼)

* HttpResponseEncoder(將響應內容編碼)

作為客戶端而言:

主要工作就是發送請求給服務端,并將發送內容編碼;接收服務端響應,并將接收內容解碼;

所以,客戶端需要兩個編解碼器

* HttpResponseDecoder(將響應內容解碼)

* HttpRequestEncoder(將請求內容編碼)

3.Server端編寫Handler類處理客戶請求

創建Handler,命名為HttpHandler,具體內容如下:

import com.alibaba.fastjson.JSONObject;

import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import io.netty.channel.ChannelFutureListener;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelInboundHandlerAdapter;
import io.netty.handler.codec.http.DefaultFullHttpResponse;
import io.netty.handler.codec.http.FullHttpRequest;
import io.netty.handler.codec.http.FullHttpResponse;
import io.netty.handler.codec.http.HttpHeaderNames;
import io.netty.handler.codec.http.HttpHeaders;
import io.netty.handler.codec.http.HttpMethod;
import io.netty.handler.codec.http.HttpResponseStatus;
import io.netty.handler.codec.http.HttpVersion;
import io.netty.util.CharsetUtil;
import lombok.Data;

/**
 * 處理HTTP請求
 * @author Administrator
 *
 */
public class HttpHandler extends ChannelInboundHandlerAdapter {

	@Override
	public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
	
		if(msg instanceof FullHttpRequest){
			
			FullHttpRequest req = (FullHttpRequest)msg;
			
			try {
				
				// 1.獲取URI
				String uri = req.uri();
				
				// 2.獲取請求體
				ByteBuf buf = req.content();
				String content = buf.toString(CharsetUtil.UTF_8);
				
				// 3.獲取請求方法
				HttpMethod method = req.method();
				
				// 4.獲取請求頭
				HttpHeaders headers = req.headers();
				
				// 5.根據method,確定不同的邏輯
				if(method.equals(HttpMethod.GET)){
					
					// TODO 
				}
				
				if(method.equals(HttpMethod.POST)){
					// 接收用戶輸入,并將輸入返回給用戶
					Content c = new Content();
					c.setUri(uri);
					c.setContent(content);
					
					response(ctx, c);
				}
				
				if(method.equals(HttpMethod.PUT)){
					// TODO 
				}
				
				if(method.equals(HttpMethod.DELETE)){
					// TODO 
				}
			} finally {
				req.release();
			}
		}
	}

	private void response(ChannelHandlerContext ctx, Content c) {

		// 1.設置響應
		FullHttpResponse resp = new DefaultFullHttpResponse(HttpVersion.HTTP_1_1,
				HttpResponseStatus.OK, 
				Unpooled.copiedBuffer(JSONObject.toJSONString(c), CharsetUtil.UTF_8));
		
		resp.headers().set(HttpHeaderNames.CONTENT_TYPE, "text/html; charset=UTF-8");
		
		// 2.發送
		// 注意必須在使用完之后,close channel
		ctx.writeAndFlush(resp).addListener(ChannelFutureListener.CLOSE);
	}
}

@Data
class Content{
	String uri;
	String content;
}

注意:

在處理過程中,把msg轉換為FullHttpRequest,可以獲取關于請求的所有內容;

在發送響應時必須要監聽CLOSE

*

4.測試

啟動Server類使用客戶端發送請求

在這里,筆者不單獨編寫Netty客戶端代碼,直接使用PostMan來充當客戶端發送請求,具體如下:

Netty4之怎么實現HTTP請求、響應

發送一個post請求,并填寫body,點擊send,可以看到響應如下所示:

Netty4之怎么實現HTTP請求、響應

讀到這里,這篇“Netty4之怎么實現HTTP請求、響應”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

东至县| 陆河县| 栾城县| 渭南市| 太和县| 登封市| 盐津县| 小金县| 呼图壁县| 固原市| 壶关县| 邳州市| 彩票| 凤山县| 长乐市| 库尔勒市| 綦江县| 株洲市| 榆树市| 荔波县| 赞皇县| 十堰市| 改则县| 呼玛县| 大悟县| 长寿区| 喀什市| 灵寿县| 瑞安市| 宁海县| 巴林右旗| 华坪县| 弥勒县| 太白县| 凤冈县| 周至县| 许昌市| 常山县| 邢台市| 个旧市| 顺昌县|