Programavimas

Paprastas pavasario HTTP nuotolinio valdymo pavyzdys

Naudoju šį tinklaraščio įrašą norėdamas paprastu pavyzdžiu parodyti „Spring Framework“ HTTP nuotolinio valdymo naudojimą. Šia tema yra daugybė internetinių šaltinių, todėl noriu pateikti labai paprastą, bet išsamų pavasario HTTP nuotolinio valdymo naudojimą su ne naršyklės klientais.

Pavasarinis požiūris į HTTP nuotolinį valdymą leidžia klientams bendrauti su pavasario priglobtu serverio kodu per HTTP, kliento kodui nereikalaujant jokių žinių apie HTTP. Vietoj to, kliento „Java“ kodas „mato“ tik įprastus su verslu susijusius „Java“ objektus (dažniausiai sąsajas), o ne konkrečių HTTP objektų.

Pavasario HTTP nuotolinis valdymas paprastai reikalauja „Spring“ ir „Java“ tiek serverio, tiek kliento pusėje. Tačiau jei šie du reikalavimai gali būti įvykdyti, pavasarinis HTTP nuotolinis valdymas yra lengvai pritaikomas.

Šie veiksmai leidžia HTTP ryšį tarp „Spring“ priglobtų klientų ir serverių. Pirmiausia trumpai aprašęs veiksmus, aš juos išsamiau įsigilinsiu (įskaitant kodo pavyzdžius).

  1. Sukurkite arba naudokite esamą pavasario pupelę, kuri paprastai įdiegia „Java“ sąsają.

    Tai nėra nieko ypatingo HTTP nuotoliniam naudojimui ir tai yra tas pats žingsnis, kurį turėtumėte atlikti, kad pavasarį atliktumėte daugelį dalykų (pastebima išimtis yra

    Pavasario JDBC

    kad nereikia naudoti vasarinių pupelių).

  2. Sukurkite „Spring XML“ konfigūracijos failą, kad susietumėte pupelę, sukurtą atlikdami 1 veiksmą, su „Spring“ programos kontekstu.

    Kaip ir 1 žingsnyje, šis XML failas nėra ypatingas pavasario HTTP nuotoliniam valdymui, bet yra įprastas beveik visiems „Spring Framework“ laidams ir konfigūracijai.

  3. Sukurti arba pridėti prie web.xml failą.

    Šis trečiasis žingsnis yra pirmas žingsnis, labiau susijęs su pavasario HTTP nuotoliniu valdymu, tačiau vis tiek paprastai taikomas su

    Pavasario MVC karkasas

    . Šis žingsnis apima servletų klasės ir URL susiejimų pridėjimą, kaip paprastai naudojamas

    „Java EE“

    servletai

    ir

    „JavaServer“ puslapiai

    . Svarbiausia šio žingsnio dalis - nurodyti pavasarį

    DispečerisServletas

    . Čia taip pat pateikiama pasirinktinė „nuoroda“

    web.xml

    failą į konteksto konfigūracijos vietą, kur yra ir naudojami vienas ar daugiau „Spring XML“ programos konteksto failų.

  4. Sukurkite konkrečiam pavasariui skirtą servleto kontekstinį failą.

    Šis XML failas atrodo panašus į „įprastą“ „Spring“ programos konteksto XML konfigūracijos failą, tačiau jo pavadinimą nurodo servleto pavadinimo sutartinė eilutė, po kurios rašomas brūkšnys ir žodis servlet. Kitaip tariant, jei servletas programoje buvo vadinamas „kažkokiu daiktu“

    web.xml

    failas, šis pavasario servleto konfigūracijos failas bus vadinamas

    somewebthing-servlet.xml

    . Šiame faile yra

    „HttpInvokerServiceExporter“

    (dalis šio elemento, susijusio su HTTP nuotoliniu valdymu, aprašyta šiame tinklaraščio įraše) ir URL susiejimo informacija.

  5. Testas!

    Nors paprastas klientas rašys neturėdamas omenyje HTTP ir atrodys, kad naudoja tik „Java“ objektus, jis iš tikrųjų pasikvies paslaugą per HTTP. Tai bus „įrodyta“ paleidus klientą be diegiamos paslaugos ir stebint gautą HTTP klaidos kodą.

Dabar pereisiu prie aukščiau aprašytų veiksmų išsamesnio demonstravimo ir bandysiu juos konkrečiai iliustruoti kodo pavyzdžiais.

1 žingsnis: Pupelė ir jos sąsaja

Šis žingsnis nesiskiria nuo „Java“ klasių ir sąsajų, kurias jie įgyvendina naudodami „Spring“, apibrėžimo. Šie kodų sąrašai rodo sąsają („StateCapitalService“) ir įgyvendinimo klasė („StateCapitalService“), naudojamą šiame pavyzdyje.

--- StateCapitalServiceIF.java ---

paketų pavyzdžiai.springhttp; importuoti java.io.Serializable; / ** * Valstybinės sostinės tarnybos sąsaja, kurią klientas naudos, norėdamas pasiekti HTTP serverio funkcijas. * / viešoji sąsaja „StateCapitalServiceIF“ išplečia „Serializable“ {/ ** * Nurodykite valstybės, kurios vardas yra nurodytas, sostinę. * * @param stateName Valstybės, kurios kapitalo pageidaujama, pavadinimas. * @return Nurodytos valstybės kapitalas; null, jei nerasta. * / public string „getCapital“ (galutinis „String stateName“); } 

--- StateCapitalService.java ---

paketų pavyzdžiai.springhttp; importuoti java.util.Žemėlapis; / ** * Funkcijų įgyvendinimas bus vykdomas, kai klientas paskambins per * HTTP. * / public class StateCapitalService įgyvendina StateCapitalServiceIF {Map statesAndCapitals = null; public StateCapitalService () {} / ** * Nustatyti mano valstijoms valstijos sostinių atvaizdavimą. * * @param statesAndCapitals Valstijos suskirsto valstijų sostines. * / public void setStatesAndCapitals (final Map statesAndCapitals) {this.statesAndCapitals = statesAndCapitals; } / ** * Nurodykite valstybės, kurios pavadinimas nurodytas, sostinę. * * @param stateName Valstybės, kurios kapitalo pageidaujama, pavadinimas. * @return Nurodytos valstybės kapitalas; null, jei nerasta. * / viešoji eilutė „getCapital“ (galutinis eilutės būsenos pavadinimas) {grąžinkite šį.statesAndCapitals.get (valstybėsVardas); }} 

2 žingsnis: Pavasario programos konteksto konfigūracijos failas

Man patinka pavasario HTTP specifinę konfigūraciją laikyti atskirai nuo pupelės XML konfigūracijos. Todėl pupelių konfigūracija yra tokia pati, kokia būtų įprasta su Spring. Norėdami sukonfigūruoti „StateCapitalService“ klasės, naudojama ši konfigūracija:

--- pavasaris-http-config.xml ---

Kol kas nieko, kas susiję su HTTP nuotoliniu valdymu, nebuvo padaryta. Iš tikrųjų pupelę, jos sąsają ir XML programos konteksto konfigūraciją gali valdyti įprasta „Java SE“ klasė, tokia kaip parodyta žemiau:

--- MainServiceAppContext.java ---

paketo pavyzdžiai.springhttp; importuoti org.springframework.context.ApplicationContext; importuoti org.springframework.context.support.ClassPathXmlApplicationContext; / ** * Parodo, kaip pavasarines pupeles galima naudoti be HTTP įsitraukimo. * / public class MainServiceAppContext {public static void printStateInfo (final StateCapitalServiceIF stateCapitalMapper, final String state) {System.out.println ("" + state + "kapitalas yra" + stateCapitalMapper.getCapital (valstija)); } / ** * @param argumentuoja komandinės eilutės argumentus * / public static void main (String [] args) {final ApplicationContext context = new ClassPathXmlApplicationContext ("pavyzdžiai / springhttp / spring-http-config.xml"); StateCapitalServiceIF stateCapitalMapper = (StateCapitalServiceIF) context.getBean ("stateCapitalService"); „printStateInfo“ („stateCapitalMapper“, „Alabama“); „printStateInfo“ (stateCapitalMapper, „Koloradas“); }} 

3 žingsnis: web.xml Failas

Tai web.xml failas yra žinomas visiems, kurie sukūrė „Java EE“ žiniatinklio programą. web.xml naudojamas šiame pavyzdyje, rodomas toliau.

  Paprastas „Spring“ HTTP nuotolinio valdymo pavyzdys Tai yra labai paprastas „Spring“ HTTP nuotolinio valdymo galimybės naudojimo pavyzdys. statesCapitals org.springframework.web.servlet.DispatcherServlet 1 statesCapitals / statesCapitals org.springframework.web.context.ContextLoaderListener contextConfigLocation /WEB-INF/examples/springhttp/spring-http-configx 

4 žingsnis: „Servlet“ konteksto konfigūracijos failas

Kadangi šio pavyzdžio servletas pavadintas „statesCapitals“, pavadintas „Spring“ servleto konfigūracijos failas statesCapitals-servlet.xml reikia pateikti. Tai rodoma toliau:

--- nurodo „Capitals-servlet.xml“ ---

   pavyzdžiai.springhttp.StateCapitalServiceIF httpStateCapitalService 

5 žingsnis: išbandykite jį

Turime sukonfigūruoti klientą bendrauti per HTTP su serverio programa. Tai konfigūracija yra pavasaris-http-klientas-config.xml šiame pavyzdyje ir rodomas toliau:

--- pavasaris-http-klientas-config.xml ---

   // localhost: 8080 / SpringHTTPExample / statesCapitals pavyzdžiai.springhttp.StateCapitalServiceIF 

Kliento kodas, kuris naudoja aukščiau nurodytą XML, kad paleistų „Spring“ konteinerį ir iškviestų serverio pusės kodą per HTTP, yra klasėje HttpClient ir tas kodas rodomas toliau:

--- HttpClient.java ---

paketo pavyzdžiai.springhttp.client; importuoti pavyzdžius.springhttp.StateCapitalServiceIF; importuoti org.springframework.context.ApplicationContext; importuoti org.springframework.context.support.ClassPathXmlApplicationContext; / ** * Ši klasė parodo pavasario HTTP paveiktos paslaugos klientą ir parodo, * kaip klientas sąveikauja su serveriu, tarsi naudodamas įprastus „Java“ objektus *, o ne naudodamas bet ką HTTP. * / public class HttpClient {public static void printStateInfo (final StateCapitalServiceIF stateCapitalMapper, final String state) {System.out.println ("+ valstijos +" kapitalas yra "+ stateCapitalMapper.getCapital (valstija)); } public static void main (final String [] argumentai) {final ApplicationContext context = new ClassPathXmlApplicationContext ("pavyzdžiai / springhttp / klientas / pavasaris-http-klientas-konfig.xml"); galutinis StateCapitalServiceIF stateCapitalService = (StateCapitalServiceIF) kontekstas.getBean ("stateCapitalProxyService"); „printStateInfo“ („stateCapitalService“, „Koloradas“); „printStateInfo“ (stateCapitalService, „Alabama“); }} 
$config[zx-auto] not found$config[zx-overlay] not found