Προγραμματισμός

Απλό άνοιγμα HTTP Remoting παράδειγμα

Χρησιμοποιώ αυτήν την καταχώριση ιστολογίου για να δείξω με απλό παράδειγμα τη χρήση του HTTP Remoting του Spring Framework. Υπάρχουν πολλοί διαδικτυακοί πόροι για αυτό το θέμα, οπότε εδώ σκοπεύω να παράσχω μια εξαιρετικά απλή αλλά ολοκληρωμένη επίδειξη της χρήσης του HTTP Remoting της Spring με πελάτες που δεν χρησιμοποιούν πρόγραμμα περιήγησης.

Η εαρινή προσέγγιση του HTTP Remoting επιτρέπει στους πελάτες να επικοινωνούν με τον κωδικό διακομιστή Spring-host μέσω HTTP χωρίς τον κωδικό πελάτη που απαιτεί οποιαδήποτε γνώση του HTTP που χρησιμοποιείται. Αντ 'αυτού, ο κώδικας Java πελάτη "βλέπει" μόνο κανονικά αντικείμενα Java που σχετίζονται με επιχειρήσεις (συνήθως διασυνδέσεις) και όχι αντικείμενα ειδικά για HTTP.

Το Spring HTTP Remoting απαιτεί γενικά Spring και Java τόσο από την πλευρά του διακομιστή όσο και από την πλευρά του πελάτη. Ωστόσο, εάν μπορούν να ικανοποιηθούν αυτές οι δύο προϋποθέσεις, το Spring HTTP Remoting εφαρμόζεται εύκολα.

Τα ακόλουθα βήματα επιτρέπουν την επικοινωνία HTTP μεταξύ πελατών και διακομιστών που φιλοξενούνται από την άνοιξη. Αφού πρώτα σκιαγραφήσω τα βήματα, θα τα εξετάσω λεπτομερέστερα (συμπεριλαμβανομένων των δειγμάτων κώδικα).

  1. Δημιουργήστε ή χρησιμοποιήστε ένα υπάρχον Spring bean που συνήθως εφαρμόζει μια διεπαφή Java.

    Αυτό δεν είναι τίποτα ιδιαίτερο για την απομακρυσμένη HTTP και είναι το ίδιο βήμα που πρέπει να κάνετε για να κάνετε τα περισσότερα πράγματα την άνοιξη (μια αξιοσημείωτη εξαίρεση είναι

    Άνοιξη JDBC

    που δεν απαιτεί τη χρήση φασολιών από ελατήριο).

  2. Δημιουργήστε το αρχείο διαμόρφωσης Spring XML για να συσχετίσετε το φασόλι που δημιουργήθηκε στο βήμα # 1 με ένα περιβάλλον εφαρμογής Spring.

    Όπως και με το Βήμα # 1, αυτό το αρχείο XML δεν είναι τίποτα ιδιαίτερο για το Spring HTTP Remoting, αλλά αντίθετα είναι κοινό σε σχεδόν όλες τις καλωδιώσεις και τις ρυθμίσεις του Spring Framework.

  3. Δημιουργήστε ή προσθέστε σε web.xml αρχείο.

    Αυτό το τρίτο βήμα είναι το πρώτο βήμα που είναι πιο συγκεκριμένο για το Spring HTTP Remoting, αλλά εξακολουθεί να ισχύει γενικά με

    Άνοιξη πλαίσιο MVC

    . Αυτό το βήμα περιλαμβάνει την προσθήκη της αντιστοίχισης τάξης servlet και διευθύνσεων URL όπως συνήθως χρησιμοποιείται

    Java ΕΕ

    servlets

    και

    Σελίδες JavaServer

    . Το πιο σημαντικό μέρος αυτού του βήματος είναι να προσδιορίσετε την Άνοιξη

    DispatcherServlet

    . Ένας προαιρετικός "σύνδεσμος" παρέχεται επίσης σε αυτό

    web.xml

    αρχείο σε μια τοποθεσία διαμόρφωσης περιβάλλοντος όπου βρίσκονται ένα ή περισσότερα αρχεία περιβάλλοντος εφαρμογής Spring XML.

  4. Δημιουργήστε ένα αρχείο περιβάλλοντος servlet ειδικά για την άνοιξη.

    Αυτό το αρχείο XML μοιάζει πολύ με ένα "κανονικό" αρχείο διαμόρφωσης περιβάλλοντος εφαρμογής XML, αλλά το όνομά του καθορίζεται από τη σύμβαση του ονόματος servlet ακολουθούμενο από μια παύλα και τη λέξη servlet. Με άλλα λόγια, αν ο servlet ονομάστηκε "Κάτι" στο

    web.xml

    αρχείο, θα ονομάζεται αυτό το αρχείο διαμόρφωσης servlet Spring

    someebthing-servlet.xml

    . Αυτό το αρχείο περιέχει τη διαμόρφωση για το

    HttpInvokerServiceExporter

    (το κομμάτι αυτού που αφορά ειδικά το HTTP Remoting που καλύπτεται σε αυτήν την καταχώριση ιστολογίου) και πληροφορίες αντιστοίχισης διευθύνσεων URL.

  5. Δοκιμή!

    Παρόλο που ο απλός πελάτης θα γράφει χωρίς να έχει κατά νου το HTTP και φαίνεται ότι χρησιμοποιεί μόνο αντικείμενα Java, θα κάνει πραγματικά χρήση της υπηρεσίας μέσω HTTP. Αυτό θα "αποδειχθεί" εκτελώντας τον υπολογιστή-πελάτη χωρίς την υπηρεσία που έχει αναπτυχθεί και παρακολουθώντας τον προκύπτοντα κωδικό σφάλματος HTTP.

Θα προχωρήσω τώρα στην επίδειξη των παραπάνω βημάτων με μεγαλύτερη λεπτομέρεια και θα προσπαθήσω να τα απεικονίσω συγκεκριμένα με δείγματα κώδικα.

Βήμα 1: Το φασόλι και η διεπαφή του

Αυτό το βήμα δεν διαφέρει από τον ορισμό τάξεων Java και διεπαφών που εφαρμόζουν για χρήση με το Spring. Οι ακόλουθες καταχωρίσεις κώδικα δείχνουν τη διεπαφή (StateCapitalServiceIF) και την τάξη εφαρμογής (StateCapitalService) χρησιμοποιείται για αυτό το παράδειγμα.

--- StateCapitalServiceIF.java ---

παραδείγματα πακέτων.springhttp; εισαγωγή java.io.Serializable; / ** * Η διεπαφή State Capital Service που θα χρησιμοποιήσει ο πελάτης για πρόσβαση σε * λειτουργικότητα από διακομιστή μέσω HTTP. * / δημόσια διεπαφή StateCapitalServiceIF επεκτείνεται Serializable {/ ** * Παροχή πρωτεύουσας της πολιτείας του οποίου το όνομα παρέχεται. * * @param stateName Όνομα της πολιτείας του οποίου το κεφάλαιο είναι επιθυμητό. * @return Capital της καθορισμένης κατάστασης. μηδέν αν δεν βρεθεί. * / public String getCapital (final String stateName). } 

--- StateCapitalService.java ---

παραδείγματα πακέτων.springhttp; εισαγωγή java.util.Map; / ** * Εφαρμογή λειτουργικότητας που θα εκτελεστεί αφού κληθεί από τον πελάτη μέσω * HTTP. * / Δημόσια τάξη StateCapitalService εφαρμόζει StateCapitalServiceIF {Map StatesAndCapitals = null; public StateCapitalService () {} / ** * Ρύθμιση της αντιστοίχισης των πολιτειών μου σε πρωτεύουσες. * * @param StatesAndCapitals States to state capaps χαρτογράφηση. * / public void setStatesAndCapitals (τελικός χάρτης StatesAndCapitals) {this.statesAndCapitals = StatesAndCapitals; } / ** * Παρέχετε πρωτεύουσα της πολιτείας του οποίου το όνομα παρέχεται. * * @param stateName Όνομα της πολιτείας του οποίου το κεφάλαιο είναι επιθυμητό. * @return Capital της καθορισμένης κατάστασης. μηδέν αν δεν βρεθεί. * / public String getCapital (final String stateName) {return this.statesAndCapitals.get (stateName); }} 

Βήμα 2: Άνοιξη αρχείου διαμόρφωσης περιβάλλοντος εφαρμογής

Μου αρέσει να διαχωρίζω τη διαμόρφωση ειδικά για HTTP της Spring από τη διαμόρφωση XML του bean. Επομένως, η διαμόρφωση του φασολιού είναι ακριβώς όπως θα μπορούσε κανείς να δει κανονικά με την Άνοιξη. Για να διαμορφώσετε το StateCapitalService κλάση παραπάνω, χρησιμοποιείται η ακόλουθη διαμόρφωση:

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

Μέχρι στιγμής, δεν έχει γίνει τίποτα συγκεκριμένο για το HTTP Remoting. Στην πραγματικότητα, το φασόλι, η διεπαφή του και η διαμόρφωση περιβάλλοντος εφαρμογής XML θα μπορούσαν να εκτελεστούν από μια κανονική κλάση Java SE όπως αυτή που φαίνεται παρακάτω:

--- MainServiceAppContext.java ---

παραδείγματα πακέτων.springhttp; εισαγωγή org.springframework.context.ApplicationContext; εισαγωγή org.springframework.context.support.ClassPathXmlApplicationContext; / ** * Δείχνει πώς το Spring bean μπορεί να χρησιμοποιηθεί χωρίς καμία συμμετοχή HTTP. * / public class MainServiceAppContext {public static void printStateInfo (final StateCapitalServiceIF stateCapitalMapper, final String state) {System.out.println ("Η πρωτεύουσα του" + state + "είναι" + stateCapitalMapper.getCapital (state)) } / ** * @param υποστηρίζει τα ορίσματα της γραμμής εντολών * / public static void main (String [] args) {final ApplicationContext context = new ClassPathXmlApplicationContext ("example / springhttp / spring-http-config.xml"); StateCapitalServiceIF stateCapitalMapper = (StateCapitalServiceIF) context.getBean ("stateCapitalService"); printStateInfo (stateCapitalMapper, "Αλαμπάμα"); printStateInfo (stateCapitalMapper, "Κολοράντο"); }} 

Βήμα # 3: Το web.xml Αρχείο

Αυτό web.xml Το αρχείο είναι γνωστό σε οποιονδήποτε έχει αναπτύξει μια εφαρμογή web Java EE. ο web.xml χρησιμοποιείται σε αυτό το παράδειγμα εμφανίζεται στη συνέχεια.

  Simple Spring HTTP Remoting Παράδειγμα Αυτό σημαίνει ως ένα εξαιρετικά απλό παράδειγμα χρήσης της δυνατότητας HTTP Remoting Spring. StatesCapitals org.springframework.web.servlet.DispatcherServlet 1 StatesCapitals / StatesCapitals org.springframework.web.context.ContextLoaderListener konteksConfigLocation /WEB-INF/examples/springhttp/spring-http-config.http-config 

Βήμα # 4: Το αρχείο διαμόρφωσης περιβάλλοντος Servlet

Επειδή το servlet σε αυτό το παράδειγμα ονομάζεται "StatesCapitals", ονομάζεται ένα αρχείο ρυθμίσεων Spring servlet StatesCapitals-servlet.xml πρέπει να παρέχεται. Εμφανίζεται στη συνέχεια:

--- StatesCapitals-servlet.xml ---

   example.springhttp.StateCapitalServiceIF httpStateCapitalService 

Βήμα # 5: Δοκιμή του

Πρέπει να ρυθμίσουμε τον πελάτη ώστε να επικοινωνεί μέσω HTTP με την εφαρμογή μας στο διακομιστή. Η διαμόρφωση για αυτό περιλαμβάνεται στο spring-http-client-config.xml για αυτό το παράδειγμα και εμφανίζεται παρακάτω:

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

   // localhost: 8080 / SpringHTTPExample / statesCapital models.springhttp.StateCapitalServiceIF 

Ο κωδικός πελάτη που χρησιμοποιεί το παραπάνω XML για εκκίνηση ενός Spring container και κλήση του κωδικού διακομιστή μέσω HTTP βρίσκεται στην τάξη HttpClient και αυτός ο κωδικός εμφανίζεται στη συνέχεια:

--- HttpClient.java ---

παράδειγμα πακέτου.springhttp.client; εισαγωγή παραδειγμάτων.springhttp.StateCapitalServiceIF; εισαγωγή org.springframework.context.ApplicationContext; εισαγωγή org.springframework.context.support.ClassPathXmlApplicationContext; / ** * Αυτή η τάξη δείχνει έναν πελάτη μιας υπηρεσίας Spring HTTP που εκτελείται και δείχνει * πώς ο πελάτης αλληλεπιδρά με τον διακομιστή σαν να χρησιμοποιεί κανονικά αντικείμενα Java * αντί να χρησιμοποιεί οτιδήποτε συγκεκριμένο HTTP. * / δημόσια τάξη HttpClient {public static void printStateInfo (final StateCapitalServiceIF stateCapitalMapper, final String state) {System.out.println ("Η πρωτεύουσα του" + state + "είναι" + stateCapitalMapper.getCapital (state)); } public static void main (final επιχειρήματα String []) {final ApplicationContext context = new ClassPathXmlApplicationContext ("example / springhttp / client / spring-http-client-config.xml"); τελικό StateCapitalServiceIF stateCapitalService = (StateCapitalServiceIF) context.getBean ("stateCapitalProxyService"); printStateInfo (stateCapitalService, "Κολοράντο"); printStateInfo (stateCapitalService, "Αλαμπάμα"); }} 
$config[zx-auto] not found$config[zx-overlay] not found