Programovanie

Jednoduchý jarný príklad vzdialenej komunikácie HTTP

Používam tento záznam blogu, aby som na jednoduchom príklade demonštroval použitie HTTP Remoting v Spring Framework. O tejto téme existuje veľa online zdrojov, takže mojím zámerom je poskytnúť mimoriadne jednoduchú, ale úplnú ukážku použitia Spring Remoting HTTP s klientmi, ktorí nie sú prehliadačmi.

Jarný prístup k HTTP Remoting umožňuje klientom komunikovať s kódom servera hosteným Springom cez HTTP bez toho, aby kód klienta vyžadoval akékoľvek znalosti o používaní HTTP. Namiesto toho klientsky kód Java iba „vidí“ skôr bežné objekty Java (zvyčajne rozhrania) súvisiace s podnikaním, ako objekty špecifické pre HTTP.

Spring HTTP Remoting všeobecne vyžaduje Spring a Java na strane servera aj klienta. Ak však tieto dve požiadavky môžu byť splnené, Spring HTTP Remoting sa dá ľahko použiť.

Nasledujúce kroky umožňujú komunikáciu HTTP medzi klientmi a servermi hosťovanými na serveri Spring. Po prvom krátkom vysvetlení krokov sa nimi budem podrobnejšie zaoberať (vrátane ukážok kódu).

  1. Vytvorte alebo použite existujúci Spring bean, ktorý zvyčajne implementuje rozhranie Java.

    Nie je to nič zvláštne pre vzdialenú komunikáciu HTTP a je to rovnaký krok, ktorý musíte urobiť, aby ste väčšinu vecí vykonali na jar (významná výnimka je

    Jar JDBC

    ktorá nevyžaduje použitie žiadnej jarnej fazule).

  2. Vytvorte konfiguračný súbor Spring XML na priradenie fazule vytvorenej v kroku č. 1 s kontextom aplikácie Spring.

    Rovnako ako v kroku č. 1, ani tento súbor XML nie je ničím zvláštnym pre Spring HTTP Remoting, ale je spoločný pre takmer všetky zapojenia a konfigurácie Spring Framework.

  3. Vytvoriť alebo pridať do web.xml spis.

    Tento tretí krok je prvým krokom, ktorý je konkrétnejší pre Spring HTTP Remoting, ale je stále všeobecne použiteľný s

    Jarný rámec MVC

    . Tento krok zahŕňa pridanie triedy servletu a mapovania adries URL, ktoré sa zvyčajne používajú s

    Java EE

    servlety

    a

    Stránky JavaServera

    . Najdôležitejšou časťou tohto kroku je špecifikácia jari

    DispatcherServlet

    . V tomto dokumente je uvedený aj voliteľný „odkaz“

    web.xml

    súbor do umiestnenia kontextovej konfigurácie, kde sa nachádza a používa jeden alebo viac kontextových súborov aplikácie Spring XML.

  4. Vytvorte kontextový súbor servletu špecifický pre jar.

    Tento súbor XML vyzerá dosť ako „normálny“ konfiguračný súbor XML s kontextom jarnej aplikácie, ale jeho názov je predpísaný konvenciou názvu servletu, za ktorou nasleduje spojovník a slovo servlet. Inými slovami, ak by sa servlet v serveri nazýval „somewebthing“

    web.xml

    súbor, nazval by sa tento konfiguračný súbor jarného servletu

    somewebthing-servlet.xml

    . Tento súbor obsahuje konfiguráciu súboru

    HttpInvokerServiceExporter

    (časť z toho, ktorá je konkrétna pre HTTP Remoting zahrnutú v tejto položke blogu) a mapovacie informácie URL.

  5. Vyskúšajte!

    Aj keď jednoduchý klient bude písať bez vedomia protokolu HTTP a bude sa zdať, že používa iba objekty Java, v skutočnosti bude túto službu vyvolávať prostredníctvom protokolu HTTP. To sa „preukáže“ spustením klienta bez nasadenej služby a sledovaním výsledného chybového kódu HTTP.

Teraz prejdem k demonštrácii vyššie uvedených krokov podrobnejšie a pokúsim sa ich konkrétne ilustrovať pomocou ukážok kódu.

Krok 1: Bean a jeho rozhranie

Tento krok sa nelíši od definovania Java tried a rozhraní, ktoré implementujú pre použitie s Spring. Nasledujúce zoznamy kódov zobrazujú rozhranie (StateCapitalServiceIF) a implementačná trieda (StateCapitalService) použitý v tomto príklade.

--- StateCapitalServiceIF.java ---

príklady balíka.springhttp; import java.io.Serializovateľný; / ** * Rozhranie štátnej kapitálovej služby, ktoré klient použije na prístup k * funkciám na strane servera prostredníctvom protokolu HTTP. * / public interface StateCapitalServiceIF extends Serializable {/ ** * Zadajte kapitál štátu, ktorého meno je uvedené. * * @param stateName Názov štátu, ktorého kapitál je požadovaný. * @ návratnosť Kapitál zadaného štátu; null, ak sa nenájde. * / public String getCapital (konečný reťazec stateName); } 

--- StateCapitalService.java ---

príklady balíka.springhttp; import java.util.Map; / ** * Implementácia funkcionality, ktorá sa má spustiť po volaní klientom cez * HTTP. * / verejná trieda StateCapitalService implementuje StateCapitalServiceIF {Map StatesAndCapitals = null; public StateCapitalService () {} / ** * Nastaviť moje štáty na mapovanie hlavných miest štátov. * * @param statesAndCapitals Mapovanie štátov na hlavné mestá. * / public void setStatesAndCapitals (finálna mapa StatesAndCapitals) {this.statesAndCapitals = statesAndCapitals; } / ** * Zadajte hlavné mesto štátu, ktorého meno je uvedené. * * @param stateName Názov štátu, ktorého kapitál je požadovaný. * @ návratnosť Kapitál zadaného štátu; null, ak sa nenájde. * / public String getCapital (konečný reťazec stateName) {return this.statesAndCapitals.get (stateName); }} 

Krok 2: Jarný kontextový konfiguračný súbor aplikácie

Rád by som udržal Springovu špecifickú konfiguráciu HTTP oddelenú od konfigurácie fazule XML. Preto je konfigurácia fazule presne taká, akú by sme videli normálne s Springom. Ak chcete nakonfigurovať StateCapitalService triedy vyššie sa používa nasledujúca konfigurácia:

--- jar-http-config.xml ---

Doteraz sa neurobilo nič konkrétne pre HTTP Remoting. V skutočnosti by fazuľa, jej rozhranie a konfigurácia kontextu aplikácie XML mohla byť spustená normálnou triedou Java SE, ako je tá, ktorá je uvedená nižšie:

--- MainServiceAppContext.java ---

príklady balíka.springhttp; importovať org.springframework.context.ApplicationContext; importovať org.springframework.context.support.ClassPathXmlApplicationContext; / ** * Ukazuje, ako sa dá Spring bean použiť bez akejkoľvek účasti HTTP. * / public class MainServiceAppContext {public static void printStateInfo (final StateCapitalServiceIF stateCapitalMapper, final String state) {System.out.println ("Hlavné mesto" + state + "je" + stateCapitalMapper.getCapital (state)); } / ** * @param args argumenty príkazového riadku * / 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"); }} 

Krok č. 3: web.xml Súbor

Toto web.xml súbor pozná každý, kto vyvinul webovú aplikáciu Java EE. The web.xml použitý v tomto príklade je zobrazený ďalej.

  Príklad jednoduchého Spring Remoting HTTP Je to mienený ako veľmi jednoduchý príklad použitia schopnosti Spring HTTP Remoting. StatesCapitals org.springframework.web.servlet.DispatcherServlet 1 StatesCapitals / statesCapitals org.springframework.web.context.ContextLoaderListener contextConfigLocation /WEB-INF/examples/springhttp/spring-http-config.xml 

Krok 4: Konfiguračný súbor kontextu servletu

Pretože servlet v tomto príklade má názov „statesCapitals“, pomenoval sa konfiguračný súbor jarného servletu stateCapitals-servlet.xml je potrebné poskytnúť. Ďalej sa zobrazuje:

--- uvádzaCapitals-servlet.xml ---

   examples.springhttp.StateCapitalServiceIF httpStateCapitalService 

Krok č. 5: Testovanie

Musíme nakonfigurovať klienta na komunikáciu cez HTTP s našou aplikáciou na strane servera. Konfigurácia pre toto je obsiahnutá v spring-http-client-config.xml pre tento príklad a je zobrazený ďalej:

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

   // localhost: 8080 / SpringHTTPExample / statesCapitals examples.springhttp.StateCapitalServiceIF 

V triede je kód klienta, ktorý používa vyššie uvedený XML na zavedenie kontajnera Spring a volanie kódu na strane servera cez HTTP HttpClient a tento kód sa zobrazí ďalej:

--- HttpClient.java ---

balíček examples.springhttp.client; import examples.springhttp.StateCapitalServiceIF; importovať org.springframework.context.ApplicationContext; importovať org.springframework.context.support.ClassPathXmlApplicationContext; / ** * Táto trieda demonštruje klienta jarnej služby vystavenej protokolu HTTP a ukazuje, * ako klient interaguje so serverom, akoby používal bežné objekty Java *, a nie nič, čo by bolo špecifické pre HTTP. * / public class HttpClient {public static void printStateInfo (final StateCapitalServiceIF stateCapitalMapper, final String state) {System.out.println ("Hlavné mesto" + state + "je" + stateCapitalMapper.getCapital (state)); } public static void main (final argumenty String []) {final ApplicationContext context = new ClassPathXmlApplicationContext ("examples / springhttp / client / spring-http-client-config.xml"); final StateCapitalServiceIF stateCapitalService = (StateCapitalServiceIF) context.getBean ("stateCapitalProxyService"); printStateInfo (stateCapitalService, "Colorado"); printStateInfo (stateCapitalService, "Alabama"); }} 
$config[zx-auto] not found$config[zx-overlay] not found