Programiranje

JAX-RS z dresom: Uvod

Specifikacija JAX-RS (JSR 311: Java API za spletne storitve RESTful) zagotavlja standardiziran pristop, ki temelji na Javi, za izvajanje spletnih storitev v slogu REST. Jersey je referenčna izvedba JAX-RS in v tem prispevku v blogu podajam kratek uvod v JAX-RS prek Jerseyja.

Čeprav Jersey ne zahteva uporabe GlassFish, v tej objavi uporabljam Jersey skupaj s GlassFish v3. GlassFish v3 ponuja referenčno izvedbo za Java EE 6. Prenesem namestitveni program Windows GlassFish v3 Windows in ga zaženem za namestitev. Po namestitvi sem nastavil spremenljivko okolja GLASSFISH_HOME , da pokažete na korenski imenik in dodano % GLASSFISH_HOME% meni POT. Nato lahko z ukazom zaženete GlassFish začetna domena asadmin (zažene privzeto domeno), kot je prikazano na naslednjem posnetku zaslona.

Ker sem med namestitvijo GlassFish uporabil privzete nastavitve, je spletna skrbniška konzola na mojem računalniku na voljo na URI // localhost: 4848 / (privzeta vrata so 4848). Ko se GlassFish izvaja, ta URI vodi do prijavne strani za skrbniško konzolo. Pri namestitvi sta bila določena skrbniško uporabniško ime in geslo. Ta zaslon je prikazan v naslednjem posnetku zaslona.

Z nastavljeno GlassFish sem zdaj začel uporabljati zelo preprosto aplikacijo REST z uporabo Jerseyja. Začnem s pravilno označenim razredom JAX-RS, imenovanim MovieOfTheDay:

MovieOfTheDay.java

paket rmoug.td2010.rest; uvoz java.util.Calendar; uvoz java.util.HashMap; uvoz java.util.Map; uvoz java.util.logging.Logger; uvoz javax.ws.rs.GET; uvoz javax.ws.rs.Path; uvoz javax.ws.rs.PathParam; uvoz javax.ws.rs.Consumes; uvoz javax.ws.rs.Produces; / ** * Preprost tečaj, ki ponuja film za določen mesec in dan tega * meseca. * / @Path ("/ movies") javni razred MovieOfTheDay {zasebni statični končni Logger LOGGER = Logger.getLogger ("rmoug.td2010.rest.MovieOfTheDay"); zasebni statični končni zemljevid MOVIE_OF_THE_DAY; static {MOVIE_OF_THE_DAY = nov HashMap(); končni zemljevid janMovies = nov HashMap (); MOVIE_OF_THE_DAY.put (Integer.valueOf (Calendar.JANUARY), janMovies); končni zemljevid febMovies = nov HashMap (); febMovies.put (2, "Dan mraka"); MOVIE_OF_THE_DAY.put (Integer.valueOf (Calendar.FEBRUARY), febMovies); končni zemljevid marMovies = nov HashMap (); marMovies.put (16, "Ubežnik"); marMovies.put (17, "Darby O'Gill in mali ljudje"); MOVIE_OF_THE_DAY.put (Integer.valueOf (Calendar.MARCH), marMovies); končni zemljevid aprMovies = nov HashMap (); MOVIE_OF_THE_DAY.put (Integer.valueOf (Calendar.APRIL), aprMovies); končni zemljevid mayMovies = nov HashMap (); MOVIE_OF_THE_DAY.put (Integer.valueOf (Calendar.MAY), mayMovies); končni zemljevid junMovies = nov HashMap (); MOVIE_OF_THE_DAY.put (Integer.valueOf (Calendar.JUNE), junMovies); končni zemljevid julMovies = nov HashMap (); julMovies.put (4, "Dan neodvisnosti"); MOVIE_OF_THE_DAY.put (Integer.valueOf (Calendar.JULY), julMovies); končni zemljevid augMovies = nov HashMap (); MOVIE_OF_THE_DAY.put (Integer.valueOf (Calendar.AUGUST), augMovies); končni zemljevid sepMovies = nov HashMap (); MOVIE_OF_THE_DAY.put (Integer.valueOf (Calendar.SEPTEMBER), sepMovies); končni zemljevid octMovies = nov HashMap (); MOVIE_OF_THE_DAY.put (Integer.valueOf (Calendar.OCTOBER), octMovies); končni zemljevid novMovies = nov HashMap (); MOVIE_OF_THE_DAY.put (Integer.valueOf (Calendar.NOVEMBER), novMovies); končni zemljevid decMovies = nov HashMap (); decMovies.put (24, "Čudovito življenje je"); decMovies.put (25, "Božična pesem"); decMovies.put (26, "Božična zgodba"); MOVIE_OF_THE_DAY.put (Integer.valueOf (Calendar.DECEMBER), decMovies); } @GET @Path ("/") @Produces ("text / plain") javni niz getMovie () {return "Če si želite ogledati film dneva, navedite URL z mesecem in dnevom:" + "\ t // localhost : 8080 / rest / resources / movies / <> / <> "; } / ** * Pridobite film dneva, kot je navedeno v navedenem mesecu in datumu. * * @param mesec Mesec, za katerega je želeni film dneva. * @param date Datum, za katerega želite film tega dne. * @return Naslov filma dneva za navedeni mesec in datum. * / @GET @Path ("/ {mesec} / {datum}") @Consumes ("text / plain") @Produces ("text / html") public String getMovieOfTheDay (@PathParam ("month") final Integer month , @PathParam ("date") končni celoštevilčni datum) {final Map moviesOfTheMonth = MOVIE_OF_THE_DAY.get (mesec-1); končni niz movieOfTheDay = moviesOfTheMonth! = null? moviesOfTheMonth.get (datum): "Fletch"; vrni filmOfTheDay! = null? generirajHtml (movieOfTheDay, mesec, datum): generirajHtml ("Fletch Lives!", mesec, datum); } zasebni String generira HTML (končni String movieTitle, končni int filmMonth, končni int filmDay) {končni StringBuilder builder = nov StringBuilder (); builder.append ("") .append ("Film dneva") .append ("Film dneva") .append ("

Film dneva za ") .append (movieMonth) .append (" / ") .append (movieDay) .append (" is '") .append (movieTitle) .append ("'.

"); return builder.toString ();}}

Blok statične inicializacije ni specifičen za JAX-RS, temveč se uporablja za simulacijo baze podatkov. V resnični aplikaciji REST bi skoraj zagotovo imel bazo podatkov na zadnji strani, toda statični zemljevid v pomnilniku to simulira tukaj.

Čeprav je zgornji razred preprost, prikazuje ključne lastnosti JAX-RS. Najbolj zanimivi deli razreda JAX-RS so pripisi JAX-RS, kot so @Path, @GET, @Consumes, @Produces in @PathParam. V tem prispevku se ne bom poglabljal v to, kaj počnejo ti pripisi JAX-RS, ker je moj poudarek na uporabi Jerseyja. Oglejte si poglavje Java EE 6 Vadnica o REST-u z Jersey-jem za več informacij o teh opombah.

Razred z oznako JAX-RS bom razporedil v GlassFish v datoteko WAR z ustreznim web.xml datoteka, kot je prikazana naslednja:

web.xml

  ServletAdaptor com.sun.jersey.spi.container.servlet.ServletContainer 1 ServletAdaptor / resources / * 30 

V mojem primeru je to ustvaril NetBeans 6.8 web.xml datoteko samodejno, ko sem v knjižnice svojega projekta dodal ustrezne datoteke JAX-RS in Jersey JAR. To je razmeroma preprosto web.xml datoteka zaradi zavedanja GlassFish o JAX-RS. (Presenetljivo podobno web.xml dela za uvajanje aplikacij REST na osnovi Jerseyja v Tomcat, kot je prikazano v objavi v blogu Jasona Drakea Uvajanje Jerseyja v Tomcat 6.0.)

Za moj primer se imenuje datoteka WAR Počitek 1. vojna se ustvari. Njegova vsebina je prikazana v naslednjem posnetku zaslona.

Kot kaže posnetek zaslona, ​​so v ustvarjeni datoteki WAR vključene datoteke JAX-RS in Jersey JAR. Razred MovieRestApplication lahko prezrete, ker se ne uporablja z Jerseyjem na GlassFish. To pomeni, da so edine datoteke po meri v vojni JAX-RS-označeni razred MovieOfTheDay, web.xml in indeksno stran (index.jsp). Vsebina index.jsp je prikazana naslednja stran.

index.jsp

    REST s primerom JAX-RS 

Naslednji posnetek zaslona prikazuje uporabo ustvarjene datoteke WAR prek spletne skrbniške konzole Glass:

Najpomembnejša podrobnost, ki jo je treba opozoriti na sliki razmestitve datoteke WAR, je ta, da sem kontekstni koren poimenoval "počitek". To bo del URI-jev, s katerimi se dostopa do mojih uvedenih storitev REST. Prej web.xml datoteka to tudi pokazala viri / bo del tega URI-ja za dostop do storitve REST. Preostali del ustreznega URI-ja temelji na delih URI-jev, ki so navedeni v pripisih JAX-RS v razredu Java (/ filmi, /, in / {mesec} / {datum}). Deli URI, označeni s skodranimi oklepaji, kažejo, da bodo ogradam dodane vrednosti iz implementacije JAX-RS, ki so v klicnem URI. Na primer, če je bil ustrezen del URI /7/4, bi to v tem primeru pomenilo mesec 7. (julij, ker v URI ne uporablja indeksa mesecev, ki temelji na Javi, in 4. dan.

Ko je razmestitev uspešna, se prikaže skrbniška konzola, kot je prikazano na naslednjem posnetku zaslona.

Z uvedeno aplikacijo JAX-RS lahko zdaj do nje dostopam iz nešteto različnih odjemalcev. JAX-RS ne določa standardiziranega pristopa za stranke, toda Jersey in večina drugih priljubljenih izvedb JAX-RS ponuja svoj pristop k oblikovanju strank. Na voljo so tudi drugi odjemalci HTTP / REST, kot je RESTClient. Za zdaj bom preprosto uporabljal spletni brskalnik.

Namestitev URI-ja // localhost: 8080 / v mojem brskalniku prikaže glavno stran, ki označuje, da GlassFish deluje:

Če dodam spletni kontekst (počitek) na URI, vidim svoj index.jsp stran:

Za dostop do aplikacij REST, ki jih poganja JAX-RS, moram dodati virov del URI, kot je določeno v web.xml mapa. Ko dodam to plus / filmi del (kot je določeno v @Path komentar), vidim naslednjo stran.

Zgornji posnetek zaslona kaže, da je bil GET dostop poklican s potjo "/" in getMovie imenovana metoda. V tem trenutku lahko v URI dodam mesec in datum, da dobim film za ta dan. Naslednja dva posnetka zaslona to dokazujeta za Groundhog Day in za božični dan.

Kot dokazujejo zgornji posnetki zaslona, ​​ponudnik JAX-RS samodejno vbrizga mesece in dni v URI-jih v parametre na ustrezno metodo. Zdaj je to enostavno!

Zaključek

Postopek uvajanja spletne storitve, ki temelji na JAX-RS, z uporabo Jersey in GlassFish je razmeroma preprost. Vse, kar sem resnično potreboval, je bil dostop do JAX-RS in Jersey JAR-ov, pravilno označenega razreda Java in kratkega web.xml datoteka, ki je Jerseyju omogočala uporabo kot servlet. Ta objava v blogu je poskušala prikazati osnovne korake, povezane s pisanjem preprostega razreda, označenega z JAX-RS, njegovo uporabo v GlassFish in izkoriščanje Jerseyjeve implementacije JAX-RS.

Drugi viri

⇒ Vodnik za razvijalce RESTful Web Services

RESTful Java, nekaj povezav

⇒ JSR 311: Java API za spletne storitve RESTful?

⇒ Uvajanje in preizkušanje aplikacije Jersey brez NetBeans

⇒ Jersey 1.0: Kako začeti

API API JSR-311 na osnovi Javadoc

To zgodbo "JAX-RS z dresom: uvod" je prvotno objavil JavaWorld.

$config[zx-auto] not found$config[zx-overlay] not found