Hallo Welt mit Google App Engine (Java 8) + Servlet API 3.1 + Gradle

Überblick

--Google App Engine Java 8-Standardumgebung + Servlet API 3.1-Konfiguration zum Bereitstellen einfacher Servlets und JSPs (Java Server Pages)

Umgebung

Java 8-Standardumgebung von Google App Engine

Jetty 9 + Servlet API 3.1 (oder 2.5) kann verwendet werden. Als Entwickler können Sie eine War-Datei erstellen und bereitstellen, sodass Sie sich keine Sorgen um Jetty machen müssen.

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.

Quellcode

Quellcodeliste

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

build.gradle

Gradle Build-Konfigurationsdatei.

build.gradle


buildscript {
  repositories {
    mavenCentral()
  }
  dependencies {
    //Verwenden Sie das Google App Engine Gradle-Plugin
    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 {

  //Verwenden Sie Apache Commons Text für HTML-Escapezeichen
  implementation 'org.apache.commons:commons-text:1.8'

  // Servlet API 3.Verwende 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

Ein Servlet, das beim Zugriff auf https: // project ID.appspot.com/hello HTML zurückgibt.

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>");

    //Eigenschaften des Ausgabesystems
    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>");
    }

    //Umgebungsvariablen ausgeben
    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>");
    }

    //Laufzeitinformationen ausgeben
    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

Eine JSP-Datei, die beim Zugriff auf https: // project ID.appspot.com/ HTML zurückgibt.

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>
  <!--Systemeigenschaften können festgelegt werden-->
  <system-properties>
    <property name="com.example.HelloServlet.message" value="Hello, system property."/>
  </system-properties>
  <!--Umgebungsvariablen können eingestellt werden-->
  <env-variables>
    <env-var name="COM_EXAMPLE_HELLOSERVLET_MESSAGE" value="Hello, environment variable." />
  </env-variables>
</appengine-web-app>

Operation

Aufgaben des Google App Engine Gradle-Plugins

Sie können mithilfe der Funktionen des Google App Engine Gradle-Plugins bereitstellen. Sie können die Aufgaben überprüfen, die mit dem Befehl gradleasks ausgeführt werden können.

$ 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
(Folgendes wird weggelassen)

Starten Sie den Server lokal mit gradle appengineRun

Sie können den lokalen Server http: // localhost: 8080 / mit gradle appengineRun starten.

$ gradle appengineRun

Bereitstellung mit gradle appengineDeploy in Google App Engine

Kann mit gradle appengineDeploy in Google App Engine bereitgestellt werden. Geben Sie vor der Bereitstellung die Projekt-ID des Bereitstellungsziels in "gcloud config set project project ID" an.

$ gradle appengineDeploy

Referenzmaterial

Recommended Posts

Hallo Welt mit Google App Engine (Java 8) + Servlet API 3.1 + Gradle
Hallo Welt mit Google App Engine (Java 8) + Spring Boot + Gradle
Hallo Welt mit Google App Engine (Java 11) + Spring Boot + Gradle
Google AppEngine-Entwicklung mit Docker
Java 1 1-Unterstützung von Google App Engine
Erstellen einer Entwicklungsumgebung mit Maven in Google App Engine [Java]
Verwenden der Eigenschaftendatei mit Flexible Environment Java 8 von Google App Engine
Ich kann nicht mehr mit der Google App Engine bereitstellen
Tweet (API 1.1) mit Google App Engine für Python
Integration von Google App Engine-Datenspeicher und Such-API
Hallo Welt mit ctypes
Hallo, Welt mit Docker
Hallo Welt auf Flasche
PIL in Python unter Windows8 (für Google App Engine)
Erste Schritte mit Google App Engine für Python und PHP
Verschiedene Memoranden bei Verwendung von SDK der LINE Messaging API mit Python (2.7.9) + Google App Engine
Zeichne Hallo Welt mit mod_wsgi
Hallo Welt mit Flask + Hamlish
Bis hallo Welt mit Zappa
Stellen Sie Go-Apps mit GitHub-Aktionen für Google App Engine bereit
Python beginnend mit Hallo Welt!
Hallo Welt! Mit virtueller CAN-Kommunikation
[Hinweis] Hallo Weltausgabe mit Python
Verwenden Sie ndb.tasklet mit Google App Engine
Hallo Welt! Von QPython mit Braincrash
Einführung der Google Map API mit Schienen
Hallo Welt- und Gesichtserkennung mit opencv-python 4.2
Streaming-Spracherkennung mit der Google Cloud Speech API
Hallo Welt mit Raspberry Pi + Minecraft Pi Edition
[Python] Führen Sie Flask in Google App Engine aus
[Google App Engine] Benutzerobjekte (japanische Übersetzung)
Verwenden Sie externe Module mit Google App Engine
Holen Sie sich Urlaub mit der Google Kalender-API
Hallo Welt! Von QPython mit Brainfu * k
Eine Web-App, die Hello World nur mit dem net / http-Paket von Go ausführt