Introduktion til at spille i Java

1. Oversigt

Formålet med denne introduktionsvejledning er at udforske Play Framework og finde ud af, hvordan vi kan oprette en webapplikation med den.

Play er en højproduktiv webapplikationsramme til programmeringssprog, hvis kode er kompileret og kørt på JVM, hovedsageligt Java og Scala. Det integrerer de komponenter og API'er, vi har brug for til moderne webapplikationsudvikling.

2. Afspil Framework Setup

Lad os gå over til Play framework's officielle side og downloade den nyeste version af distributionen. På tidspunktet for denne vejledning er den seneste version 2.7.

Vi downloader Play Java Hello World-tutorial-zip-mappen og pakker filen ud på et praktisk sted. I roden af ​​denne mappe finder vi en sbt eksekverbar, som vi kan bruge til at køre applikationen. Alternativt kan vi installere sbt fra deres officielle side.

At bruge sbt fra den downloadede mappe, lad os gøre følgende:

cd / sti / til / mappe / ./sbt køre

Bemærk, at vi kører et script i den aktuelle mappe, dermed brugen af ./ syntaks.

Hvis vi installerer sbt, så kan vi bruge det i stedet:

cd / sti / til / mappe / sbt køre

Efter at have kørt denne kommando, ser vi en erklæring, der siger "(Server startet, brug Enter for at stoppe og gå tilbage til konsollen ...)". Det betyder, at vores ansøgning er klar, derfor kan vi nu gå videre til // localhost: 9000 hvor vi får en Play Velkomstside:

3. Anatomi af legeapplikationer

I dette afsnit får vi en bedre forståelse af, hvordan en Play-applikation er struktureret, og hvad hver fil og katalog i den struktur bruges til.

Hvis du med det samme gerne vil udfordre dig selv til et simpelt eksempel, skal du springe til næste afsnit.

Dette er de filer og mapper, vi finder i en typisk Play Framework-applikation:

├── app → Applikationskilder │ ├── aktiver → Kompilerede aktivkilder │ │ ├── javascripts → Typisk Coffee Script-kilder │ │ └── stylesheets → Typisk MINDRE CSS-kilder │ ├── controllere → Application controllers ers ├── modeller → Application business lag │ └── visninger → Skabeloner ├── build.sbt → Application build script ├── conf → Konfigurationsfiler og andre ikke-kompilerede ressourcer (på klassesti) │ ├── application.conf → Hovedkonfigurationsfil │ └── ruter → Rutedefinition ├── dist → Tilfældige filer, der skal medtages i din projektfordeling ├── lib → Ikke-administrerede biblioteksafhængigheder ├── logs → Logs-mappe │ └── application.log → Standardlogfil ├─ ─ projekt → sbt-konfigurationsfiler │ ├── build.properties → Markør for sbt-projekt │ └── plugins.sbt → sbt-plugins inklusive erklæringen for Play selv ├── offentlig → Offentlige aktiver │ ├── billeder → Billedfiler │ ├── javascripts → Javascript files │ └── stylesheets → CSS files ├── target → Generated f iles │ ├── opløsning-cache → Oplysninger om afhængigheder │ ├── scala-2.11 │ │ ├── api → Genererede API-dokumenter │ │ ├── klasser → Kompilerede klassefiler │ │ ├── ruter → Kilder genereret fra ruter │ │ └── twirl → Kilder genereret fra skabeloner │ ├── universal → Applikationsemballage │ └── web → Kompilerede webaktiver └── test → kildemappe til enhedstest eller funktionstest 

3.1. Det app Vejviser

Denne mappe indeholder Java-kildekode, webskabeloner og kompilerede aktiver 'kilder - dybest set alle kilder og alle eksekverbare ressourcer.

Det app -mappen indeholder nogle vigtige underkataloger, som hver pakker en del af MVC-arkitektoniske mønster:

  • modeller - dette er applikationsforretningslaget, filerne i denne pakke vil sandsynligvis modellere vores databasetabeller og give os adgang til persistenslaget
  • synspunkter - alle HTML-skabeloner, der kan gengives til browseren, indeholder denne mappe
  • controllere - en underkatalog, hvor vi har vores controllere. Controllere er Java-kildefiler, der indeholder handlinger, der skal udføres for hvert API-opkald. Handlinger er offentlige metoder, der behandler HTTP-anmodninger og returnerer resultater af det samme som HTTP-svar
  • aktiver- en underkatalog, der indeholder kompilerede aktiver såsom CSS og javascript. Ovenstående navngivningskonventioner er fleksible, vi kan oprette vores pakker f.eks. en app / værktøjer pakke. Vi kan også tilpasse navngivningen af ​​pakken app / com / baeldung / controllere

Den indeholder også valgfrie filer og mapper efter behov for den bestemte applikation.

3.2. Det offentlig Vejviser

Ressourcer, der er gemt i offentlig mappe er statiske aktiver, der betjenes direkte af webserveren.

Denne mappe har normalt tre underkataloger til billeder, CSS og JavaScript-filer. Det anbefales, at vi organiserer aktivfiler som denne for at være ensartede i alle Play-applikationer.

3.3. Det konf Vejviser

Det konf bibliotek indeholder programkonfigurationsfiler. Det application.conf er her, hvor vi placerer de fleste konfigurationsegenskaber til Play-applikationen. Vi definerer slutpunkter for appen i ruter.

Hvis applikationen har brug for ekstra konfigurationsfiler, skal de placeres i denne mappe.

3.4. Det lib Vejviser

Det lib bibliotek er valgfri og indeholder ikke-administrerede biblioteksafhængigheder. Hvis vi har krukker, der ikke er specificeret i build-systemet, placerer vi dem i denne mappe. De føjes automatisk til applikationens klassesti.

3.5. Det build.sbt Fil

Det build.sbt filen er scriptet til applikationsbygning. Det er her, vi viser de afhængigheder, der er nødvendige for at køre applikationen, såsom test- og persistensbiblioteker.

3.6. Det projekt Vejviser

Alle filer, der konfigurerer byggeprocessen baseret på SBT, findes i projekt vejviser.

3.7. Det mål Vejviser

Denne mappe indeholder alle filer genereret af build-systemet - for eksempel alle .klasse filer.

Efter at have set og udforsket katalogstrukturen til eksemplet Play Framework Hello World, som vi lige har downloadet, kan vi nu gå gennem fundamentet i rammen ved hjælp af et eksempel.

4. Enkelt eksempel

I dette afsnit opretter vi et meget grundlæggende eksempel på en webapplikation. Vi bruger denne applikation til at gøre os bekendt med de grundlæggende elementer i Play-rammen.

I stedet for at downloade et eksempel på et projekt og opbygge fra det, lad os se en anden måde, hvorpå vi kan oprette en Play Framework-applikation ved hjælp af sbt nyt kommando.

Lad os åbne en kommandoprompt, navigere til vores valgte placering og udføre følgende kommando:

sbt nyt playframework / play-java-seed.g8

Til denne skal vi have installeret sbt allerede som forklaret i afsnit 2.

Ovenstående kommando vil først bede os om et navn til projektet. Dernæst beder den om domænet (omvendt, ligesom pakkenavnekonventionen i Java), der vil blive brugt til pakkerne. Vi trykker Gå ind uden at skrive et navn, hvis vi vil beholde standardindstillingerne, der er angivet i firkantede parenteser.

Den applikation, der genereres med denne kommando, har den samme struktur som den, der blev genereret tidligere. Vi kan derfor fortsætte med at køre applikationen som vi gjorde tidligere:

cd / sti / til / mappe / sbt køre

Ovenstående kommando, efter afslutning af udførelse, vil gyde en server på portnummer 9000 for at afsløre vores API, som vi kan få adgang til gennem // localhost: 9000. Vi skulle se meddelelsen "Velkommen til Play" i browseren.

Vores nye API har to slutpunkter, som vi nu kan prøve igen fra browseren. Den første - som vi lige har indlæst - er rodendepunktet, der indlæser en indeksside med "Velkommen til at spille!" besked.

Den anden kl // localhost: 9000 / aktiver, er beregnet til download af filer fra serveren ved at tilføje et filnavn til stien. Vi kan teste dette slutpunkt ved at få favicon.png fil, der blev downloadet med applikationen, på //localhost:9000/assets/images/favicon.png.

5. Handlinger og controllere

En Java-metode inde i en controller-klasse, der behandler anmodningsparametre og producerer et resultat, der skal sendes til klienten, kaldes en handling.

En controller er en Java-klasse, der udvides play.mvc.Controller der logisk grupperer handlinger, der kan være relateret til resultater, de producerer for klienten.

Lad os nu gå over til app-parent-dir / app / controllere og vær opmærksom på HomeController.java.

Det HomeController'S indekshandling returnerer en webside med en simpel velkomstbesked:

offentligt resultatindeks () {return ok (views.html.index.render ()); }

Denne webside er standard indeks skabelon i visningspakken:

@main ("Velkommen til Play") {}

Som vist ovenfor er indeks side kalder vigtigste skabelon. Hovedskabelonen håndterer derefter gengivelsen af ​​sideoverskriften og brødteksterne. Det kræver to argumenter: a Snor for titlen på siden og en Html objekt, der skal indsættes i selve siden.

@ (titel: String) (indhold: Html) @ * Her gengiver vi sidetitlen `String`. * @ @title @ * Og her gengiver vi 'Html'-objektet, der indeholder * sideindholdet. *@ @indhold 

Lad os ændre teksten i indeks arkiv lidt:

@main ("Velkommen til Baeldung") {}

Genindlæsning af browseren giver os en fed overskrift:

Velkommen til Play Framework Tutorial på Baeldung!

Vi kan fjerne skabelonen helt ved at fjerne gengive direktivet i indeks() metode til HomeController så vi kan returnere almindelig tekst eller HTML-tekst direkte:

offentligt resultatindeks () {return ok ("REST API med Play af Baeldung"); }

Efter redigering af koden, som vist ovenfor, har vi kun teksten i browseren. Dette vil bare være almindelig tekst uden HTML eller styling:

REST API med Play af Baeldung

Vi kunne lige så godt output HTML ved at indpakke teksten i overskriften tags og derefter videresende HTML-teksten til Html. Anvend metode. Du er velkommen til at lege med det.

Lad os tilføje en / baeldung / html slutpunkt i ruter:

GET / baeldung / html-controllere.HomeController.applyHtml

Lad os nu oprette den controller, der håndterer anmodninger om dette slutpunkt:

offentligt resultat applyHtml () {return ok (Html.apply ("")); }

Når vi besøger // localhost: 9000 / baeldung / html vi får vist ovenstående tekst formateret i HTML.

Vi har manipuleret vores svar ved at tilpasse svarstypen. Vi vil se nærmere på denne funktion i et senere afsnit.

Vi har også set to andre vigtige funktioner i Play Framework.

For det første afspejler genindlæsning af browseren den seneste version af vores kode; det er fordi vores kodeændringer kompileres på farten.

For det andet giver Play os hjælpemetoder til standard HTTP-svar i play.mvc.Resultater klasse. Et eksempel er Okay() metode, som returnerer et OK HTTP 200-svar ved siden af ​​responsorganet, som vi sender til det som en parameter. Vi har allerede brugt metoden til at vise tekst i browseren.

Der er flere hjælpemetoder som f.eks ikke fundet() og dårlig anmodning() i Resultater klasse.

6. Manipulere resultater

Vi har været drage fordel af Play's indholdsforhandlingsfunktion uden selv at vide det. Afspilning aflyder automatisk reaktionens indholdstype fra svarorganet. Dette er grunden til, at vi har været i stand til at returnere teksten i Okay metode:

returner ok ("tekst til visning");

Og så vil Play automatisk indstille Indholdstype header til tekst / almindelig. Selv om dette fungerer i de fleste tilfælde, kan vi overtage kontrollen og tilpasse indholdstypeoverskriften.

Lad os tilpasse svaret til HomeController.customContentType handling til tekst / html:

offentligt resultat customContentType () {return ok ("Dette er noget tekstindhold"). som ("text / html"); }

Dette mønster skærer på tværs af alle slags indholdstyper. Afhængigt af formatet på dataene videregives vi til Okay hjælper metode, kan vi erstatte tekst / html ved tekst / almindelig eller ansøgning / json.

Vi kan gøre noget, der ligner indstillingsoverskrifter:

public Result setHeaders () {return ok ("Dette er noget tekstindhold") .as ("text / html") .withHeader ("Header-Key", "Some value"); }

7. Konklusion

I denne artikel har vi udforsket det grundlæggende i Play Framework. Vi har også været i stand til at oprette en grundlæggende Java-webapplikation ved hjælp af Play.

Som normalt er kildekoden til denne vejledning tilgængelig på GitHub.