Heim  >  Artikel  >  Java  >  Warum wurde JSP eliminiert?

Warum wurde JSP eliminiert?

(*-*)浩
(*-*)浩Original
2019-05-11 11:05:018267Durchsuche

Bei den meisten früheren Projekten handelte es sich um Java-Programmierer, die sowohl Vater als auch Mutter waren und am Front-End (Ajax/jquery/js/html/css usw.) und Backend (Java/MySQL/Oracle usw.) arbeiteten. ).

Mit der Entwicklung der Zeit haben viele große, mittlere und kleine Unternehmen nach und nach begonnen, die Grenzen zwischen Front-End und Back-End immer klarer zu unterscheiden. Front-End-Ingenieure sind nur für Front-End verantwortlich. End-Dinge, und Back-End-Ingenieure sind nur für Back-End-Dinge verantwortlich. Wie das Sprichwort sagt, gibt es Spezialisierungen. Wenn eine Person alles weiß, ist sie schließlich in nichts gut.

Empfohlener Kurs: Java-Tutorial.

Warum wurde JSP eliminiert?

Große und mittlere Unternehmen brauchen Fachkräfte, und kleine Unternehmen brauchen Generalisten, aber für die persönliche Karriereentwicklung empfehle ich, sie zu trennen. Wenn Sie für den Rest Ihres Lebens nur Java essen, lernen Sie kein CSS, JS usw.

Konzentrieren Sie Ihre Energie auf Java, JVM-Prinzipien, Spring-Prinzipien, MySQL-Sperren, Transaktionen, Multithreading, große Parallelität, verteilte Architektur, Microservices und zugehöriges Projektmanagement usw., damit Ihre Kernkompetenz verbessert wird immer höher, wie das Sprichwort sagt: Was Sie in das Leben investieren, wird Ihnen das Leben zurückgeben.

(Voller positiver Energie:

Wenn Sie erst einmal zur Elite einer Branche gehören, glauben Sie mir, wenn die Zeit gekommen ist, werden Ihnen alle Autos, Häuser, Frauen, Geld und Chancen geboten . Keine Sorge, wirklich. Je mehr Kenntnisse man hat, desto mehr Geld muss man natürlich auch haben Intelligenz.

Je stärker Ihre Fähigkeiten sind, desto mehr Wert schaffen Sie für das Unternehmen, und das Unternehmen bietet Ihnen verschiedene Vorteile, eine Win-Win-Situation.

Einmal Früher verwendeten unsere Java-Webprojekte mehrere Backend-Frameworks, SpringMVC/Struts + Spring + Spring JDBC/Hibernate/Mybatis usw.

Die meisten Projekte sind im Java-Backend, der Kontrollschicht, in drei Schichten unterteilt ( Controller/Aktion), Business-Schicht (Dienst/Verwaltung), Persistenzschicht (Dao).

Die Kontrollschicht ist für den Empfang von Parametern, den Aufruf relevanter Geschäftsschichten, die Kapselung von Daten und die Weiterleitung an JSP-Seiten verantwortlich. Verwenden Sie dann verschiedene Tags (jstl/el) oder handgeschriebenes Java (<%=%>) auf der JSP-Seite, um die Hintergrunddaten anzuzeigen.

Richtig?

Schauen wir uns zunächst diese Situation an. Die Anforderungen wurden festgelegt, der Code wurde geschrieben und die Tests wurden abgeschlossen. Steht es kurz vor der Veröffentlichung?

Sie müssen Maven oder Eclipse und andere Tools verwenden, um Ihren Code in ein Kriegspaket zu packen und dieses Kriegspaket dann im Webcontainer in Ihrer Produktionsumgebung (Tomcat/jboss/weblogic/websphere/jetty/) zu veröffentlichen. Harz), richtig?

Nach der Veröffentlichung müssen Sie Ihren Webcontainer starten und mit der Bereitstellung von Diensten beginnen. Zu diesem Zeitpunkt können Sie auf Ihre Website zugreifen, indem Sie den Domänennamen, DNS usw. konfigurieren (vorausgesetzt, Sie sind eine Website).

Mal sehen, sind alle Ihre Front-End- und Back-End-Codes in diesem Kriegspaket? Einschließlich Ihrer JS-, CSS-, Bilder- und verschiedenen Bibliotheken von Drittanbietern, oder?

Okay, geben Sie den Domainnamen Ihrer Website (www.xxx.com) in den Browser ein. Was passiert danach? (Diese Frage ist in vielen Unternehmen auch eine Interviewfrage)

Ich habe es gerade gesagt: Wenn Sie keine gute Grundlage haben, suchen Sie bitte selbst nach Kinderschuhen.

Der Browser leitet über IP zu Ihrem Dienst weiter. Nach dem TCP-Drei-Wege-Handshake beginnt er, über das TCP-Protokoll auf Ihren Webserver zuzugreifen Anfrage und leitet dann die Antwort zurück, um Ihre Antwort an den Browser zurückzugeben.

Nehmen wir also zunächst an, dass Ihre Homepage 100 Bilder und eine einzige Tabellenabfrage enthält. Zu diesem Zeitpunkt ist die scheinbare einzige http-Anfrage des Benutzers nicht die erste. Für Ihre 100 Bilder wird der Browser 100 HTTP-Anfragen nacheinander anfordern (jemand wird mir von dem Problem der langen und kurzen HTTP-Links erzählen, das hier nicht besprochen wird). Wenn der Server diese Anfragen empfängt, muss er Speicher verbrauchen, um einen Socket für die TCP-Übertragung zu erstellen.

Hier ist der wichtige Punkt: In diesem Fall ist der Druck auf Ihren Webserver sehr hoch, da alle Anfragen auf der Seite nur an Ihren Server gesendet werden. Wenn es nur eine Person gibt, ist das in Ordnung , aber wenn es 10.000 Personen gleichzeitig gibt. Was den Zugriff betrifft (sprechen wir nicht über Webserver-Cluster, sondern über Einzelinstanz-Webserver): Wie viele TCP-Links kann Ihr Server verarbeiten? Wie viel Speicher hat Ihr Server? Wie viele IOs können Sie aushalten? Wie viel Speicher haben Sie dem Webserver zugewiesen? Wird es ausfallen?

Deshalb gilt: Je größer und mittelgroße Webanwendungen sind, desto stärker müssen sie entkoppelt werden.

Theoretisch können Sie Ihre Datenbank + Anwendungsdienst + Nachrichtenwarteschlange + Cache + vom Benutzer hochgeladene Dateien + Protokolle usw. auf einem Host ablegen, aber das ist, als würden Sie alle Eier in einen Korb legen, die versteckten Gefahren liegen darin riesig.

Die normale verteilte Architektur muss zerlegt werden, Ihr Anwendungsserver-Cluster (vorne, hinten) + Dateiserver-Cluster + Datenbankserver-Cluster + Nachrichtenwarteschlangen-Cluster + Cache-Cluster usw.

Kommen wir zur Sache. Zunächst sollten wir versuchen, die Verwendung von JSP in zukünftigen Java-Webprojekten zu vermeiden. Wir sollten die Front- und Backends entkoppeln und mit verteilter Architektur spielen, damit unsere Anwendungsarchitektur stärker wird .

Problempunkte bei der Verwendung von JSP:

1. Dynamische Ressourcen und statische Ressourcen sind alle miteinander gekoppelt, und eine echte dynamische und statische Trennung kann nicht erreicht werden. Der Server steht unter großem Druck, da er verschiedene HTTP-Anfragen empfängt, z. B. CSS-HTTP-Anfragen, JS-Anfragen, Bilder, dynamische Codes usw. Sobald es ein Problem mit dem Server gibt, werden Front- und Backend zusammengespielt und die Benutzererfahrung wird extrem schlecht sein.

2. Nachdem der Front-End-Ingenieur den HTML-Code fertiggestellt hat, muss der Java-Ingenieur den HTML-Code in eine JSP-Seite ändern. Die Fehlerrate ist hoch (da die Seite häufig eine große Anzahl von JS-Codes enthält). ) und beide Parteien müssen bei der Änderung des Problems zusammenarbeiten. Entwicklung, Ineffizienz.

3.jsp muss auf einem Webserver ausgeführt werden, der Java unterstützt (z. B. Tomcat usw.), und Nginx kann nicht verwendet werden (Nginx soll bis zu 50.000 Einzelinstanz-HTTP-Parallelität haben, dieser Vorteil). verwendet werden), und die Leistung kann nicht verbessert werden.

4. Wenn Sie JSP zum ersten Mal anfordern, muss es in ein Servlet auf dem Webserver kompiliert werden.

5. Jedes Mal, wenn Sie JSP anfordern, greifen Sie auf das Servlet zu und verwenden dann den Ausgabestream, um die HTML-Seite auszugeben, was nicht so effizient ist wie die direkte Verwendung von HTML.

Es gibt viele Tags und Ausdrücke in 6.jsp. Front-End-Ingenieure werden beim Ändern der Seite überfordert und stoßen auf viele Schwachstellen.

7. Wenn viel Inhalt in JSP vorhanden ist, ist die Seitenreaktion sehr langsam, da sie synchron geladen wird.

Basierend auf einigen der oben genannten Schwachstellen sollten wir die Entwicklungslast des gesamten Projekts nach vorne verlagern, um eine echte Entkopplung von Front- und Back-End zu erreichen!

Der alte Weg war:

1. Das serverseitige Servlet oder der Controller empfängt die Anfrage (Routing-Regeln werden vom Backend formuliert und der größte Teil davon). die gesamte Projektentwicklung im Backend)
3. Rufen Sie den Dienst und den Dao-Code auf, um die Geschäftslogik zu vervollständigen
4. JSP zurückgeben
5.jsp zeigt etwas dynamischen Code an

Der neue Weg ist:

1. Der Browser sendet eine Anfrage

2. Erreicht direkt die HTML-Seite (Routing-Regeln werden vom Frontend formuliert und das Gewicht der gesamten Projektentwicklung wird vorangetrieben)
3. Die HTML-Seite ist für den Aufruf der Serverschnittstelle zum Generieren von Daten verantwortlich (über Ajax usw. usw.)
4. Füllen Sie HTML aus, um dynamische Effekte anzuzeigen.

(Interessierte Kinder können große Websites wie Alibaba besuchen und dann F12 drücken, um zu überwachen, wie HTTP funktioniert, wenn Sie die Seite aktualisieren. Die meisten von ihnen fordern Hintergrunddaten separat an. Verwenden Sie JSON zur Übertragung von Daten anstelle einer großen und umfassenden http-Anfrage zur Rückgabe der gesamten Seite (einschließlich dynamisch + statisch)

Die Vorteile davon sind:

1. Echtes Front-End und Back-End können entkoppelt realisiert werden, der Front-End-Server verwendet Nginx.

Der Front-End-Server platziert eine Reihe statischer Ressourcen wie CSS, JS, Bilder usw. (Sie können sogar CSS, JS, Bilder und andere Ressourcen auf einem bestimmten Dateiserver wie Alibaba Cloud ablegen oss und verwenden Sie cdn Acceleration), der Front-End-Server ist für die Steuerung von Seitenverweisen, Sprüngen und dem Aufruf von Back-End-Schnittstellen verantwortlich. Der Back-End-Server verwendet Tomcat.

(Hier müssen Sie einige Front-End-Engineering-Frameworks wie NodeJS, React, Router, React, Redux, Webpack verwenden)

2. Wenn Sie einen Fehler finden, können Sie ihn schnell lokalisieren Das Problem: Nein. Es gibt das Phänomen, dass man sich gegenseitig den Ball zuwirft.

Seitenlogik, Sprungfehler, Browserkompatibilitätsprobleme, Skriptfehler, Seitenstile und andere Probleme werden alle von Front-End-Ingenieuren behandelt.

Schnittstellendatenfehler, nicht erfolgreich übermittelte Daten, Antwortzeitüberschreitungen und andere Probleme werden alle von Back-End-Ingenieuren gelöst.

Beide Parteien stören sich nicht gegenseitig. Das Front-End und das Back-End sind eine Familie, die sich liebt.

3. Bei großer Parallelität kann ich die Front-End- und Back-End-Server gleichzeitig horizontal erweitern. Für eine Homepage von Taobao müssen beispielsweise 2.000 Front-End-Server geclustert werden halten der durchschnittlichen täglichen PV von Hunderten von Millionen+ stand.

(Ich war auf dem Technologiegipfel von Alibaba und habe gehört, dass sie alle ihre Webcontainer selbst geschrieben haben. Selbst wenn eine einzelne Instanz 100.000 http-Parallelität aushalten kann, können 2.000 Einheiten 200 Millionen http-Parallelität verarbeiten, und sie können es auch verwenden Es ist beängstigend, vorherzusagen, dass es eine unbegrenzte Erweiterung geben wird. )

4 Reduzieren Sie den Parallelitätsdruck auf dem Back-End-Server und übertragen Sie alle http-Anfragen mit Ausnahme der Schnittstelle auf den Front-End-Nginx.

5. Auch wenn der Back-End-Dienst vorübergehend ausfällt oder ausfällt, ist die Front-End-Seite weiterhin normal zugänglich, die Daten werden jedoch nicht aktualisiert.

6. Möglicherweise benötigen Sie auch eine Light-Anwendung im Zusammenhang mit WeChat, damit Ihre Schnittstellen gemeinsam genutzt werden können. Wenn es auch App-bezogene Dienste gibt, können Sie über einen Code auch eine große Anzahl von Schnittstellen wiederverwenden Umbau zur Verbesserung der Effizienz.

7. Egal wie viele Dinge auf der Seite angezeigt werden, Sie haben keine Angst, weil sie asynchron geladen wird.

Hinweis:

1. Bei der Durchführung einer Anforderungsbesprechung müssen alle Front-End- und Back-End-Ingenieure teilnehmen und Schnittstellendokumente müssen Testfälle schreiben und lassen Sie nicht zu, dass Front-End-Ingenieure als Vollzeittest für Ihr Team dienen. Es wird empfohlen, das

Chrome Plug-in Postman zu verwenden und die Testfälle der Serviceschicht in Junit zu schreiben.

2. Die obige Schnittstelle ist nicht die Schnittstelle in Java. Um es ganz klar auszudrücken: Der Aufruf der Schnittstelle bedeutet den Aufruf der Methode in Ihrem Controller.

3. Erhöht die Arbeitsbelastung des Front-End-Teams, verringert die Arbeitsbelastung des Back-End-Teams und verbessert die Leistung und Skalierbarkeit.

4. Wir benötigen einige Front-End-Frameworks, um Funktionen wie Seitenverschachtelung, Paging, Seitensprungsteuerung usw. zu lösen. (Die oben genannten Front-End-Frameworks).

5. Wenn Ihr Projekt klein ist oder ein einfaches Intranetprojekt, können Sie sicher sein, dass keine Architektur erforderlich ist. Wenn es sich bei Ihrem Projekt jedoch um ein externes Netzwerkprojekt handelt, hahaha.

6. In der Vergangenheit verwendeten einige Leute Template-Frameworks wie Velocity/Freemarker, um statische Seiten zu generieren, aber jetzt wurde diese Praxis abgeschafft.

Der Hauptzweck dieses Artikels besteht darin, zu sagen, dass JSP in großen externen Java-Webprojekten eliminiert wurde, aber es heißt nicht, dass JSP für einige Studentenfreunde völlig ignoriert werden kann /servlet usw. Die relevanten Java-Webgrundlagen müssen noch gut beherrscht werden. Worauf basiert Ihrer Meinung nach das SpringMVC-Framework?

Das obige ist der detaillierte Inhalt vonWarum wurde JSP eliminiert?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:Was sind SQL und Servlets?Nächster Artikel:Was sind SQL und Servlets?