全部產品
Search
文件中心

:HTTP請求處理常式(HTTP Handler)

更新時間:Jul 06, 2024

您可以使用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 ComputeHttpServletRequest中預封裝了一些屬性,您可以通過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官方庫包含了使用各種處理常式類型和介面的應用程式範例。每個應用程式範例都包含用於輕鬆編譯部署的方法。例如: