Ohjelmointi

Yksinkertainen esimerkki kevään HTTP-etäyhteydestä

Käytän tätä blogimerkintää osoittaakseni yksinkertaisella esimerkillä Spring Frameworkin HTTP-etäyhteyden käytön. Aiheesta on olemassa lukuisia online-resursseja, joten aikomuksenani on esitellä erittäin yksinkertainen mutta täydellinen esitys Springin HTTP-etäyhteyden käytöstä muiden kuin selainohjelmien kanssa.

Spring-lähestymistapa HTTP-etäosoitukseen antaa asiakkaille mahdollisuuden kommunikoida Spring-isännöidyn palvelinkoodin kanssa HTTP: n kautta ilman, että asiakaskoodi vaatii HTTP-tietämystä. Sen sijaan asiakas Java-koodi "näkee" vain normaalit yritystoimintaan liittyvät Java-objektit (yleensä käyttöliittymät) HTTP-spesifisten objektien sijaan.

Spring HTTP Remoting vaatii yleensä Springin ja Java: n sekä palvelin- että asiakaspuolella. Jos nämä kaksi vaatimusta voidaan kuitenkin täyttää, kevään HTTP-etäyhteyttä voidaan käyttää helposti.

Seuraavat vaiheet sallivat HTTP-viestinnän keväällä isännöityjen asiakkaiden ja palvelinten välillä. Kun ensin on kuvattu lyhyesti vaiheet, syvenen niihin yksityiskohtaisemmin (mukaan lukien koodinäytteet).

  1. Luo tai käytä olemassa olevaa kevätpapua, joka tyypillisesti toteuttaa Java-käyttöliittymän.

    Tämä ei ole mikään erityinen HTTP-etäyhteydelle, ja se on sama askel, joka sinun on tehtävä useimpien asioiden tekemiseksi keväällä (merkittävä poikkeus on

    Kevät JDBC

    joka ei vaadi kevätpapujen käyttöä).

  2. Luo Spring XML -määritystiedosto, jotta vaiheessa 1 luotu papu voidaan yhdistää Spring-sovelluskontekstiin.

    Kuten vaiheessa # 1, tämä XML-tiedosto ei ole mikään erityinen Spring HTTP Remotingille, mutta on sen sijaan yleinen lähes kaikille Spring Frameworkin johdotuksille ja kokoonpanolle.

  3. Luo tai lisää web.xml tiedosto.

    Tämä kolmas vaihe on ensimmäinen vaihe, joka liittyy erityisesti Spring HTTP Remoting -ohjelmaan, mutta on silti yleisesti sovellettavissa

    Kevään MVC-kehys

    . Tähän vaiheeseen sisältyy servlet-luokan ja URL-kartoitusten lisääminen sellaisina kuin niitä yleensä käytetään

    Java EE

    servletit

    ja

    JavaServer-sivut

    . Tärkein osa tässä vaiheessa on määritellä kevät

    DispatcherServlet

    . Tässä on myös valinnainen "linkki"

    web.xml

    tiedosto kontekstin määrityspaikkaan, jossa yksi tai useampi Spring XML -sovelluksen kontekstitiedosto sijaitsee ja jota käytetään.

  4. Luo Spring-kohtainen servlet-kontekstitiedosto.

    Tämä XML-tiedosto näyttää paljon kuin "normaali" Spring-sovelluskontekstin XML-määritystiedosto, mutta sen nimen määrää palvelinsovelluksen nimen käytäntö, jota seuraa hyppy ja sana servlet. Toisin sanoen, jos servlet-sovellusta kutsutaan "jotain verkkoa"

    web.xml

    tiedosto, tämä kevään servlet-määritystiedosto kutsutaan

    somewebthing-servlet.xml

    . Tämä tiedosto sisältää

    HttpInvokerServiceExporter

    (osa tästä, joka koskee erityisesti tämän blogimerkinnän kattamaa HTTP-etäyhteyttä) ja URL-kartoitustiedot.

  5. Testata!

    Vaikka yksinkertainen asiakas kirjoittaa kirjoitusta ilman HTTP: tä mielessä ja näyttää käyttävän vain Java-objekteja, se itse vetoaa palveluun HTTP: n kautta. Tämä "todistetaan" suorittamalla asiakas ilman palvelun käyttöönottoa ja seuraamalla tuloksena olevaa HTTP-virhekoodia.

Siirryn nyt osoittamaan yllä olevat vaiheet yksityiskohtaisemmin ja yritän havainnollistaa niitä konkreettisesti koodinäytteillä.

Vaihe 1: Papu ja sen käyttöliittymä

Tämä vaihe ei ole erilainen kuin Java-luokkien ja rajapintojen määrittely, jotka he toteuttavat käytettäväksi Springin kanssa. Seuraavissa koodiluetteloissa näkyy käyttöliittymä (StateCapitalServiceIF) ja toteutusluokka (StateCapitalService), jota käytetään tässä esimerkissä.

--- StateCapitalServiceIF.java ---

pakettiesimerkkejä.springhttp; tuo java.io.Serializable; / ** * State Capital Service -rajapinta, jota asiakas käyttää * palvelinpuolen toimintojen käyttämiseen HTTP: n kautta. * / julkinen rajapinta StateCapitalServiceIF laajentaa Serializable {/ ** * Anna valtion pääkaupunki, jonka nimi on annettu. * * @param stateName Valtion nimi, jonka pääoma on haluttu. * @return määritetyn valtion pääoma; null, jos sitä ei löydy. * / public String getCapital (lopullinen String stateName); } 

--- StateCapitalService.java ---

pakettiesimerkit.springhttp; tuo java.util.Kartta; / ** * Toiminnot toteutetaan sen jälkeen, kun asiakas on soittanut * HTTP: n kautta. * / public class StateCapitalService toteuttaa StateCapitalServiceIF {Map statesAndCapitals = null; public StateCapitalService () {} / ** * Aseta osavaltiot osavaltioiden pääkartoitukseen. * * @param statesAndCapitals Osavaltiot kartoittavat pääkaupunkeja. * / public void setStatesAndCapitals (lopullinen Map statesAndCapitals) {this.statesAndCapitals = statesAndCapitals; } / ** * Anna valtion pääkaupunki, jonka nimi on annettu. * * @param stateName Valtion nimi, jonka pääoma on haluttu. * @return määritetyn valtion pääoma; null, jos sitä ei löydy. * / public String getCapital (lopullinen merkkijono stateName) {palauta this.statesAndCapitals.get (stateName); }} 

Vaihe 2: Kevään sovelluksen kontekstin määritystiedosto

Haluan pitää Springin HTTP-spesifisen kokoonpanon erillään pavun XML-kokoonpanosta. Siksi pavun kokoonpano on täsmälleen sellainen kuin normaalisti nähdään Springin kanssa. Määritä StateCapitalService luokassa, seuraavaa kokoonpanoa käytetään:

--- kevät-http-config.xml ---

Toistaiseksi mitään erityistä HTTP-etäyhteydestä ei ole tehty. Itse asiassa papu, sen käyttöliittymä ja XML-sovelluskontekstikokoonpano voidaan kaikki suorittaa normaalilla Java SE -luokalla, kuten alla on esitetty:

--- MainServiceAppContext.java ---

pakettiesimerkkejä.springhttp; tuo org.springframework.context.ApplicationContext; tuo org.springframework.context.support.ClassPathXmlApplicationContext; / ** * Osoittaa, kuinka kevätpapua voidaan käyttää ilman HTTP-osallisuutta. * / public class MainServiceAppContext {public static void printStateInfo (final StateCapitalServiceIF stateCapitalMapper, final String state) {System.out.println ("+ valtion + pääoma on" + stateCapitalMapper.getCapital (osavaltio)); } / ** * @param argumentoi komentoriviargumentit * / public static void main (String [] args) {final ApplicationContext context = new ClassPathXmlApplicationContext ("esimerkit / springhttp / spring-http-config.xml"); StateCapitalServiceIF stateCapitalMapper = (StateCapitalServiceIF) context.getBean ("stateCapitalService"); printStateInfo (stateCapitalMapper, "Alabama"); printStateInfo (osavaltioCapitalMapper, "Colorado"); }} 

Vaihe 3: web.xml Tiedosto

Tämä web.xml tiedosto on tuttu kaikille, jotka ovat kehittäneet Java EE -verkkosovelluksen. web.xml tässä esimerkissä käytetty seuraavaksi.

  Yksinkertainen esimerkki Spring HTTP -kaukosäätimestä Tämä on tarkoitettu erittäin yksinkertaiseksi esimerkiksi Springin HTTP Remoting -ominaisuuden käytöstä. statesCapitals org.springframework.web.servlet.DispatcherServlet 1 statesCapitals / statesCapitals org.springframework.web.context.ContextLoaderListener contextConfigLocation /WEB-INF/examples/springhttp/spring-http-config.x 

Vaihe 4: Servlet-sovelluksen kontekstin määritystiedosto

Koska tässä esimerkissä olevan servletin nimi on "statesCapitals", Spring-palvelinsovelluksen kokoonpanotiedosto nimeltä statesCapitals-servlet.xml on tarjottava. Se näkyy seuraavaksi:

--- toteaaCapitals-servlet.xml ---

   example.springhttp.StateCapitalServiceIF httpStateCapitalService 

Vaihe 5: Testaa se

Meidän on määritettävä asiakas kommunikoimaan HTTP: n kautta palvelinpuolen sovelluksemme kanssa. Tämän kokoonpano sisältyy spring-http-client-config.xml tässä esimerkissä ja näkyy seuraavana:

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

   // paikallinen isäntä: 8080 / SpringHTTPExample / statesCapitals example.springhttp.StateCapitalServiceIF 

Asiakaskoodi, joka käyttää yllä olevaa XML: ää käynnistääkseen Spring-kontin ja kutsuttaakseen palvelinpuolen koodin HTTP: n kautta, on luokassa HttpClient ja tämä koodi näkyy seuraavana:

--- HttpClient.java ---

pakettiesimerkit.keväthttp.asiakas; tuoda esimerkkejä.springhttp.StateCapitalServiceIF; tuo org.springframework.context.ApplicationContext; tuo org.springframework.context.support.ClassPathXmlApplicationContext; / ** * Tämä luokka osoittaa kevään HTTP-altistuneen palvelun asiakkaan ja näyttää * kuinka asiakas on vuorovaikutuksessa palvelimen kanssa kuin käyttäessään normaalia Java-objekteja * sen sijaan, että käyttäisi mitään HTTP-spesifistä. * / public class HttpClient {public static void printStateInfo (final StateCapitalServiceIF stateCapitalMapper, final String state) {System.out.println ("+ valtion + pääoma on" + stateCapitalMapper.getCapital (osavaltio)); } public static void main (final String [] argumentit) {final ApplicationContext context = new ClassPathXmlApplicationContext ("esimerkkejä / springhttp / client / spring-http-client-config.xml"); lopullinen StateCapitalServiceIF stateCapitalService = (StateCapitalServiceIF) context.getBean ("stateCapitalProxyService"); printStateInfo (osavaltioCapitalService, "Colorado"); printStateInfo (stateCapitalService, "Alabama"); }}