Hello World avec Google App Engine (Java 8) + API Servlet 3.1 + Gradle

Aperçu

environnement

Environnement standard Google App Engine Java 8

Jetty 9 + Servlet API 3.1 (ou 2.5) peut être utilisé. En tant que développeur, vous pouvez créer un fichier war et le déployer, vous n'avez donc pas à vous soucier de Jetty.

Migrating from Java 7 to Java 8 Runtime  |  App Engine standard environment for Java 8  |  Google Cloud

Jetty 9 supports both Servlet 2.5 and 3.1 web applications, including servlet annotations.

Code source

Liste des codes sources

├── build.gradle
├── settings.gradle
└── src
    └── main
        ├── java
        │   └── com
        │       └── example
        │           └── HelloServlet.java
        └── webapp
            ├── WEB-INF
            │   └── appengine-web.xml
            └── index.jsp

build.gradle

Fichier de configuration de construction Gradle.

build.gradle


buildscript {
  repositories {
    mavenCentral()
  }
  dependencies {
    //Utiliser le plugin Gradle de Google App Engine
    classpath 'com.google.cloud.tools:appengine-gradle-plugin:1.+'
  }
}

repositories {
  mavenCentral()
}

apply plugin: 'java'
apply plugin: 'war'

// App Engine tasks
apply plugin: 'com.google.cloud.tools.appengine'

dependencies {

  //Utiliser le texte Apache Commons pour l'échappement HTML
  implementation 'org.apache.commons:commons-text:1.8'

  // Servlet API 3.Utiliser 1
  providedCompile 'javax.servlet:javax.servlet-api:3.1.0'
}

group = "com.example" // Generated output GroupId
version = "1.0.0" // Version in generated output

sourceCompatibility = '1.8'
targetCompatibility = '1.8'

settings.gradle

settings.gradle


rootProject.name = 'hello'

HelloServlet.java

Un servlet qui renvoie du HTML lors de l'accès à https: // ID de projet.appspot.com/hello.

package com.example;

import org.apache.commons.text.StringEscapeUtils;

import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Map;
import java.util.Properties;
import java.util.TreeMap;

@WebServlet("/hello")
public class HelloServlet extends HttpServlet {

  @Override
  protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {

    resp.setContentType("text/html; charset=utf-8");

    PrintWriter out = resp.getWriter();
    out.println("<html><body>");
    out.println("<h1>Hello, Servlet World!</h1>");

    //Propriétés du système de sortie
    out.println("<h2>System Properties</h2>");
    Properties props = System.getProperties();
    for (Object k : new TreeMap<>(props).keySet()) {
      String key = (String) k;
      out.println(h(key) + ": " + h((String) props.get(key)) + "<br>");
    }

    //Variables d'environnement de sortie
    out.println("<h2>Environment Variables</h2>");
    Map<String, String> env = System.getenv();
    for (String key : new TreeMap<>(env).keySet()) {
      out.println(h(key) + ": " + h(env.get(key)) + "<br>");
    }

    //Informations d'exécution de sortie
    out.println("<h2>Runtime.getRuntime()</h2>");
    Runtime r = Runtime.getRuntime();
    out.println("freeMemory: " + r.freeMemory() + "<br>");
    out.println("maxMemory: " + r.maxMemory() + "<br>");
    out.println("totalMemory: " + r.totalMemory() + "<br>");

    out.println("</body></html>");
    out.flush();
    out.close();
  }

  private static String h(String s) {
    return StringEscapeUtils.escapeHtml4(s);
  }
}

index.jsp

Un fichier JSP qui renvoie du HTML lors de l'accès à https: // ID de projet.appspot.com/.

index.jsp


<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Hello, JSP!</title>
</head>
<body>
<p>Hello, JSP!</p>
</body>
</html>

appengine-web.xml

appengine-web.xml


<?xml version="1.0" encoding="utf-8"?>
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
  <runtime>java8</runtime>
  <threadsafe>true</threadsafe>
  <instance-class>F1</instance-class>
  <automatic-scaling>
    <target-cpu-utilization>0.95</target-cpu-utilization>
    <min-instances>0</min-instances>
    <max-instances>1</max-instances>
    <max-concurrent-requests>10</max-concurrent-requests>
  </automatic-scaling>
  <!--Les propriétés système peuvent être définies-->
  <system-properties>
    <property name="com.example.HelloServlet.message" value="Hello, system property."/>
  </system-properties>
  <!--Les variables d'environnement peuvent être définies-->
  <env-variables>
    <env-var name="COM_EXAMPLE_HELLOSERVLET_MESSAGE" value="Hello, environment variable." />
  </env-variables>
</appengine-web-app>

opération

Tâches du plug-in Google App Engine Gradle

Vous pouvez effectuer le déploiement à l'aide des fonctionnalités du plug-in Google App Engine Gradle. Vous pouvez vérifier les tâches qui peuvent être exécutées avec la commande gradle tasks.

$ gradle tasks

> Task :tasks

------------------------------------------------------------
Tasks runnable from root project
------------------------------------------------------------

App Engine Standard environment tasks
-------------------------------------
appengineDeploy - Deploy an App Engine application
appengineDeployCron - Deploy Cron configuration
appengineDeployDispatch - Deploy Dispatch configuration
appengineDeployDos - Deploy Dos configuration
appengineDeployIndex - Deploy Index configuration
appengineDeployQueue - Deploy Queue configuration
appengineRun - Run an App Engine standard environment application locally
appengineShowConfiguration - Show current App Engine plugin configuration
appengineStage - Stage an App Engine standard environment application for deployment
appengineStart - Run an App Engine standard environment application locally in the background
appengineStop - Stop a locally running App Engine standard environment application
explodeWar - Explode a war into a directory
(Ce qui suit est omis)

Démarrez le serveur localement avec gradle appengineRun

Vous pouvez démarrer le serveur local http: // localhost: 8080 / avec gradle appengineRun.

$ gradle appengineRun

Déployer sur Google App Engine avec gradle appengineDeploy

Peut être déployé sur Google App Engine avec gradle appengineDeploy. Avant le déploiement, spécifiez l'ID de projet de la destination de déploiement dans "gcloud config set project ID de projet".

$ gradle appengineDeploy

Matériel de référence

Recommended Posts

Hello World avec Google App Engine (Java 8) + API Servlet 3.1 + Gradle
Hello World avec Google App Engine (Java 8) + Spring Boot + Gradle
Hello World avec Google App Engine (Java 11) + Spring Boot + Gradle
Développement Google AppEngine avec Docker
Prise en charge de Java 1 1 par Google App Engine
Création d'un environnement de développement avec Maven sur Google App Engine [Java]
Utilisation du fichier de propriétés avec l'environnement flexible Java 8 de Google App Engine
Je ne peux plus déployer avec le moteur d'application Google
Tweet (API 1.1) avec Google App Engine pour Python
Intégration de la banque de données Google App Engine et de l'API de recherche
bonjour le monde avec ctypes
Bonjour le monde avec Docker
Bonjour le monde sur flacon
PIL en Python sur Windows8 (pour Google App Engine)
Premiers pas avec Google App Engine pour Python et PHP
Divers mémorandums lors de l'utilisation du sdk de l'API de messagerie LINE avec Python (2.7.9) + Google App Engine
Dessinez bonjour le monde avec mod_wsgi
Bonjour le monde avec Flask + Hamlish
Jusqu'à bonjour le monde avec zappa
Déployer des applications Go sur Google App Engine avec des actions GitHub
Python commençant par Hello world!
Bonjour tout le monde! Avec la communication CAN virtuelle
[Note] Sortie Hello world avec python
Utilisez ndb.tasklet avec Google App Engine
Hello World! Par QPython avec Braincrash
Présentation de l'API Google Map avec rails
Hello World et détection de visage avec opencv-python 4.2
Reconnaissance vocale en streaming avec l'API Google Cloud Speech
Bonjour le monde avec Raspberry Pi + Minecraft Pi Edition
[Python] Exécutez Flask sur Google App Engine
[Google App Engine] Objets utilisateur (traduction en japonais)
Utiliser des modules externes avec Google App Engine
Obtenez des vacances avec l'API Google Agenda
Hello World! Par QPython avec Brainfu * k
Une application Web qui ne fait que Hello World avec le package net / http de Go