您可以使用HTTP Handler更方便地處理HTTP請求。當調用函數時,函數計算運行您提供的執行方法來處理HTTP請求。本文介紹Java HTTP Handler的結構和特點。

HTTP Handler簽名

函數計算提供基于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

    函數計算的HTTP觸發器的接口使用標準的Servlet協議。您的請求會封裝成HttpServletRequest對象,請求參數、請求頭等均可通過此對象獲取。除此之外,函數計算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

示例程序

函數計算官方庫包含了使用各種處理程序類型和接口的示例應用程序。每個示例應用程序都包含用于輕松編譯部署的方法。例如: