Programmēšana

JAX-RS ar Džērsiju: ​​ievads

JAX-RS (JSR 311: Java API for RESTful Web Services) specifikācija nodrošina standartizētu Java balstītu pieeju REST stila tīmekļa pakalpojumu ieviešanai. Džersija ir atsauces JAX-RS ieviešana, un es šajā emuāra ziņā sniedzu īsu ievadu JAX-RS caur Džersiju.

Lai gan Džērsijā nav nepieciešams izmantot GlassFish, es šajā ziņojumā izmantoju Džersiju kopā ar GlassFish v3. GlassFish v3 nodrošina Java EE 6 atsauces ieviešanu. Es lejupielādēju GlassFish v3 Windows Installer un palaidu to instalēšanai. Pēc tā instalēšanas es iestatīju vides mainīgo GLASSFISH_HOME lai norādītu uz instalācijas saknes direktoriju un pievienotu % GLASSFISH_HOME% man CELS. Pēc tam GlassFish var palaist ar komandu asadmin sākuma domēns (sāk noklusējuma domēnu), kā parādīts nākamajā ekrāna momentuzņēmumā.

Tā kā GlassFish instalēšanas laikā es izmantoju noklusējuma iestatījumus, tīmekļa administratīvā konsole ir pieejama manai mašīnai vietnē URI // localhost: 4848 / (noklusējuma ports ir 4848). Darbojoties GlassFish, šis URI novirza uz administratīvās konsoles pieteikšanās lapu. Administratīvais lietotājvārds un parole tika norādīti instalācijā. Šis ekrāns tiek parādīts nākamajā ekrāna momentuzņēmumā.

Kad GlassFish ir iestatīts, es tagad sāku izstrādāt ļoti vienkāršu REST lietojumprogrammu, izmantojot Džersiju. Es sāku ar pareizi JAX-RS anotētu klasi ar nosaukumu MovieOfTheDay:

MovieOfTheDay.java

pakete rmoug.td2010.rest; importēt java.util.Calendar; importēt java.util.HashMap; importēt java.util.Map; importēt java.util.logging.Logger; importēt javax.ws.rs.GET; importēt javax.ws.rs.Path; importēt javax.ws.rs.PathParam; importēt javax.ws.rs. Patērē; importēt javax.ws.rs.Productions; / ** * Vienkārša nodarbība, kas nodrošina filmu attiecīgajam * mēneša mēnesim un dienai. * / @Path ("/ movies") publiskā klase MovieOfTheDay {private static final Logger LOGGER = Logger.getLogger ("rmoug.td2010.rest.MovieOfTheDay"); privāta statiskā galīgā karte MOVIE_OF_THE_DAY; statisks {MOVIE_OF_THE_DAY = jauns HashMap(); gala karte janMovies = new HashMap (); MOVIE_OF_THE_DAY.put (Integer.valueOf (Calendar.JANUARY), janMovies); galīgā karte febMovies = new HashMap (); febMovies.put (2, "Murkšķa diena"); MOVIE_OF_THE_DAY.put (Integer.valueOf (Kalendārs.FEBRUARY), febMovies); gala karte marMovies = new HashMap (); marMovies.put (16, "Bēguļojošais"); marMovies.put (17, "Darby O'Gill and the Little People"); MOVIE_OF_THE_DAY.put (Integer.valueOf (Calendar.MARCH), marMovies); gala karte aprMovies = new HashMap (); MOVIE_OF_THE_DAY.put (Integer.valueOf (Calendar.APRIL), aprMovies); galīgā karte mayMovies = new HashMap (); MOVIE_OF_THE_DAY.put (Integer.valueOf (Calendar.MAY), mayMovies); galīgā karte junMovies = new HashMap (); MOVIE_OF_THE_DAY.put (Integer.valueOf (Calendar.JUNE), junMovies); galīgā karte julMovies = new HashMap (); julMovies.put (4, "Neatkarības diena"); MOVIE_OF_THE_DAY.put (Integer.valueOf (Calendar.JULY), julMovies); gala karte augMovies = new HashMap (); MOVIE_OF_THE_DAY.put (Integer.valueOf (Calendar.AUGUST), augMovies); galīgā karte sepMovies = new HashMap (); MOVIE_OF_THE_DAY.put (Integer.valueOf (Kalendārs.SEPTEMBER), sepMovies); gala karte octMovies = new HashMap (); MOVIE_OF_THE_DAY.put (Integer.valueOf (Calendar.OCTOBER), octMovies); gala karte novMovies = new HashMap (); MOVIE_OF_THE_DAY.put (Integer.valueOf (Calendar.NOVEMBER), novMovies); gala karte decMovies = new HashMap (); decMovies.put (24, "Tā ir brīnišķīga dzīve"); decMovies.put (25, "Ziemassvētku dziesma"); decMovies.put (26, "Ziemassvētku stāsts"); MOVIE_OF_THE_DAY.put (Integer.valueOf (Kalendārs.DECEMBRIS), decMovies); } @GET @Path ("/") @Produces ("text / plain") public String getMovie () {return "Lai skatītu dienas filmu, norādiet URL ar mēnesi un dienu:" + "\ t // localhost : 8080 / rest / resources / movies / <> / <> "; } / ** * Iegūstiet dienas filmu, kā norādīts norādītajā mēnesī un datumā. * * @param month Mēnesis, kurai dienas filma ir vēlama. * @param date Datums, kurā ir nepieciešama dienas filma. * @return Dienas filmas nosaukums norādītajam mēnesim un datumam. * / @GET @Path ("/ {month} / {date}") @Consumes ("text / plain") @Produces ("text / html") public String getMovieOfTheDay (@PathParam ("month") final Integer month , @PathParam ("date") galīgais skaitļa skaitlis) {final Karte moviesOfTheMonth = MOVIE_OF_THE_DAY.get (mēnesis-1); galīgā virkne movieOfTheDay = moviesOfTheMonth! = null? moviesOfTheMonth.get (datums): "Fletch"; atgriezties movieOfTheDay! = null? generēt HTML (movieOfTheDay, mēnesis, datums): generēt HTML ("Fletch dzīvo!", mēnesis, datums); } privāta virkne generatorHtml (final String movieTitle, final int movieMonth, final int movieDay) {final StringBuilder builder = new StringBuilder (); builder.append ("") .append ("Dienas filma") .append ("Dienas filma") .append ("

Dienas filma vietnei ") .append (movieMonth) .append (" / ") .append (movieDay) .append (" is '") .append (movieTitle) .append ("'.

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

Statiskais inicializācijas bloks nav specifisks JAX-RS, bet tiek izmantots datu bāzes simulēšanai. Īstā REST lietojumprogrammā man gandrīz noteikti būtu datu bāze aizmugurē, taču atmiņā esošā statiskā karte to šeit simulē.

Lai arī šī klase ir vienkārša, šī klase demonstrē galvenās JAX-RS funkcijas. Visinteresantākie klases JAX-RS gabali ir JAX-RS anotācijas, piemēram, @Path, @GET, @Consumes, @Produces un @PathParam. Es neiedziļināšos, ko šīs JAX-RS anotācijas dara šajā ierakstā, jo mans uzsvars tiek likts uz Džērsijas izmantošanu. Plašāku informāciju par šīm anotācijām skatiet Java EE 6 apmācības nodaļā par REST ar Džersiju.

Es izvietošu JAX-RS anotētās klases uz GlassFish WAR failā ar atbilstošo web.xml failu, kā parādīts tālāk:

web.xml

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

Manā gadījumā NetBeans 6.8 to ģenerēja web.xml failu man automātiski, kad pievienoju atbilstošos JAX-RS un Jersey JAR failus sava projekta bibliotēkām. Tas ir salīdzinoši vienkārši web.xml failu, jo GlassFish apzinās JAX-RS. (Pārsteidzoši līdzīgs web.xml strādā, lai izvietotu Džērsijā balstītas REST lietojumprogrammas Tomcat, kā parādīts Džeisona Dreika emuāra ziņā Džersijas izvietošana Tomcat 6.0.

Manam piemēram, sauca WAR failu Atpūta1.kara tiek ģenerēts. Tās saturs tiek parādīts nākamajā ekrāna momentuzņēmumā.

Kā norāda ekrāna momentuzņēmums, ģenerētajā WAR failā ir iekļauti JAX-RS un Jersey JAR faili. Klase MovieRestApplication var neņemt vērā, jo tas netiek izmantots kopā ar Jersey on GlassFish. Tas nozīmē, ka vienīgie pielāgotie faili WAR ir JAX-RS anotētā klase MovieOfTheDay, web.xml failu un indeksa lapu (indekss.jsp). Programmas saturs indekss.jsp lapa tiek parādīta nākamā.

indekss.jsp

    ATPŪTA ar JAX-RS piemēru 

Nākamais ekrāna momentuzņēmums parāda izveidotā WAR faila izvietošanu, izmantojot tīmekļa Glass Administrator Console:

Vissvarīgākā detaļa, kas jāņem vērā no WAR faila izvietošanas attēla, ir tā, ka esmu nosaukusi konteksta sakni "pārējā". Šī būs daļa no URI, ar kuru palīdzību var piekļūt maniem izvietotajiem REST pakalpojumiem. Jo agrāk web.xml lieta to arī parādīja resursi / būs arī daļa no šī REST pakalpojuma piekļuves URI. Atbilstošā URI atlikums ir balstīts uz Java klases JAX-RS anotācijās norādītajiem URI fragmentiem (/ filmas, /, un / {mēnesis} / {datums}). URI daļas, kas apzīmētas ar cirtainām iekavām, norāda, ka vietturiem tiks ievadītas JAX-RS ieviešanas vērtības, kas atrodas izsaucošajā URI. Piemēram, ja attiecīgais URI gabals bija /7/4, šajā gadījumā tas norāda uz mēnesi 7 (jūlijs, jo URI neizmanto Java nulles bāzes mēneša indeksu) un 4 dienu mēnesis.

Kad izvietošana ir veiksmīga, tiek parādīta administratīvā konsole, kā parādīts nākamajā ekrāna momentuzņēmumā.

Izmantojot JAX-RS lietojumprogrammu, es tagad varu tai piekļūt no neskaitāmiem dažādiem klientiem. JAX-RS nenosaka standartizētu pieeju klientiem, taču Džersija un lielākā daļa citu populāro JAX-RS ieviešanas variantu klientiem nodrošina savu pieeju. Ir pieejami arī citi HTTP / REST klienti, piemēram, RESTClient. Pagaidām es vienkārši izmantošu tīmekļa pārlūkprogrammu.

URI ievietošana // vietējais saimnieks: 8080 / manā pārlūkprogrammā parāda galveno lapu, norādot, ka darbojas GlassFish:

Ja pievienoju tīmekļa kontekstu (atpūsties) uz URI, es redzu savu indekss.jsp lappuse:

Lai piekļūtu JAX-RS darbināmām REST lietojumprogrammām, man jāpievieno resursiem URI daļa, kā norādīts web.xml failu. Kad es pievienoju šo plus / filmas daļa (kā norādīts @ Ceļš anotācija), es redzu nākamo lapu.

Iepriekš redzamais ekrānuzņēmums norāda, ka piekļuve GET tika izsaukta ar ceļu "/" un getMovie metode tika izsaukta. Šajā brīdī es varu pievienot mēnesi un datumu URI, lai iegūtu filmu par šo konkrēto dienu. Nākamie divi ekrāna momentuzņēmumi to parāda Murkšķa un Ziemassvētku dienā.

Kā pierāda iepriekšējie ekrānuzņēmumi, JAX-RS nodrošinātājs automātiski ievada URI norādītos mēnešus un dienas parametros atbilstošajai metodei. Tagad tas ir viegli!

Secinājums

JAX-RS balstīta tīmekļa pakalpojuma ieviešanas process, izmantojot Jersey un GlassFish, ir samērā vienkāršs. Viss, kas man patiešām bija vajadzīgs, bija piekļuve JAX-RS un Jersey JAR, pareizi anotētajai Java klasei un īsajai web.xml fails, kas ļāva Džersiju izmantot kā servleti. Šis emuāra ziņojums ir mēģinājis parādīt vienkāršās JAX-RS anotētās klases rakstīšanu, tās izvietošanu GlassFish un Džersijas JAX-RS ieviešanas priekšrocības.

Citi resursi

⇒ RESTful Web Services Developer Guide

⇒ RESTful Java, dažas saites

⇒ JSR 311: Java API RESTful tīmekļa pakalpojumiem?

⇒ Džersijas lietojumprogrammas ieviešana un testēšana bez NetBeans

Džersija 1.0: darba sākšana

⇒ JSR-311 Javadoc bāzes API

Šo stāstu "JAX-RS with Jersey: An Introduction" sākotnēji publicēja JavaWorld.

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