Methode 1: Daten in der init()-Methode des Servlets zwischenspeichern.
Nachdem der Anwendungsserver die Servlet-Instanz initialisiert hat und bevor er Clientanforderungen bedient, ruft er die init()-Methode des Servlets auf. Im Lebenszyklus eines Servlets wird die Methode init() nur einmal aufgerufen. Durch das Zwischenspeichern einiger statischer Daten in der init()-Methode oder das Ausführen einiger zeitaufwändiger Vorgänge, die nur einmal ausgeführt werden müssen, kann die Systemleistung erheblich verbessert werden.
Das beste Beispiel ist beispielsweise die Einrichtung eines JDBC-Verbindungspools. Angenommen, wir verwenden die DataSource-Schnittstelle von jdbc2.0, um eine Datenbankverbindung zu erhalten. Wir können uns vorstellen, dass in einer bestimmten Anwendung die Systemleistung stark abnimmt, wenn für jede SQL-Anfrage eine JNDI-Abfrage ausgeführt wird. Die Lösung ist der folgende Code, der die DataSource zwischenspeichert, damit sie beim nächsten SQL-Aufruf weiterhin verwendet werden kann:
Das Folgende ist ein Referenzfragment:
öffentliche Klasse ControllerServlet erweitert HttpServlet{
private javax.sql.DataSource testDS = null;
public void init(ServletConfig config) löst eine ServletException {
super.init(config);
Kontext ctx = null;
versuchen{
ctx = new InitialContext();
testDS = (javax.sql.DataSource)ctx.lookup("jdbc/testDS");
}catch(NamingException ne){ne.printStackTrace();}
}catch(Exception e){e.printStackTrace();}
}
öffentliche javax.sql.DataSource getTestDS(){
testDS zurückgeben;
}
...
...
}
Methode 2: Deaktivieren Sie das automatische Neuladen von Servlets und JSP (automatisches Neuladen).
Servlet/JSP bietet eine praktische Technologie, nämlich die Technologie zum automatischen Neuladen, die Entwicklern eine gute Entwicklungsumgebung bietet, wenn Sie Servlet- und JSP-Seiten ändern, ohne den Anwendungsserver neu starten zu müssen. Diese Technologie bedeutet jedoch einen enormen Verlust an Systemressourcen während der Produktlaufzeit, da sie eine enorme Belastung für den Klassenlader der JSP-Engine darstellt. Daher ist das Ausschalten der automatischen Neuladefunktion eine große Hilfe zur Verbesserung der Systemleistung.
Methode 3: Missbrauchen Sie HttpSession nicht.
In vielen Anwendungen muss unser Programm den Status des Clients aufrechterhalten, damit Seiten miteinander kommunizieren können. Da HTTP jedoch von Natur aus zustandslos ist, kann es den Status des Clients leider nicht speichern. Daher stellen allgemeine Anwendungsserver Sitzungen bereit, um den Status des Clients zu speichern. Im JSP-Anwendungsserver wird die Sitzungsfunktion über das HttpSession-Objekt implementiert. Dies ist zwar praktisch, belastet das System jedoch auch erheblich. Denn jedes Mal, wenn Sie eine Sitzung abrufen oder aktualisieren, muss der Systembetreiber zeitaufwändige Serialisierungsvorgänge daran durchführen. Sie können die Systemleistung durch die folgenden Verarbeitungsmethoden für HttpSession verbessern.
Wenn dies nicht erforderlich ist, sollten die Standardeinstellungen für HttpSession auf der JSP-Seite deaktiviert werden. Jede JSP-Seite erstellt standardmäßig eine HttpSession, wenn Sie dies nicht explizit angeben. Wenn Sie die Sitzung in Ihrer JSP nicht benötigen, können Sie sie über den folgenden JSP-Seitenindikator deaktivieren:
Das Folgende ist ein Referenzfragment:
<%@ page session="false"%>
Speichern Sie keine großen Datenobjekte in HttpSession: Wenn Sie große Datenobjekte in HttpSession speichern, serialisiert der Anwendungsserver diese jedes Mal, wenn sie gelesen oder geschrieben werden, wodurch das System zusätzlich belastet wird. Je größer das Datenobjekt ist, das Sie in HttpSession speichern, desto schneller nimmt die Systemleistung ab.
Wenn Sie die HttpSession nicht mehr benötigen, geben Sie sie so schnell wie möglich frei: Wenn Sie die Sitzung nicht mehr benötigen, können Sie sie durch Aufrufen der Methode HttpSession.invalidate() freigeben. Versuchen Sie, das Sitzungszeitlimit so kurz wie möglich festzulegen: Im JSP-Anwendungsserver gibt es ein Standardsitzungszeitlimit. Wenn der Kunde nach dieser Zeit keine Vorgänge ausführt, gibt das System die entsprechende Sitzung automatisch aus dem Speicher frei. Je größer das Timeout eingestellt ist, desto geringer ist die Systemleistung. Versuchen Sie daher am besten, den Wert so niedrig wie möglich zu halten.
Methode 4: Das Komprimieren der Seitenausgabe
ist eine gute Möglichkeit, Datenredundanz zu beheben, insbesondere heute, wenn die Netzwerkbandbreite nicht ausreichend entwickelt ist. Einige Browser unterstützen gzip (GNU zip) zum Komprimieren von HTML-Dateien. Diese Methode kann die Downloadzeit von HTML-Dateien erheblich verkürzen. Wenn Sie daher die von einem Servlet oder einer JSP-Seite generierte HTML-Seite komprimieren, wird der Benutzer das Gefühl haben, dass die Geschwindigkeit beim Durchsuchen der Seite sehr hoch ist. Leider unterstützen nicht alle Browser die GZIP-Komprimierung, aber Sie können in Ihrem Programm prüfen, ob der Browser des Clients dies unterstützt. Das Folgende ist ein Codeausschnitt zur Implementierung dieser Methode:
Das Folgende ist ein Zitatausschnitt:
public void doGet(HttpServletRequest-Anfrage, HttpServletResponse-Antwort)
wirft IOException, ServletException {
OutputStream out = null;
String-Kodierung = request.getHeader("Accept-Encoding");
if (encoding != null && binding.indexOf("gzip") != -1){
request.setHeader("Content-Encoding" , "gzip");
out = new GZIPOutputStream(request.getOutputStream());
}
else if (encoding != null && binding.indexOf("comdivss") != -1){
request.setHeader("Content-Encoding" , "comdivss");
out = new ZIPOutputStream(request.getOutputStream());
}anders{
out = request.getOutputStream();
}
...
...
}
Methode 5: Verwenden Sie den Thread-Pool.
Der Anwendungsserver erstellt standardmäßig einen Thread für die Verarbeitung jeder einzelnen Client-Anfrage und weist ihnen die service()-Methode zu. Wenn der service()-Methodenaufruf abgeschlossen ist, wird auch der entsprechende Thread abgebrochen . Da das Erstellen und Zerstören von Threads bestimmte Systemressourcen verbraucht, verringert dieser Standardmodus die Systemleistung. Aber glücklicherweise können wir diese Situation ändern, indem wir einen Thread-Pool erstellen.
Darüber hinaus müssen wir für diesen Thread-Pool eine minimale Anzahl von Threads und eine maximale Anzahl von Threads festlegen. Wenn der Anwendungsserver startet, erstellt er einen Thread-Pool mit einer Anzahl, die der Mindestanzahl von Threads entspricht. Wenn ein Kunde eine Anfrage hat, wird ein Thread zur Verarbeitung aus dem Pool entnommen zurück in die Mitte legen. Wenn nicht genügend Threads im Pool vorhanden sind, erhöht das System automatisch die Anzahl der Threads im Pool, die Gesamtzahl darf jedoch die maximale Anzahl an Threads nicht überschreiten. Durch die Verwendung des Thread-Pools zeigt die Systemlast bei einem starken Anstieg der Clientanforderungen eine sanfte Aufwärtskurve und verbessert so die Skalierbarkeit des Systems.
Methode 6: Wählen Sie den richtigen Seiteneinschlussmechanismus.
Es gibt zwei Methoden in JSP, die zum Einbinden einer weiteren Seite verwendet werden können:
1. Verwenden Sie die Include-Direktive.
Das Folgende ist ein Referenzfragment.
<%@ includee file=“test.jsp“ %>
2. Verwenden Sie den JSP-Indikator.
Das Folgende ist ein Referenzfragment:
In der Praxis zeigt sich, dass bei Verwendung der ersten Methode die Systemleistung höher sein kann.
Methode 7: Den Lebenszyklus von Javabeans richtig bestimmen
Einer der leistungsstarken Aspekte von JSP ist die Unterstützung von Javabeans. JavaBeans können direkt in eine JSP-Seite eingefügt werden, indem das Tag jsp:useBean in der JSP-Seite verwendet wird. So verwenden Sie es:
Hier ist ein Zitatausschnitt:
</jsp:useBean>
Das Scope-Attribut weist auf den Lebenszyklus dieser Bean hin. Der Standardlebenszyklus ist Seite. Wenn Sie den Bean-Lebenszyklus nicht richtig auswählen, beeinträchtigt dies die Leistung des Systems.
Wenn Sie beispielsweise nur eine bestimmte Bean in einer Anfrage verwenden möchten, den Lebenszyklus der Bean jedoch auf „Sitzung“ festlegen, bleibt die Bean nach Ende der Anfrage immer noch im Speicher, es sei denn, die Sitzung läuft ab oder der Benutzer schließt den Browser. Dadurch wird eine gewisse Menge an Speicher verbraucht und die Arbeitslast des JVM-Garbage Collectors unnötig erhöht. Daher wird die Systemleistung verbessert, wenn der richtige Lebenszyklus für Beans festgelegt wird und diese so bald wie möglich nach Ende ihrer Mission bereinigt werden.
Einige andere nützliche Methoden
1. Versuchen Sie, den „+“-Operator nicht in Zeichenfolgenverbindungsoperationen zu verwenden: In der Java-Programmierung verwenden wir häufig den „+“-Operator, um mehrere Zeichenfolgen zu verbinden, aber Sie haben möglicherweise noch nie daran gedacht Wird es tatsächlich Auswirkungen haben? Systemleistung? Da Zeichenfolgen Konstanten sind, generiert die JVM einige temporäre Objekte. Je mehr „+“ Sie verwenden, desto mehr temporäre Objekte werden generiert, was sich auch auf die Systemleistung auswirkt. Die Lösung besteht darin, ein StringBuffer-Objekt anstelle des „+“-Operators zu verwenden.
2. Vermeiden Sie die Verwendung der Methode System.out.println(): Da es sich bei System.out.println() um einen synchronen Aufruf handelt, muss der Festplatten-E/A-Vorgang beim Aufruf auf seinen Abschluss warten, also sollten wir es versuchen um es nicht zu benutzen. Aber es ist ein unverzichtbares und praktisches Werkzeug, wenn wir das Programm debuggen. Um diesen Widerspruch zu lösen, empfehle ich Ihnen, das Log4j-Tool ( http://Jakarta.apache.org ) zu verwenden, das das Debuggen ohne Methoden wie System.out erleichtern kann .println() wird generiert.
3. Kompromiss zwischen ServletOutputStream und PrintWriter: Die Verwendung von PrintWriter kann einen kleinen Overhead mit sich bringen, da die gesamte Originalausgabe zur Ausgabe in einen Zeichenstrom konvertiert wird. Wenn sie also als Seitenausgabe verwendet wird, muss das System einen Konvertierungsprozess durchführen. Es gibt kein Problem, wenn Sie ServletOutputStream als Seitenausgabe verwenden, die Ausgabe erfolgt jedoch binär. Daher müssen die Vor- und Nachteile beider in der praktischen Anwendung abgewogen werden.
Zusammenfassung
Der Zweck dieses Artikels besteht darin, die Leistung Ihrer Anwendung durch einige Optimierungstechniken für Servlets und JSP erheblich zu verbessern und somit die Leistung der gesamten J2EE-Anwendung zu verbessern. Durch diese Optimierungstechniken können Sie feststellen, dass nicht eine bestimmte technische Plattform (wie der Streit zwischen J2EE und .NET) die Leistung Ihrer Anwendung bestimmt. Wichtig ist, dass Sie ein tieferes Verständnis dieser Plattform haben Nur dann können Sie Ihre Anwendung grundlegend optimieren.