Inleiding om te spelen in Java

1. Overzicht

Het doel van deze intro-tutorial is om het Play Framework te verkennen en erachter te komen hoe we er een webapplicatie mee kunnen maken.

Play is een webapplicatieframework met hoge productiviteit voor programmeertalen waarvan de code is gecompileerd en uitgevoerd op de JVM, voornamelijk Java en Scala. Het integreert de componenten en API's die we nodig hebben voor de ontwikkeling van moderne webapplicaties.

2. Speel Framework Setup

Laten we naar de officiële pagina van het Play-framework gaan en de nieuwste versie van de distributie downloaden. Op het moment van deze tutorial is de nieuwste versie 2.7.

We downloaden de zip-map met de Play Java Hello World-tutorial en pakken het bestand uit op een handige locatie. In de root van deze map vinden we een sbt uitvoerbaar bestand dat we kunnen gebruiken om de applicatie uit te voeren. Als alternatief kunnen we installeren sbt van hun officiële pagina.

Gebruiken sbt uit de gedownloade map, laten we het volgende doen:

cd / pad / naar / map / ./sbt uitvoeren

Merk op dat we een script uitvoeren in de huidige directory, vandaar het gebruik van de ./ syntaxis.

Als we installeren sbt, dan kunnen we het in plaats daarvan gebruiken:

cd / pad / naar / map / sbt uitvoeren

Na het uitvoeren van dit commando, zien we een instructie die zegt "(Server gestart, gebruik Enter om te stoppen en terug te gaan naar de console ...)". Dit betekent dat onze applicatie klaar is, dus we kunnen nu naar // localhost: 9000 waar we een Play-welkomstpagina te zien krijgen:

3. Anatomie van afspeeltoepassingen

In dit gedeelte krijgen we een beter begrip van hoe een Play-applicatie is gestructureerd en waarvoor elk bestand en elke directory in die structuur wordt gebruikt.

Als je jezelf meteen wilt uitdagen tot een eenvoudig voorbeeld, ga dan verder met het volgende gedeelte.

Dit zijn de bestanden en mappen die we vinden in een typische Play Framework-applicatie:

├── app → Applicatiebronnen │ ├── activa → Gecompileerde activabronnen │ │ ├── javascripts → Typisch Coffee Script-bronnen │ │ └── stylesheets → Typisch MINDER CSS-bronnen │ ├── controllers → Applicatiecontrollers │ ├── modellen → Applicatie bedrijfslaag │ └── views → Sjablonen ├── build.sbt → Applicatie build script ├── conf → Configuratiebestanden en andere niet-gecompileerde bronnen (op classpath) │ ├── application.conf → Hoofdconfiguratiebestand │ └── routes → Routedefinitie ├── dist → Willekeurige bestanden die in uw projectdistributie moeten worden opgenomen ├── lib → Onbeheerde bibliotheken afhankelijkheden ├── logs → Logboekmap │ └── application.log → Standaard logboekbestand ├─ ─ project → sbt-configuratiebestanden │ ├── build.properties → Markering voor sbt-project │ └── plugins.sbt → sbt-plug-ins inclusief de verklaring voor Play zelf ├── openbaar → Openbare activa │ ├── afbeeldingen → Afbeeldingsbestanden │ ├── javascripts → Javascript-bestanden │ └── stylesheets → CSS-bestanden ├── doel → Gegenereerd iles │ ├── resolution-cache → Informatie over afhankelijkheden │ ├── scala-2.11 │ │ ├── api → Gegenereerde API docs │ │ ├── klassen → Gecompileerde klassenbestanden │ │ ├── routes → Bronnen gegenereerd op basis van routes │ │ └── twirl → Bronnen gegenereerd op basis van sjablonen │ ├── universeel → Applicatie-verpakking │ └── web → Gecompileerde webactiva └── test → bronmap voor unit- of functionele tests 

3.1. De app Directory

Deze directory bevat Java-broncode, websjablonen en bronnen van gecompileerde middelen - in feite alle bronnen en alle uitvoerbare bronnen.

De app map bevat enkele belangrijke submappen, die elk een deel van het MVC-architectuurpatroon inpakken:

  • modellen - dit is de applicatie-bedrijfslaag, de bestanden in dit pakket zullen waarschijnlijk onze databasetabellen modelleren en ons in staat stellen om toegang te krijgen tot de persistentielaag
  • keer bekeken - alle HTML-sjablonen die naar de browser kunnen worden weergegeven, bevinden zich in deze map
  • controllers - een submap waarin we onze controllers hebben. Controllers zijn Java-bronbestanden die acties bevatten die voor elke API-aanroep moeten worden uitgevoerd. Acties zijn openbare methoden die HTTP-verzoeken verwerken en dezelfde resultaten retourneren als HTTP-antwoorden
  • middelen- een submap die gecompileerde items bevat, zoals CSS en javascript. De bovenstaande naamgevingsconventies zijn flexibel, we kunnen onze pakketten bijvoorbeeld maken. een app / utils pakket. We kunnen ook de naamgeving van het pakket aanpassen app / com / baeldung / controllers

Het bevat ook optionele bestanden en mappen die nodig zijn voor de specifieke toepassing.

3.2. De openbaar Directory

Bronnen die zijn opgeslagen in het openbaar directory zijn statische items die rechtstreeks door de webserver worden bediend.

Deze map heeft meestal drie submappen voor afbeeldingen, CSS- en JavaScript-bestanden. Het wordt aanbevolen dat we de activabestanden op deze manier ordenen voor consistentie in alle Play-applicaties.

3.3. De conf Directory

De conf directory bevat applicatieconfiguratiebestanden. De application.conf is waar we de meeste configuratie-eigenschappen voor de Play-applicatie plaatsen. We definiëren eindpunten voor de app in routes.

Als de applicatie extra configuratiebestanden nodig heeft, moeten deze in deze map worden geplaatst.

3.4. De lib Directory

De lib directory is optioneel en bevat onbeheerde bibliotheekafhankelijkheden. Als we potten hebben die niet in het buildsysteem zijn gespecificeerd, plaatsen we ze in deze directory. Ze worden automatisch toegevoegd aan het klassepad van de toepassing.

3.5. De build.sbt het dossier

De build.sbt bestand is het script voor het bouwen van de applicatie. Hier vermelden we de afhankelijkheden die nodig zijn om de applicatie uit te voeren, zoals test- en persistentiebibliotheken.

3.6. De project Directory

Alle bestanden die het buildproces configureren op basis van SBT zijn te vinden in het project directory.

3.7. De doelwit Directory

Deze map bevat alle bestanden die door het buildsysteem zijn gegenereerd, bijvoorbeeld alle .klasse bestanden.

Na het bekijken en verkennen van de directorystructuur voor het Play Framework Hello World-voorbeeld dat we zojuist hebben gedownload, kunnen we nu de basisprincipes van het framework bekijken met behulp van een voorbeeld.

4. Eenvoudig voorbeeld

In dit gedeelte maken we een heel eenvoudig voorbeeld van een webtoepassing. We zullen deze applicatie gebruiken om ons vertrouwd te maken met de basisprincipes van het Play-framework.

In plaats van een voorbeeldproject te downloaden en daaruit voort te bouwen, laten we eens kijken naar een andere manier waarop we een Play Framework-applicatie kunnen maken, met behulp van de sbt nieuw opdracht.

Laten we een opdrachtprompt openen, naar onze gewenste locatie navigeren en de volgende opdracht uitvoeren:

sbt nieuw speelframe / play-java-seed.g8

Voor deze moeten we hebben geïnstalleerd sbt al zoals uitgelegd in Sectie 2.

De bovenstaande opdracht vraagt ​​ons eerst om een ​​naam voor het project. Vervolgens zal het om het domein vragen (omgekeerd, net als de naamgevingsconventie voor pakketten in Java) dat voor de pakketten zal worden gebruikt. We drukken Enter zonder een naam te typen als we de standaardwaarden willen behouden die tussen vierkante haken staan.

De applicatie die met deze opdracht wordt gegenereerd, heeft dezelfde structuur als de applicatie die eerder is gegenereerd. We kunnen daarom doorgaan met het uitvoeren van de applicatie zoals we eerder deden:

cd / pad / naar / map / sbt uitvoeren

Het bovenstaande commando, na voltooiing van de uitvoering, zal een server spawnen op poortnummer 9000 om onze API bloot te leggen, waartoe we toegang hebben // localhost: 9000. We zouden het bericht "Welcome to Play" in de browser moeten zien.

Onze nieuwe API heeft twee endpoints die we nu beurtelings vanuit de browser kunnen uitproberen. De eerste - die we zojuist hebben geladen - is het root-eindpunt, dat een indexpagina laadt met de "Welcome to Play!" bericht.

De tweede, om // localhost: 9000 / activa, is bedoeld voor het downloaden van bestanden van de server door een bestandsnaam toe te voegen aan het pad. We kunnen dit eindpunt testen door het favicon.png bestand, dat is gedownload met de applicatie, op //localhost:9000/assets/images/favicon.png.

5. Acties en controllers

Een Java-methode binnen een controllerklasse die verzoekparameters verwerkt en een resultaat produceert dat naar de client moet worden verzonden, wordt een actie genoemd.

Een controller is een Java-klasse die zich uitbreidt play.mvc.Controller dat logisch acties groepeert die mogelijk verband houden met de resultaten die ze voor de klant opleveren.

Laten we nu naar app-parent-dir / app / controllers en let op HomeController.java.

De HomeControllerMet de indexactie wordt een webpagina geretourneerd met een eenvoudig welkomstbericht:

public Resultaat index () {return ok (views.html.index.render ()); }

Deze webpagina is de standaardpagina inhoudsopgave sjabloon in het views-pakket:

@main ("Welkom bij spelen") {}

Zoals hierboven getoond, is de inhoudsopgave pagina roept de hoofd sjabloon. De hoofdsjabloon zorgt vervolgens voor de weergave van de paginakop- en body-tags. Er zijn twee argumenten nodig: a Draad voor de titel van de pagina en een Html object om in de hoofdtekst van de pagina in te voegen.

@ (title: String) (content: Html) @ * Hier geven we de paginatitel 'String' weer. * @ @title @ * En hier geven we het `Html` -object weer dat * de pagina-inhoud bevat. *@ @inhoud 

Laten we de tekst in het inhoudsopgave bestand een beetje:

@main ("Welcome to Baeldung") {}

Door de browser opnieuw te laden, krijgen we een vetgedrukte kop:

Welkom bij Framework Tutorial on Baeldung!

We kunnen de sjabloon volledig verwijderen door de renderen richtlijn in het inhoudsopgave() methode van de HomeController zodat we platte tekst of HTML-tekst rechtstreeks kunnen retourneren:

public Result index () {return ok ("REST API met spelen door Baeldung"); }

Na het bewerken van de code, zoals hierboven weergegeven, hebben we alleen de tekst in de browser. Dit is gewoon platte tekst zonder HTML of stijl:

REST API met Play door Baeldung

We kunnen net zo goed HTML uitvoeren door de tekst in de koptekst te plaatsen tags en vervolgens de HTML-tekst doorgeven aan de Html. Van toepassing methode. Speel er gerust mee.

Laten we een / baeldung / html eindpunt in routes:

GET / baeldung / html controllers.HomeController.applyHtml

Laten we nu de controller maken die verzoeken op dit eindpunt afhandelt:

public Resultaat applyHtml () {return ok (Html.apply ("")); }

Wanneer we bezoeken // localhost: 9000 / baeldung / html we zien de bovenstaande tekst opgemaakt in HTML.

We hebben onze reactie gemanipuleerd door het reactietype aan te passen. We zullen deze functie in een later gedeelte uitgebreider bekijken.

We hebben ook twee andere belangrijke kenmerken van het Play Framework gezien.

Ten eerste geeft het herladen van de browser de meest recente versie van onze code weer; dat is omdat onze codewijzigingen worden direct gecompileerd.

Ten tweede biedt Play ons hulpmethoden voor standaard HTTP-antwoorden in het play.mvc.Results klasse. Een voorbeeld is de OK() methode, die een OK HTTP 200-antwoord retourneert naast de antwoordtekst die we ernaar doorgeven als een parameter. We hebben de methode al gebruikt om tekst in de browser weer te geven.

Er zijn meer hulpmethoden zoals niet gevonden() en foute aanvraag() in de Resultaten klasse.

6. Resultaten manipuleren

We zijn geweest profiteren van de inhoudsonderhandelingsfunctie van Play zonder het zelfs maar te beseffen. Play leidt automatisch het inhoudstype van de reactie af uit de hoofdtekst van de reactie. Daarom hebben we de tekst in het OK methode:

return ok ("tekst om weer te geven");

En dan zou Play automatisch de Inhoudstype koptekst naar tekst / gewoon. Hoewel dit in de meeste gevallen werkt, kunnen we de controle overnemen en de koptekst van het inhoudstype aanpassen.

Laten we pas het antwoord aan voor HomeController.customContentType actie om tekst / html:

public Resultaat customContentType () {return ok ("Dit is tekstinhoud"). as ("text / html"); }

Dit patroon snijdt door allerlei soorten inhoud. Afhankelijk van het formaat van de gegevens geven we door aan de OK helper-methode, kunnen we vervangen tekst / html door tekst / gewoon of applicatie / json.

We kunnen iets soortgelijks doen om kopteksten in te stellen:

openbaar resultaat setHeaders () {return ok ("Dit is tekstinhoud") .as ("text / html") .withHeader ("Header-Key", "Some value"); }

7. Conclusie

In dit artikel hebben we de basis van het Play Framework verkend. We hebben ook een eenvoudige Java-webtoepassing kunnen maken met Play.

Zoals gewoonlijk is de broncode voor deze tutorial beschikbaar op GitHub.