Programovanie

JAX-RS s dresom: Úvod

Špecifikácia JAX-RS (JSR 311: Java API pre RESTful Web Services) poskytuje štandardizovaný prístup založený na Jave k implementácii webových služieb v štýle REST. Jersey je referenčnou implementáciou JAX-RS a ja v tomto blogovom príspevku poskytujem krátke predstavenie JAX-RS prostredníctvom Jersey.

Aj keď Jersey nevyžaduje použitie GlassFish, v tomto príspevku používam Jersey spolu s GlassFish v3. GlassFish v3 poskytuje referenčnú implementáciu pre Java EE 6. Stiahol som si Windows Installer GlassFish v3 a spustil som ho na inštaláciu. Po jeho inštalácii som nastavil premennú prostredia GLASSFISH_HOME ukážte na koreňový adresár inštalácie a pridajte % GLASSFISH_HOME% k môjmu CESTA. GlassFish je potom možné spustiť pomocou príkazu asadmin start-doména (spustí sa predvolená doména), ako je to znázornené na nasledujúcej snímke obrazovky.

Pretože som pri inštalácii GlassFish použil predvolené nastavenia, je webová administratívna konzola k dispozícii na mojom počítači na adrese URI // localhost: 4848 / (predvolený port je 4848). Keď je GlassFish v prevádzke, vedie tento URI na prihlasovaciu stránku pre administratívnu konzolu. V inštalácii bolo zadané administrátorské meno a heslo. Táto obrazovka sa zobrazuje na nasledujúcej snímke obrazovky.

S nastavením GlassFish teraz prechádzam na vývoj veľmi jednoduchej aplikácie REST pomocou Jersey. Začínam so správne komentovanou triedou JAX-RS nazvanou MovieOfTheDay:

MovieOfTheDay.java

balíček rmoug.td2010.rest; import java.util.Calendar; import java.util.HashMap; import java.util.Map; import java.util.logging.Logger; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.spotrebov; import javax.ws.rs.Produces; / ** * Jednoduchá trieda, ktorá poskytuje film za poskytnutý mesiac a deň daného * mesiaca. * / @Path ("/ films") verejná trieda MovieOfTheDay {súkromné ​​statické finále Logger LOGGER = Logger.getLogger ("rmoug.td2010.rest.MovieOfTheDay"); súkromná statická konečná mapa MOVIE_OF_THE_DAY; static {MOVIE_OF_THE_DAY = nová HashMap(); konečná mapa janMovies = nová HashMap (); MOVIE_OF_THE_DAY.put (Integer.valueOf (Calendar.JANUARY), janMovies); finálna mapa febMovies = nová HashMap (); febMovies.put (2, „Hromnice o deň“); MOVIE_OF_THE_DAY.put (Integer.valueOf (Calendar.FEBRUARY), febMovies); finálna mapa marMovies = nová HashMap (); marMovies.put (16, „Utečenec“); marMovies.put (17, „Darby O'Gill and the Little People“); MOVIE_OF_THE_DAY.put (Integer.valueOf (Calendar.MARCH), marMovies); konečná mapa aprMovies = nová HashMap (); MOVIE_OF_THE_DAY.put (Integer.valueOf (Calendar.APRIL), aprMovies); konečná mapa mayMovies = nová HashMap (); MOVIE_OF_THE_DAY.put (Integer.valueOf (Calendar.MAY), mayMovies); konečná mapa junMovies = nová HashMap (); MOVIE_OF_THE_DAY.put (Integer.valueOf (Calendar.JUNE), junMovies); finálna mapa julMovies = nová HashMap (); julMovies.put (4, „Deň nezávislosti“); MOVIE_OF_THE_DAY.put (Integer.valueOf (Calendar.JULY), julMovies); konečná mapa augMovies = nová HashMap (); MOVIE_OF_THE_DAY.put (Integer.valueOf (Calendar.AUGUST), augMovies); konečná mapa sepMovies = nová HashMap (); MOVIE_OF_THE_DAY.put (Integer.valueOf (Calendar.SEPTEMBER), sepMovies); final Map octMovies = new HashMap (); MOVIE_OF_THE_DAY.put (Integer.valueOf (Calendar.OCTOBER), octMovies); konečná mapa novMovies = nová HashMap (); MOVIE_OF_THE_DAY.put (Integer.valueOf (Calendar.NOVEMBER), novMovies); finálna mapa decMovies = nová HashMap (); decMovies.put (24, „Je to úžasný život“); decMovies.put (25, „Vianočná koleda“); decMovies.put (26, „Vianočný príbeh“); MOVIE_OF_THE_DAY.put (Integer.valueOf (Calendar.DECEMBER), decMovies); } @GET @Path ("/") @Produces ("text / plain") public String getMovie () {návrat "Ak si chcete pozrieť film dňa, zadajte adresu URL s mesiacom a dňom:" + "\ t // localhost : 8080 / rest / resources / films / <> / <> "; } / ** * Získajte film dňa podľa označenia v uvedenom mesiaci a dátume. * * @param mesiac Mesiac, pre ktorý je požadovaný film dňa. * @param date Dátum, pre ktorý je požadovaný film dňa. * @return Názov filmu dňa pre uvedený mesiac a dátum. * / @GET @Path ("/ {month} / {date}") @Consumes ("text / plain") @Produces ("text / html") verejný reťazec getMovieOfTheDay (@PathParam ("mesiac") posledný celočíselný mesiac , @PathParam ("date") final Integer date) {final Map filmsOfTheMonth = MOVIE_OF_THE_DAY.get (mesiac-1); záverečný reťazec movieOfTheDay = filmsOfTheMonth! = null? moviesOfTheMonth.get (date): "Fletch"; vrátiť filmOfTheDay! = null? generateHtml (movieOfTheDay, month, date): generateHtml ("Fletch Lives!", month, date); } private String generateHtml (final String movieTitle, final int movieMonth, final int movieDay) {final StringBuilder builder = new StringBuilder (); builder.append ("") .append ("Film dňa") .append ("Film dňa") .append ("

The film of the day for ") .append (movieMonth) .append (" / ") .append (movieDay) .append (" is '") .append (movieTitle) .append ("'.

"); vrátiť builder.toString ();}}

Statický inicializačný blok nie je špecifický pre JAX-RS, ale namiesto toho sa používa na simuláciu databázy. V skutočnej aplikácii REST by som takmer určite mal databázu na zadnej strane, ale tu to simuluje statická mapa v pamäti.

Aj keď je jednoduchá, vyššie uvedená trieda demonštruje kľúčové vlastnosti JAX-RS. Najzaujímavejšie kúsky triedy JAX-RS sú poznámky JAX-RS, ako napríklad @Path, @GET, @Consumes, @Produces a @PathParam. Nebudem sa v tomto príspevku zaoberať tým, čo tieto anotácie JAX-RS, pretože môj dôraz je na použití Jersey. Viac informácií o týchto anotáciách nájdete v kapitole Výukový program Java EE 6 o REST s Jersey.

Triedu s komentárom JAX-RS nasadím do GlassFish v súbore WAR s príslušným web.xml súbor, ako je uvedené ďalej:

web.xml

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

V mojom prípade to vygeneroval NetBeans 6.8 web.xml automaticky, keď som do knižníc môjho projektu pridal príslušné súbory JAX-RS a Jersey JAR. Toto je pomerne jednoduché web.xml súbor kvôli vedomiu spoločnosti GlassFish o JAX-RS. (Nápadne podobný web.xml pracuje na nasadení aplikácií REST založených na Jersey do Tomcatu, čo je demonštrované v blogovom príspevku Jasona Drakea Deploying Jersey in Tomcat 6.0.)

Pre môj príklad sa volá súbor WAR Rest1.war je vygenerovaný. Jeho obsah sa zobrazí na nasledujúcej snímke obrazovky.

Ako naznačuje snímka obrazovky, do vygenerovaného súboru WAR sú zahrnuté súbory JAX-RS a Jersey JAR. Trieda MovieRestApplication možno ignorovať, pretože sa nepoužíva s Jersey na GlassFish. To znamená, že jediné vlastné súbory vo VOJNE sú trieda anotovaná JAX-RS MovieOfTheDay, web.xml súbor a indexová stránka (index.jsp). Obsah index.jsp stránka sa zobrazí ďalej.

index.jsp

    REST s príkladom JAX-RS 

Nasledujúca snímka obrazovky demonštruje nasadenie vygenerovaného súboru WAR prostredníctvom webovej administratívnej konzoly Glass:

Najdôležitejším detailom, ktorý si treba všimnúť z obrázka nasadenia súboru WAR, je to, že som koreň kontextu pomenoval „rest“. Bude to súčasť URI, pomocou ktorých sa pristupuje k mojim nasadeným službám REST. Čím skôr web.xml to ukázal aj spis zdroje / bude tiež súčasťou tohto identifikátora URI prístupu k službe REST. Zvyšok príslušného URI je založený na častiach URI poskytnutých v anotáciách JAX-RS na triede Java (/ filmy, /a / {month} / {date}). Časti URI označené zloženými zátvorkami naznačujú, že zástupné symboly budú vložené s hodnotami z implementácie JAX-RS, ktoré sú vo volajúcom URI. Napríklad ak príslušná časť URI bola /7/4, to by v tomto prípade znamenalo mesiac 7. (júl, pretože sa v URI nepoužíva index nulového mesiaca Java založený na nule) a deň 4.

Keď je nasadenie úspešné, administratívna konzola sa zobrazí tak, ako je to znázornené na nasledujúcej snímke obrazovky.

Po nasadenej aplikácii JAX-RS k nej teraz môžem pristupovať od nespočetného množstva rôznych klientov. JAX-RS nešpecifikuje štandardizovaný prístup pre klientov, ale Jersey a väčšina ďalších populárnych implementácií JAX-RS poskytuje vlastný prístup pre budovanie klientov. K dispozícii sú aj ďalší klienti HTTP / REST, napríklad RESTClient. Zatiaľ budem jednoducho používať webový prehliadač.

Umiestňovanie URI // localhost: 8080 / v mojom prehliadači sa zobrazí hlavná stránka, ktorá naznačuje, že je spustený GlassFish:

Ak pridám webový kontext (odpočívaj) na URI, vidím svoje index.jsp stránka:

Pre prístup k aplikáciám REST napájaným na JAX-RS musím pridať zdrojov časť URI, ako je uvedené v web.xml spis. Keď pridám toto plus / filmy časť (ako je uvedené v @ Cesta anotácia), zobrazuje sa mi nasledujúca stránka.

Vyššie uvedená snímka obrazovky naznačuje, že prístup GET bol vyvolaný cestou „/“ a getMovie metóda sa volala. V tomto okamihu môžem pridať mesiac a dátum na URI, aby som získal film pre konkrétny deň. Nasledujúce dve snímky obrazovky to demonštrujú k sviatku Hromnice a na Štedrý deň.

Ako ukazujú vyššie uvedené snímky obrazovky, mesiace a dni poskytované v identifikátoroch URI sú poskytovateľom JAX-RS automaticky vložené do parametrov príslušnou metódou. Teraz je to ľahké!

Záver

Proces nasadenia webovej služby založenej na JAX-RS pomocou Jersey a GlassFish je pomerne jednoduchý. Všetko, čo som skutočne potreboval, bol prístup k JAX-RS a Jersey JAR, správne anotovaná trieda Java a krátke web.xml súbor, ktorý umožňoval Jersey používať ako servlet. Tento blogový príspevok sa pokúsil ukázať základné kroky spojené s napísaním jednoduchej triedy s komentárom JAX-RS, jej nasadením do GlassFish a využitím implementácie JAX-RS zo strany Jersey.

Ostatné zdroje

⇒ Príručka pre vývojárov RESTful Web Services

⇒ RESTful Java, niektoré odkazy

⇒ JSR 311: Java API pre RESTful webové služby?

⇒ Nasadenie a testovanie aplikácie Jersey bez NetBeans

⇒ Jersey 1.0: Začíname

⇒ API založené na JAD-311 Javadoc

Tento príbeh „JAX-RS s Jersey: Úvod“ bol pôvodne publikovaný spoločnosťou JavaWorld.

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