[JAVA] Hallo Welt mit GlassFish 5.1 + Servlet + JSP

Überblick

--Erstellen Sie eine WAR-Datei mit Gradle, die Java Servlet und JSP enthält

Was ist GlassFish 5.1?

GlassFish 5.1 ist ein Jakarta EE 8- und Java EE 8-kompatibler Webanwendungsserver. Es unterstützt Java Servlet 4.0 und JavaServer Pages 2.3.

Eclipse GlassFish

Eclipse GlassFish is a Jakarta EE compatible implementation sponsored by the Eclipse Foundation. Eclipse GlassFish 5.1 is also Java EE 8 Compatible.

Installieren Sie Java 8

Wenn Java 8 nicht installiert ist, installieren Sie es mit Homebrew usw. und legen Sie die Umgebungsvariablen JAVA_HOME und PATH fest.

$ brew tap AdoptOpenJDK/openjdk

$ brew cask install adoptopenjdk8

$ /usr/libexec/java_home -v 1.8
/Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home

$ export JAVA_HOME=/Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home

$ export PATH=${JAVA_HOME}/bin:${PATH}

Beachten Sie, dass in Java 11 und Java 14 der folgende Fehler auftritt und Glassfish 5.1.0 nicht gestartet wird.

$ ./glassfish5/bin/asadmin start-domain
Exception in thread "main" java.lang.NullPointerException
	at com.sun.enterprise.module.common_impl.AbstractModulesRegistryImpl.initializeServiceLocator(AbstractModulesRegistryImpl.java:128)
	at com.sun.enterprise.module.common_impl.AbstractModulesRegistryImpl.newServiceLocator(AbstractModulesRegistryImpl.java:120)
	at com.sun.enterprise.module.common_impl.AbstractModulesRegistryImpl.createServiceLocator(AbstractModulesRegistryImpl.java:194)
	at com.sun.enterprise.module.common_impl.AbstractModulesRegistryImpl.createServiceLocator(AbstractModulesRegistryImpl.java:200)
	at com.sun.enterprise.module.single.StaticModulesRegistry.createServiceLocator(StaticModulesRegistry.java:64)
	at com.sun.enterprise.admin.cli.CLIContainer.getServiceLocator(CLIContainer.java:193)
	at com.sun.enterprise.admin.cli.CLIContainer.getLocalCommand(CLIContainer.java:231)
	at com.sun.enterprise.admin.cli.CLICommand.getCommand(CLICommand.java:207)
	at com.sun.enterprise.admin.cli.AdminMain.executeCommand(AdminMain.java:347)
	at com.sun.enterprise.admin.cli.AdminMain.doMain(AdminMain.java:282)
	at org.glassfish.admin.cli.AsadminMain.main(AsadminMain.java:33)

Erstellen Sie mit Gradle eine WAR-Datei, die Java Servlet und JSP enthält

Dateiliste

├── build.gradle
└── src
    └── main
        ├── java
        │   └── com
        │       └── example
        │           └── MyServlet.java
        └── webapp
            ├── WEB-INF
            │   └── web.xml
            └── myjsp.jsp

build.gradle

plugins {
  id 'war'
}

repositories {
  mavenCentral()
}

dependencies {
  // Java Servlet 4.0 API
  // https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api
  providedCompile 'javax.servlet:javax.servlet-api:4.0.1'
}

// Java 8
sourceCompatibility = 1.8

// Application
version = '1.0'

src/main/java/com/example/MyServlet.java

package com.example;

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;

@WebServlet("/myservlet")
public class MyServlet extends HttpServlet {

  @Override
  protected void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException {
    res.setContentType("text/html; charset=utf-8");
    try (PrintWriter out = res.getWriter()) {
      out.println("<html><body>");
      out.println("Servlet: Hello Servlet World!<br>");
      out.println(getServletContext().getServerInfo());
      out.println("</body></html>");
    }
  }
}

src/main/webapp/myjsp.jsp

<%@ page contentType="text/html; charset=utf-8" %><html><body>
JSP: Hello JSP World!<br>
<%= pageContext.getServletContext().getServerInfo() %><br>
java.vm.name: <%= System.getProperty("java.vm.name") %><br>
java.vm.vendor: <%= System.getProperty("java.vm.vendor") %><br>
java.vm.version: <%= System.getProperty("java.vm.version") %><br>
</body></html>

src/main/webapp/WEB-INF/web.xml

<?xml version="1.0" encoding="UTF-8"?>

<!-- Web Application Deployment Descriptor (Java Servlet 4.0) -->
<web-app
  xmlns="http://xmlns.jcp.org/xml/ns/javaee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
  http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
  version="4.0">

  <servlet>
    <servlet-name>myjsp</servlet-name>
    <jsp-file>/myjsp.jsp</jsp-file>
  </servlet>

  <servlet-mapping>
    <servlet-name>myjsp</servlet-name>
    <url-pattern>/myjsp</url-pattern>
  </servlet-mapping>

</web-app>

Erstellen Sie eine WAR-Datei

Erstellen Sie eine WAR-Datei mit der Gradle-Build-Aufgabe.

$ gradle build

Stellen Sie sicher, dass die WAR-Datei generiert wird.

$ file build/libs/mywebapp-1.0.war 
build/libs/mywebapp-1.0.war: Zip archive data, at least v1.0 to extract

Installieren Sie GlassFish 5.1.0

Installation gemäß dem offiziellen Handbuch Installation von Eclipse GlassFish Server 5 \ .1.

Von Eclipse GlassFish \ | projects \ .eclipse \ .org bis glassfish-5.1.0.zip (Eclipse GlassFish 5.1.0, vollständiges Profil) Herunterladen.

Extrahieren Sie den heruntergeladenen glassfish-5.1.0.zip in das Installationsverzeichnis.

$ unzip glassfish-5.1.0.zip

Laden Sie einfach die Zip-Datei herunter und entpacken Sie sie, um die Installation abzuschließen.

Starten Sie GlassFish

Schnellstart für grundlegende Funktionen \ -Starten und Stoppen der Standarddomäne Beginnen Sie nach.

$ ./glassfish5/bin/asadmin start-domain
Waiting for domain1 to start ......
Successfully started the domain : domain1
domain  Location: /Users/foo/glassfish5/glassfish/domains/domain1
Log File: /Users/foo/glassfish5/glassfish/domains/domain1/logs/server.log
Admin Port: 4848
Command start-domain executed successfully.

Nach dem Start können Sie den Status von GlassFish in der Administrationskonsole http: // localhost: 4848 / verwalten.

Stellen Sie die WAR-Datei in GlassFish 5.1.0 bereit

Es kann mit dem Befehl asadmin deploy bereitgestellt werden. Details zum Befehl finden Sie im Referenzhandbuch deploy.

$ ./glassfish5/bin/asadmin deploy --contextroot=mywebappcr --name=mywebappname /Users/foo/mywebapp/build/libs/mywebapp-1.0.war
Application deployed with name mywebappname.
Command deploy executed successfully.

Die bereitgestellte WAR-Datei wird im Installationsverzeichnis kopiert und erweitert.

$ find . | grep mywebapp
./glassfish5/glassfish/domains/domain1/generated/xml/mywebappname
./glassfish5/glassfish/domains/domain1/generated/ejb/mywebappname
./glassfish5/glassfish/domains/domain1/generated/policy/mywebappname
./glassfish5/glassfish/domains/domain1/generated/policy/mywebappname/mywebappname
./glassfish5/glassfish/domains/domain1/generated/policy/mywebappname/mywebappname/granted.policy
./glassfish5/glassfish/domains/domain1/generated/jsp/mywebappname
./glassfish5/glassfish/domains/domain1/applications/mywebappname
./glassfish5/glassfish/domains/domain1/applications/mywebappname/myjsp.jsp
./glassfish5/glassfish/domains/domain1/applications/mywebappname/META-INF
./glassfish5/glassfish/domains/domain1/applications/mywebappname/META-INF/MANIFEST.MF
./glassfish5/glassfish/domains/domain1/applications/mywebappname/WEB-INF
./glassfish5/glassfish/domains/domain1/applications/mywebappname/WEB-INF/classes
./glassfish5/glassfish/domains/domain1/applications/mywebappname/WEB-INF/classes/com
./glassfish5/glassfish/domains/domain1/applications/mywebappname/WEB-INF/classes/com/example
./glassfish5/glassfish/domains/domain1/applications/mywebappname/WEB-INF/classes/com/example/MyServlet.class
./glassfish5/glassfish/domains/domain1/applications/mywebappname/WEB-INF/web.xml
./glassfish5/glassfish/domains/domain1/applications/__internal/mywebappname
./glassfish5/glassfish/domains/domain1/applications/__internal/mywebappname/mywebapp-1.0.war

Funktionsprüfung

Überprüfen Sie den Betrieb der bereitgestellten Webanwendung.

(Ich bin ein wenig besorgt, dass Servlet / 3.1 ausgegeben wird, obwohl es mit Servlet 4.0 kompatibel sein sollte.)

$ curl --include http://localhost:8080/mywebappcr/myservlet
HTTP/1.1 200 OK
Server: GlassFish Server Open Source Edition  5.1.0 
X-Powered-By: Servlet/3.1 JSP/2.3 (GlassFish Server Open Source Edition  5.1.0  Java/AdoptOpenJDK/1.8)
Content-Type: text/html;charset=utf-8
Content-Length: 118

<html><body>
Servlet: Hello Servlet World!<br>
GlassFish Server Open Source Edition  5.1.0 
</body></html>
$ curl --include http://localhost:8080/mywebappcr/myjsp
HTTP/1.1 200 OK
Server: GlassFish Server Open Source Edition  5.1.0 
X-Powered-By: JSP/2.3
Set-Cookie: JSESSIONID=0123456789abcdef0123456789ab; Path=/mywebappcr; HttpOnly
Content-Type: text/html;charset=utf-8
Content-Length: 230

<html><body>
JSP: Hello JSP World!<br>
GlassFish Server Open Source Edition  5.1.0 <br>
java.vm.name: OpenJDK 64-Bit Server VM<br>
java.vm.vendor: AdoptOpenJDK<br>
java.vm.version: 25.265-b01<br>
</body></html>

Heben Sie die Bereitstellung der Webanwendung auf

Sie können die bereitgestellte Webanwendung mit dem Befehl asadmin undeploy entfernen.

$ ./glassfish5/bin/asadmin undeploy mywebappname
Command undeploy executed successfully.

Stoppen Sie GlassFish

Es kann mit dem Befehl asadmin stop-domain gestoppt werden.

$ ./glassfish5/bin/asadmin stop-domain
Waiting for the domain to stop .
Command stop-domain executed successfully.

Referenzmaterial

Recommended Posts

Hallo Welt mit GlassFish 5.1 + Servlet + JSP
Hallo Welt mit Micronaut
Führen Sie JSP Hello World mit Tomcat auf Docker aus
Hallo Welt mit Spring Boot
Hallo Welt mit Spring Boot!
Hallo Welt mit VS Code!
Erste Schritte mit JSP & Servlet
Hallo Welt mit Spring Boot
Hallo Welt mit SpringBoot / Gradle
Hallo Welt, mit Asakusa Framework!
Hallo Welt mit Java Servlet und JSP (Einfacher Start des Webservers mit Maven + Jetty)
Hallo Welt mit Kotlin und JavaFX
Übergeben von Parametern aus JSP mit Servlet
(Intellij) Hallo Welt mit Spring Boot
Erstellen Sie PDF mit itext7 ~ HelloWorld ~
"Hallo Welt" für ImageJ mit Eclipse
Hallo Welt mit GWT 2.8.2 und Maven
Hallo Welt mit Eclipse + Spring Boot + Maven
Hallo Welt mit Java Template Engine Thymeleaf
Java-Entwicklung mit Codenvy: Hello World! Run
"Hallo Welt!" Mit Kotlin + CLI in 5 Minuten
Hallo Welt mit Kotlin und Tornado FX
Wie Spring Security mit Hello World funktioniert
(IntelliJ + gradle) Hallo Welt mit Spring Boot
Lesen Sie "Hallo Welt"
Java, Hallo Welt!
Java Hallo Welt
Hallo Welt mit JavaFX 11 (OpenJFX) von Liberica JDK 11
Hallo Welt! Mit Spring Boot (Marven + Texteditor)
[Java] Hallo Welt mit Java 14 x Spring Boot 2.3 x JUnit 5 ~
Zeigen Sie eine einfache Hallo Welt mit SpringBoot + IntelliJ
Versuchen Sie, Hallo Welt mit Frühling + Gradle anzuzeigen
Mit Rails + Docker einfach Hallo Welt anzuzeigen
"Hallo Welt" in Java
Hallo Welt (REST API) mit Apache Camel + Spring Boot 2
Java lernen (1) -Hallo Welt
Über [Servlet] [JSP] [Tomcat]
Lesen Sie System.out.println ("Hallo Welt")
Schreiben wir Hello World
Hallo Welt in Java
Java-Teil 1-Hallo Welt studieren
Hallo Welt mit Web Assembly
Hallo Welt (Konsolen-App) mit Apache Camel + Spring Boot 2
[Java] Eine Art von Alphabet verboten Mit Bindung Hallo, Welt! [Bindung]
Hallo Welt mit Ruby-Erweiterungsbibliothek vorerst
Erstellen Sie eine Hello World-Webanwendung mit Spring Framework + Jetty
Bis Sie eine Webanwendung mit Servlet / JSP erstellen (Teil 1)
[Vue Rails] "Hallo Vue!" Wird mit Vue + Rails angezeigt
Java Hallo Welt, kompilieren, ausführen
Zeichnen einer Java-Servlet / JSP-Ansicht
JSP-Fehleranzeige vom Servlet
Java-Anfänger lesen Hello World
Vergleich der WEB-Anwendungsentwicklung mit Rails und Java Servlet + JSP
Erstellen Sie eine Memo-App mit Tomcat + JSP + Servlet + MySQL mit Eclipse
[Swift] Erstellen Sie ein Projekt mit Xcode (Version 12.1) und zeigen Sie "Hallo Welt!"
Bis Sie Hello World of JavaFX mit VSCode + Gradle ausführen
Probieren Sie HelloWorld mit der Mindestkonfiguration von Heroku Java Spring-Boot aus
Vergleiche Hallo Welt! Mit Spring Boot mit Java, Kotlin und Groovy
[Einführung in JSP + Servlet] Ich habe eine Weile damit gespielt ♬