Tomcat analysiert XML und erstellt Objekte durch Reflektion

Tomcat analysiert XML und erstellt Objekte durch Reflektion

Der folgende Beispielcode stellt die Prinzipien der XML-Analyse durch Tomcat und der Objekterstellung durch Reflektion vor. Der spezifische Code lautet wie folgt:

importiere java.lang.reflect.InvocationTargetException;
importiere java.lang.reflect.Method;
importiere java.util.List;
importiere org.dom4j.Document;
importiere org.dom4j.DocumentException;
importiere org.dom4j.Element;
importiere org.dom4j.io.SAXReader;
öffentliche Klasse ServerReadXML1 {
  öffentliche statische void main(String[] args)
      wirft DocumentException, ClassNotFoundException, InstantiationException, IllegalAccessException,
      NoSuchMethodException, SecurityException, IllegalArgumentException, InvocationTargetException {
    // Wenn Sie nun ein Servlet-URL-Muster im Browser eingeben
    String urlPattern = "/erste";
    // Den Klassennamen gemäß URL-Muster abrufen String className = getClassByUrl(urlPattern);
    // Holen Sie das Klassenobjekt basierend auf dem vollständigen Klassennamen. Class clazz = Class.forName(className);
    // Erstellen Sie das angegebene Objekt, indem Sie das Clazz-Objekt reflektieren. Object obj = clazz.newInstance();
    // Servicemethode abrufen. Method method = clazz.getDeclaredMethod("service");
    // Berechtigungen abrufen method.setAccessible(true);
    // Führen Sie die Servicemethode aus method.invoke(obj);
  }
  privater statischer String getClassByUrl(String urlPattern) löst DocumentException { aus.
    // 1. Erstellen Sie ein SAXReader-Objekt SAXReader reader = new SAXReader();
    // 2. Lesen Sie das Dateidokument. document = reader.read(ServerReadXML1.class.getClassLoader().getResourceAsStream("web.xml"));
    // 3. Holen Sie sich das Stammknotenelement rootElement = document.getRootElement();
    //System.out.println(rootElement.getName());
    // 4. Holen Sie sich die untergeordneten Knoten List<Element> unter dem Stammknoten servletList = rootElement.elements();
    // Zeichnen Sie den Inhalt des Servlet-Name-Tags auf, der mit dem URL-Muster identisch ist. String servletName = "";
    // Den Inhalt der Servlet-Klasse im Servlet-Tag aufzeichnen // Der Inhalt von ServletClassName ist der vollständige Klassenname des Servlets. String servletClassName = "";
    // 5. Durchlaufe untergeordnete Knoten für (Element servletElement : servletList) {
      //System.out.println(servletElement.getName());
      // Wenn es ein Servlet-Mapping-Tag ist, führen Sie den Code aus, wenn ("servlet-mapping".equals(servletElement.getName())) {
        // Holen Sie sich das URL-Muster-Tag-Objekt. Element url = servletElement.element("url-pattern");
        // Überprüfen Sie, ob der Inhalt des Tags mit dem eingegebenen URLPattern-Wert übereinstimmt, wenn (urlPattern.equals(url.getText())) {
          // Notieren Sie den Inhalt des Servlet-Name-Tags, der mit dem URL-Muster identisch ist. // Wenn sie identisch sind, notieren Sie den ServletName.
          // Inhalt des Servlet-Namens in der Servlet-Zuordnung abrufen servletName = servletElement.element("servlet-name").getText();
        }
      }
    }
    // Erneut durchlaufen für (Element servletElement : servletList) {
      // Wenn es ein Servlet-Tag ist, führen Sie diesen Code aus, wenn ("servlet".equals(servletElement.getName())) {
        // Bestimmen Sie, ob der Wert von servletName, der im vorherigen Durchlauf erhalten wurde, mit dem Inhalt von servlet-name in diesem Durchlauf übereinstimmt, wenn (servletName.equals(servletElement.element("servlet-name").getText())) {
          // Wenn derselbe Datensatz servletClassName
          servletClassName = servletElement.element("servlet-klasse").getText();
        }
      }
    }
    //Gibt den vollständigen Klassennamen des Servlets zurück servletClassName
    gibt ServletClassName zurück;
  }
}

1. 4 Möglichkeiten, Klasse durch Reflexion zu erhalten

@Prüfen
  public void test1() throws ClassNotFoundException {
    //1. Klassenname.Klasse
    Klasse clazz = String.klasse;
    System.out.println(clazz);
    //2. Objekt.getClass()
    Klasse clazz1 = "abc".getClass();
    System.out.println(clazz1);
    //3.Klasse.forName();
    Klasse clazz2 = Klasse.forName("java.lang.String");
    System.out.println(clazz2);
    //4.ClassLoader .loadClass("vollständiger Klassenname")
    Klasse clazz3 = ReflectTest1.class.getClassLoader().loadClass("java.lang.String");
    System.out.println(clazz3);
  }

2. Gängige Methoden zur Nutzung von Reflexionseigenschaften

@Prüfen
  public void test2() throws ClassNotFoundException, NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException {
    //Holen Sie sich das Klassenobjekt, um seine internen Eigenschaften abzurufen. Class clazz = Class.forName("com.atguigu.bean.User");
    Benutzer Benutzer = neuer Benutzer();
    //Das Field-Objekt stellt das Klassenattribut getField dar. Es kann nur das öffentliche Attribut Field abgerufen werden. field = clazz.getField("email");
    System.out.println(Feld);
     //Diese Methode zerstört die Kapselung des Codes und wird nicht empfohlen. Field field2 = clazz.getDeclaredField("id");
    System.out.println(Feld2);
    Feld2.Zugänglichsetzen(true);
    field2.setInt(Benutzer, 1001);
    System.out.println(Benutzer);
  }

3. Gängige Methoden zur Verwendung von Reflexion

@Prüfen
  public void test3() throws ClassNotFoundException, InstantiationException, IllegalAccessException, NoSuchMethodException, SecurityException, IllegalArgumentException, InvocationTargetException {
    Klasse clazz = Klasse.forName("com.atguigu.bean.User");
    //Erstellen Sie ein Objekt durch Reflexion. Object obj = clazz.newInstance();
    //Jetzt wollen wir den Namenswert festlegen String fileName = "name";
    //Erstellen Sie einen Methodennamen String methodName = "set" + fileName.substring(0, 1).toUpperCase() //N
    + fileName.substring(1).toLowerCase(); //Name
    //Holen Sie sich die öffentliche Methode entsprechend dem Methodennamen. Method method = clazz.getMethod(methodName, String.class);
    //Führen Sie die angegebene Methode aus method.invoke(obj, "yangjian");
    System.out.println(obj);
  }

Zusammenfassen

Das Obige ist das vom Editor eingeführte Prinzip der XML-Analyse von Tomcat und der Objekterstellung durch Reflexion. Ich hoffe, es wird allen helfen. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht und der Editor wird Ihnen rechtzeitig antworten. Ich möchte auch allen für ihre Unterstützung der Website 123WORDPRESS.COM danken!
Wenn Sie diesen Artikel hilfreich finden, können Sie ihn gerne abdrucken und dabei bitte die Quelle angeben. Vielen Dank!

Das könnte Sie auch interessieren:
  • Detaillierte Erläuterung der Tomcat-Kernkomponenten und der Anwendungsarchitektur
  • Detaillierte Erläuterung des Startprinzips des in SpringBoot integrierten Tomcat
  • Analysieren Sie das Arbeitsprinzip von Tomcat
  • Detaillierte Analyse des Startup.bat-Prinzips in Tomcat
  • Detaillierte Analyse des catalina.bat-Prinzips in Tomcat
  • Einführung in die Prinzipien, Konfiguration und Verwendung von Tomcat-Datenquellen
  • Detaillierte Erläuterung des Implementierungsprinzips der Tomcat-Hot-Bereitstellung
  • Analysieren Sie die Prinzipien der Tomcat-Architektur für den Architekturentwurf

<<:  In JavaScript integrierter Zeit- und Datumsformatierungsbeispielcode

>>:  Detaillierte Erklärung verschiedener Loop-Speed-Tests in JS, die Sie nicht kennen

Artikel empfehlen

Einige Hinweise zur MySQL-Self-Join-Deduplizierung

Lassen Sie mich kurz das Funktionsszenario erklär...

Mehrere Elemente in derselben Zeile unter Div in CSS rechtsbündig ausrichten

Methode 1: schweben: rechts Darüber hinaus wird d...

Unglaubliche CSS-Navigationsleiste unterstreiche folgenden Effekt

Der erste Cutter in China github.com/chokcoco Hie...

So zeigen Sie die Ausführungszeit von MySQL-Anweisungen über Query Profiler an

Im vorherigen Artikel wurden zwei Methoden zum Üb...

Konfigurationsmethode für die Mehrfachauswahlfunktion von React Mouse

Im Allgemeinen verfügen Listen über Auswahlfunkti...

Mit JS in zehn Minuten die Existenz von Elementen in einem Array bestimmen

Vorwort In der Front-End-Entwicklung müssen Sie h...

CentOS 6 verwendet Docker zum Bereitstellen eines Zookeeper-Betriebsbeispiels

Dieser Artikel beschreibt, wie man mit Docker Zoo...

Eine detaillierte Erklärung, wie React Fiber funktioniert

Inhaltsverzeichnis Was ist React Fiber? Warum Rea...

Klassischer Beispielcode für JavaScript-Funktionsaufrufe

Inhaltsverzeichnis Klassisches Beispiel für einen...

Umfassendes Verständnis des MySQL-Protokolls für langsame Abfragen

Inhaltsverzeichnis Was ist das Protokoll langsame...

Standardmäßige Stilanordnung von HTML4.0-Elementen

Code kopieren Der Code lautet wie folgt: html, Ad...