Programiranje

Primer preprostega pomladnega oddaljenega HTTP

Ta vnos v spletnem dnevniku s preprostim primerom dokazujem uporabo HTTP Remoting Spring Framework. Na to temo obstajajo številni spletni viri, zato je moj namen tukaj zagotoviti izredno preprost, a popoln prikaz uporabe Springovega oddaljenega HTTP oddaljenega odjemalca.

Pristop Spring k oddaljenemu HTTP omogoča odjemalcem komunikacijo s strežniško kodo, ki jo gosti Spring, prek HTTP, ne da bi odjemalska koda zahtevala kakršno koli znanje o HTTP. Namesto tega odjemalska koda Java "vidi" samo običajne poslovne objekte Java (običajno vmesnike) in ne objekte, specifične za HTTP.

Daljinsko odstranjevanje HTTP Spring običajno zahteva Spring in Java tako na strežniški kot na odjemalski strani. Če pa sta ti dve zahtevi lahko izpolnjeni, se Spring HTTP Remoting enostavno uporabi.

Naslednji koraki omogočajo komunikacijo HTTP med odjemalci, ki jih gosti Spring, in strežniki. Potem, ko sem najprej na kratko opisal korake, se bom podrobneje poglobil vnje (vključno z vzorci kode).

  1. Ustvarite ali uporabite obstoječi Spring bean, ki običajno izvaja vmesnik Java.

    To ni nič posebnega za oddaljeno HTTP in je enak korak, ki bi ga morali storiti, da naredite večino stvari spomladi (pomembna izjema je

    Pomladni JDBC

    ki ne zahteva uporabe spomladanskega fižola).

  2. Ustvarite konfiguracijsko datoteko Spring XML za povezovanje zrna, ustvarjenega v koraku # 1, s kontekstom aplikacije Spring.

    Tako kot pri koraku št. 1 tudi ta datoteka XML ni posebnost za Spring HTTP Remote, temveč je skupna skoraj vsem ožičenjem in konfiguraciji Spring Framework.

  3. Ustvari ali doda web.xml mapa.

    Ta tretji korak je prvi korak, ki je bolj natančen za Spring HTTP Remoting, vendar je še vedno splošno uporaben pri

    Vzmetni okvir MVC

    . Ta korak vključuje dodajanje razreda strežniškega programčka in preslikave URL-jev, kot jih običajno uporabljamo

    Java EE

    servleti

    in

    Strani JavaServer

    . Najpomembnejši del tega koraka je določiti pomlad

    DispatcherServlet

    . V tem je navedena tudi neobvezna "povezava"

    web.xml

    datoteko na mesto konfiguracije konteksta, kjer se nahaja in uporablja ena ali več kontekstnih datotek aplikacije XML Spring.

  4. Ustvarite kontekstno datoteko strežniškega programčka za Spring.

    Ta datoteka XML je zelo podobna "običajni" konfiguracijski datoteki XML za kontekst pomladne aplikacije, vendar je njeno ime predpisano z imenom imena strežniškega programčka, čemur sledi hipen in beseda servlet. Z drugimi besedami, če je bil strežniški program imenovan "somewebthing"

    web.xml

    datoteka, bi se poklicala ta konfiguracijska datoteka pomladanskega programčka

    somewebthing-servlet.xml

    . Ta datoteka vsebuje konfiguracijo za

    HttpInvokerServiceExporter

    (del tega, kar je še posebej pomembno za oddaljeno HTTP, zajeto v tem prispevku) in informacije o preslikavi URL-jev.

  5. Preizkusite!

    Čeprav bo preprosti odjemalec pisal brez misli HTTP in bo, kot kaže, uporabljal le predmete Java, bo storitev dejansko poklical prek HTTP. To bo "dokazano" z zagonom odjemalca brez uvedene storitve in iskanjem nastale kode napake HTTP.

Zdaj bom podrobneje prikazal zgornje korake in jih poskušal konkretno ponazoriti z vzorci kode.

1. korak: Bean in njegov vmesnik

Ta korak se ne razlikuje od definiranja razredov Java in vmesnikov, ki jih izvajajo za uporabo s pomladjo. Naslednji seznam kod prikazuje vmesnik (StateCapitalServiceIF) in izvedbeni razred (StateCapitalService), uporabljen za ta primer.

--- StateCapitalServiceIF.java ---

paket primeri.springhttp; import java.io.Serializable; / ** * Vmesnik State Capital Service, ki ga bo odjemalec uporabil za dostop do * strežniške funkcije prek HTTP. * / javni vmesnik StateCapitalServiceIF razširja serializacijo {/ ** * Navedite kapital države, katere ime je navedeno. * * @param stateName Ime države, katere želeni kapital je. * @return Kapital določenega stanja; nič, če ni najdena. * / javni String getCapital (končni String stateName); } 

--- StateCapitalService.java ---

paket primeri.springhttp; uvoz java.util.Map; / ** * Izvedba funkcionalnosti, ki naj se zažene po klicu odjemalca prek * HTTP. * / javni razred StateCapitalService izvaja StateCapitalServiceIF {Zemljevid stateAndCapitals = null; public StateCapitalService () {} / ** * Nastavi moje države na preslikavo glavnih mest države. * * @param StatesAndCapitals Zemljevidi za prestolnice držav. * / public void setStatesAndCapitals (končni zemljevid stateAndCapitals) {this.statesAndCapitals = stateAndCapitals; } / ** * Navedite kapital države, katere ime je navedeno. * * @param stateName Ime države, katere želeni kapital je. * @return Kapital določenega stanja; nič, če ni najdena. * / public String getCapital (končni String stateName) {return this.statesAndCapitals.get (stateName); }} 

2. korak: Konfiguracijska datoteka za kontekst pomladne aplikacije

Rad bi, da je Spring-ova specifična konfiguracija HTTP ločena od konfiguracije XML fižola. Zato je konfiguracija fižola natanko takšna, kot bi jo običajno videli s pomladjo. Če želite konfigurirati StateCapitalService razreda zgoraj se uporablja naslednja konfiguracija:

--- spring-http-config.xml ---

Zaenkrat še ni bilo storjeno nič posebnega za oddaljeno HTTP. Dejansko bi lahko grah, njegov vmesnik in njegovo konfiguracijo konteksta aplikacije XML vodil običajni razred Java SE, kot je prikazan spodaj:

--- MainServiceAppContext.java ---

paket primeri.springhttp; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; / ** * Prikazuje, kako je mogoče uporabiti Spring fižol brez kakršnega koli sodelovanja HTTP. * / javni razred MainServiceAppContext {javna statična praznina printStateInfo (končna StateCapitalServiceIF stateCapitalMapper, končno stanje niza) {System.out.println ("Kapital" + stanje + "je" + stateCapitalMapper.getCapital (stanje)); } / ** * @param argumentira argumente ukazne vrstice * / public static void main (String [] args) {final ApplicationContext context = new ClassPathXmlApplicationContext ("examples / springhttp / spring-http-config.xml"); StateCapitalServiceIF stateCapitalMapper = (StateCapitalServiceIF) context.getBean ("stateCapitalService"); printStateInfo (stateCapitalMapper, "Alabama"); printStateInfo (stateCapitalMapper, "Colorado"); }} 

3. korak: web.xml mapa

To web.xml datoteka je znana vsem, ki so razvili spletno aplikacijo Java EE. The web.xml v tem primeru je prikazan naslednji.

  Primer preprostega pomladanskega HTTP oddaljevanja To je mišljeno kot izredno preprost primer uporabe Springovega HTTP oddaljenja. StatesCapitals org.springframework.web.servlet.DispatcherServlet 1 StatesCapitals / StatesCapitals org.springframework.web.context.ContextLoaderListener contextConfigLocation /WEB-INF/examples/springhttp/spring-httx-configig.http-config 

4. korak: Kontekstna datoteka za konfiguracijo strežnika

Ker je strežniški programček v tem primeru imenovan "StatesCapitals", je bila poimenovana konfiguracijska datoteka pomladanske strežniške programske opreme StatesCapitals-servlet.xml treba zagotoviti. Prikazano je naslednje:

--- stateCapitals-servlet.xml ---

   examples.springhttp.StateCapitalServiceIF httpStateCapitalService 

Korak # 5: Testiranje

Odjemalca moramo konfigurirati za komunikacijo prek HTTP z našo aplikacijo na strani strežnika. Konfiguracija tega je v spring-http-client-config.xml za ta primer in je prikazan naslednji:

--- spring-http-client-config.xml ---

   // localhost: 8080 / SpringHTTPExample / stateCapitals primeri.springhttp.StateCapitalServiceIF 

Koda odjemalca, ki uporablja zgornji XML za zagon posode Spring in prek HTTP pokliče kodo strežniške strani, je v razredu HttpClient in ta koda je prikazana naslednja:

--- HttpClient.java ---

paket primeri.springhttp.client; uvozi examples.springhttp.StateCapitalServiceIF; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; / ** * Ta razred prikazuje odjemalca spomladanske storitve, izpostavljene HTTP, in prikazuje *, kako odjemalec komunicira s strežnikom, kot da uporablja običajne predmete Java *, namesto da bi uporabil kar koli, kar je specifično za HTTP. * / javni razred HttpClient {javna statična praznina printStateInfo (končna StateCapitalServiceIF stateCapitalMapper, končno stanje niza) {System.out.println ("Kapital" + state + "je" + stateCapitalMapper.getCapital (state)); } glavni statični void glavni (končni argumenti String []) {final ApplicationContext context = new ClassPathXmlApplicationContext ("examples / springhttp / client / spring-http-client-config.xml"); končni StateCapitalServiceIF stateCapitalService = (StateCapitalServiceIF) context.getBean ("stateCapitalProxyService"); printStateInfo (stateCapitalService, "Colorado"); printStateInfo (stateCapitalService, "Alabama"); }} 
$config[zx-auto] not found$config[zx-overlay] not found