您可以使用HTTP Handler更方便地處理HTTP請求。當調用函數時,Function Compute運行您提供的執行方法來處理HTTP請求。本文介紹Java HTTP Handler的結構和特點。
HTTP Handler簽名
Function Compute提供基於Servlet協議的HTTP入口,形式如下所示。
public interface HttpRequestHandler {
/**
* The entrance function of fc http trigger
* @param request The servlet request
* @param response The servlet response
* @param context The fc context
* @throws IOException If IO exception happened
* @throws ServletException If servlet exception happened
*/
public void handleRequest(HttpServletRequest request, HttpServletResponse response, Context context) throws IOException, ServletException;
}
HTTP請求處理常式要求您必須為函數配置HTTP觸發器,使用HTTP觸發器需要將fc-java-core
庫版本升級到1.3.0及以上版本,樣本如下。關於HTTP觸發器的詳細資料,請參見HTTP觸發器概述。
<dependency>
<groupId>com.aliyun.fc.runtime</groupId>
<artifactId>fc-java-core</artifactId>
<version>1.4.1</version>
</dependency>
簡單樣本
package com.aliyun.fc.example;
import java.io.IOException;
import java.io.OutputStream;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.aliyun.fc.runtime.Context;
import com.aliyun.fc.runtime.HttpRequestHandler;
public class Hello implements HttpRequestHandler {
public void handleRequest(HttpServletRequest request, HttpServletResponse response, Context context)
throws IOException, ServletException {
String requestPath = (String) request.getAttribute("FC_REQUEST_PATH");
String requestURI = (String) request.getAttribute("FC_REQUEST_URI");
String requestClientIP = (String) request.getAttribute("FC_REQUEST_CLIENT_IP");
response.setStatus(200);
response.setHeader("header1", "value1");
response.setHeader("header2", "value2");
String body = String.format("Path: %s\n Uri: %s\n IP: %s\n", requestPath, requestURI, requestClientIP);
OutputStream out = response.getOutputStream();
out.write((body).getBytes());
}
}
- HttpServletRequest
Function Compute的HTTP觸發器的介面使用標準的Servlet協議。您的請求會封裝成HttpServletRequest對象,請求參數、要求標頭等均可通過此對象擷取。除此之外,Function Compute在HttpServletRequest中預封裝了一些屬性,您可以通過getAttribute方法來擷取,具體包括以下內容:
FC_REQUEST_PATH:擷取請求的路徑。
FC_REQUEST_URI:擷取請求的URI。
FC_REQUEST_CLIENT_IP:擷取請求的Client IP地址。
- HttpServletResponse
您可以通過標準的HttpServletResponse協議對象來返迴響應頭和響應體。
- context
context參數中包含一些函數的運行時資訊(例如Request ID、臨時AccessKey等),其類型是
com.aliyun.fc.runtime.Context
。
樣本程式
Function Compute官方庫包含了使用各種處理常式類型和介面的應用程式範例。每個應用程式範例都包含用於輕鬆編譯部署的方法。例如:
- java11-blank-http:HTTP回調處理常式。