Website-Architektur und Entwicklung der Spring MVC-Codepraxis
Dieser Artikel teilt Ihnen die Website-Architektur und die Entwicklung der Spring MVC-Code-Praxis mit. Der Inhalt ist ziemlich gut. Ich hoffe, er kann Freunden in Not helfen.
Website-Architektur und seine Entwicklung
Infrastruktur
Methode zur Zerlegung der Netzwerkübertragung:
Standard-OSI-Referenzmodell
TCP/IP-Referenzmodell
Lösungen für große Datenmengen
-
Caching und Seitenstatisierung
-
Cache
Direkt im Speicher über das Programm speichern
Caching-Frameworks verwenden (Encache, Redis, Memcache)
-
Statische Seite
Generiert mit Template-Technologie (Velocity, FreeMaker usw.)
-
Datenbankoptimierung
-
Tabellenstrukturoptimierung
-
SQL-Anweisungsoptimierung
-
Partition
-
Tabelle
-
Indexoptimierung
-
Verwenden Sie gespeicherte Prozeduren anstelle von direkten Manipulationsverfahren
-
Aktive Daten trennen
-
Batch-Lesen und verzögerte Änderung
-
Trennung von Lesen und Schreiben
-
Verteilte Datenbank
-
NoSQL und Hadoop
Lösung mit hoher Parallelität
Trennung von Anwendungen und statischen Ressourcen: statische Dateien ( Bilder , Videos, JS, CSS usw.) werden auf einem dedizierten Server
Seiten-Caching (Nginx-Server, Squid-Server)
Clustering und Verteilung
Reverse-Proxy
CDN
-
Grundlegende Optimierung: Netzwerkübertragungsprotokoll
TCP kommuniziert vor der Übertragung dreimal, was als „Drei-Wege-Handshake“ bezeichnet wird. Nach der Übertragung der Daten kommuniziert es viermal, wenn die Verbindung getrennt wird, was als „vier Wellen“ bezeichnet wird.
TCP hat zwei Sequenznummern und drei Flag-Bits, was bedeutet:
seq: Gibt die Sequenznummer der übertragenen Daten an. Jedes Byte während der TCP-Übertragung hat eine Sequenznummer. Wenn der Empfang nicht abgeschlossen ist, wird die erste Sequenznummer an die andere Partei gesendet , muss es erneut übertragen werden. Auf diese Weise kann die Datenintegrität gewährleistet werden.
ack: Gibt die Bestätigungsnummer an. Das empfangende Ende sendet damit die erfolgreich empfangenen Dateninformationen an das sendende Ende zurück. Sein Wert ist die Startsequenznummer des nächsten Datenpakets, das es zu empfangen hofft.
ACK: Bestätigungsbit, Bestätigung funktioniert nur, wenn ACK = 1. Während der normalen Kommunikation ist die ACK 1. Wenn die Anfrage zum ersten Mal initiiert wird, ist die ACK 0, da keine Daten vorhanden sind, die bestätigt werden müssen.
SYN: Synchronisationsbit, das zum Synchronisieren der Sequenznummer beim Verbindungsaufbau verwendet wird. Wenn die Verbindung zum ersten Mal hergestellt wird, gibt es keine Möglichkeit, eine Bestätigung festzulegen. Die Rolle von SYN besteht darin, dieses Problem zu lösen SYN = 1-Bericht Beim Schreiben wird die Bestätigung direkt auf den Wert der empfangenen Sequenz + 1 gesetzt. Beachten Sie, dass der Wert hier nicht nach der Überprüfung festgelegt wird, sondern direkt gemäß SYN festgelegt wird, sodass der normale Mechanismus ausgeführt werden kann. daher heißt SYN Synchronisationsbit. SYN ist in den ersten beiden Handshakes 1, da die Bestätigung beider Kommunikationsparteien einen Anfangswert festlegen muss.
FIN: Beendigungsbit, das zum Lösen der Verbindung nach Abschluss der Datenübertragung verwendet wird.
DNS-Einstellungen
DNS-Auflösung
Beziehen Sie sich auf die Domänennameneinstellungen. Im Folgenden sind meine Einstellungen für den Tencent Cloud-Domänennamen aufgeführt
Datensatztyp:
Ein Eintrag: Verweisen Sie den Domänennamen auf eine IPv4-Adresse (z. B.: 8.8.8.8)
CNAME: Verweisen Sie den Domänennamen auf einen anderen Domänennamen ( z.B. www.54tianzhisheng .cn)
MX: Verweisen Sie den Domainnamen auf die Mailserveradresse
TXT: Kann beliebig ausgefüllt werden, die Länge ist auf 255 begrenzt, normalerweise SPF-Einträge (Anti-Spam)
NS: Domain-Name-Server-Eintrag, geben Sie den Subdomain-Namen an andere DNS-Server zur Auflösung an
AAAA: Verweisen Sie den Domänennamen auf eine iPv6-Adresse (Beispiel: ff06:0:0:0:0:0:0:c3)
SRV: Eintragen der Server, der einen bestimmten Dienst bereitstellt (z. B. xmpp-server.tcp)
Explizite URL: Domainname 301 an eine andere Adresse umleiten
Implizite URL: Ähnlich der expliziten URL, verbirgt jedoch die tatsächliche Zieladresse
Hostdatensatz:
Um www.54tianzhisheng.cn aufzulösen, füllen Sie bitte www aus . Der Host-Eintrag ist das Präfix des Domänennamens:
www: *Der aufgelöste Domänenname ist www.54tianzhisheng.cn.
*@: Löst den Hauptdomänennamen 54tianzhisheng.cn direkt auf.
*: Pananalytisch, passend zu allen anderen Domainnamen *.54tianzhisheng.cn.
mail: löst den Domänennamen in mail.54tianzhisheng.cn auf, der normalerweise zum Auflösen des Postfachservers verwendet wird.
Domänenname der zweiten Ebene: Zum Beispiel: abc.54tianzhisheng.cn, füllen Sie abc aus.
Mobile Website: Zum Beispiel: m.54tianzhisheng.cn, füllen Sie m aus.
Verwendung von Socket in Java
Verwendung von gewöhnlichem Socket
Socket ist in zwei Kategorien unterteilt: ServerSocket und Socket.
ServerSocket wird auf der Serverseite verwendet. Es kann über die Accept-Methode auf Anfragen warten und den Socket nach dem Abhören der Anfrage zurückgeben.
Socket-Benutzer schließen die Datenübertragung speziell ab Verwendet Socket direkt zum Senden von Anforderungen und zum Übertragen von Daten.
Ich habe gerade eine Demo zum einseitigen Versenden von Nachrichten geschrieben:
Kunde:
<span style="color:rgb(199,146,234);line-height:20px;font-size:13px !important;white-space: !important;">import</span><span style="color:rgb(238,255,255);line-height:20px;font-size:13px !important;white-space: !important;"> java</span><span style="color:rgb(204,204,204);line-height:20px;font-size:13px !important;white-space: !important;">.</span><span style="color:rgb(238,255,255);line-height:20px;font-size:13px !important;white-space: !important;">io</span><span style="color:rgb(204,204,204);line-height:20px;font-size:13px !important;white-space: !important;">.</span><span style="color:rgb(126,165,247);line-height:20px;font-size:13px !important;white-space: !important;">IOException</span><span style="color:rgb(204,204,204);line-height:20px;font-size:13px !important;white-space: !important;">;</span>
<span style="color:rgb(199,146,234);line-height:20px;font-size:13px !important;white-space: !important;">import</span><span style="color:rgb(238,255,255);line-height:20px;font-size:13px !important;white-space: !important;"> java</span><span style="color:rgb(204,204,204);line-height:20px;font-size:13px !important;white-space: !important;">.</span><span style="color:rgb(238,255,255);line-height:20px;font-size:13px !important;white-space: !important;">io</span><span style="color:rgb(204,204,204);line-height:20px;font-size:13px !important;white-space: !important;">.</span><span style="color:rgb(126,165,247);line-height:20px;font-size:13px !important;white-space: !important;">OutputStream</span><span style="color:rgb(204,204,204);line-height:20px;font-size:13px !important;white-space: !important;">;</span>
-
.<span style="color:rgb(199,146,234);line-height:20px; Schriftgröße:13px !important;white-space: !important;">import<code style="margin-left:-20px;line-height:12px;border-width:0px;font-size:10px;font-family:inherit !important;"><span style="color:rgb(199,146,234);line-height:20px;font-size:13px !important;white-space: !important;">import</span><span style="color:rgb(238,255,255);line-height:20px;font-size:13px !important;white-space: !important;"> java</span><span style="color:rgb(204,204,204);line-height:20px;font-size:13px !important;white-space: !important;">.</span><span style="color:rgb(238,255,255);line-height:20px;font-size:13px !important;white-space: !important;">net</span><span style="color:rgb(204,204,204);line-height:20px;font-size:13px !important;white-space: !important;">.</span><span style="color:rgb(126,165,247);line-height:20px;font-size:13px !important;white-space: !important;">Socket</span><span style="color:rgb(204,204,204);line-height:20px;font-size:13px !important;white-space: !important;">;</span>
java.net
Socket - ;
<span style="color:rgb(79,103,117);line-height:20px;font-size:13px !important;white-space: !important;">/**</span>
-
<span style="color:rgb(79,103,117);line-height:20px;font-size:13px !important;white-space: !important;">/**<p style="min-height:1em;"></p></span>
<span style="color:rgb(79,103,117);line-height:20px;font-size:13px !important;white-space: !important;"> * Created by 10412 on 2017/5/2.</span>
-
<span style="color:rgb(79,103,117);line-height:20px;font-size:13px !important;white-space: !important;"> * Erstellt von 10412 im Jahr 2017 /5/2.<p style="min-height:1em;"></p></span>
<span style="color:rgb(79,103,117);line-height:20px;font-size:13px !important;white-space: !important;"> * TCP客户端:</span>
-
<span style="color:rgb(79,103,117);line-height:20px;font-size:13px ! important;white-space: !important;"> * TCP客户端:<p style="min-height:1em;"></p></span>
<span style="color:rgb(79,103,117);line-height:20px;font-size:13px !important;white-space: !important;"> ①:建立tcp的socket服务,最好明确具体的地址和端口。这个对象在创建时,就已经可以对指定ip和端口进行连接(三次握手)。</span>
<span style="color:rgb(79,103,117);line -height:20px;font-size:13px !important;white-space: !important;">就已经可以对指定ip和端口进行连接(三次握手)。</span></codestil> </li> <li><p style="min-height:1em;"><span style="color:rgb(74,74,74);display:block;line-height:22px;font-size:14px !important;"><span style="line-height:22px;display:block;"><code style="margin-left:-20px;line-height:12px;border-width:0px;font-size:10px;font-family:inherit !important;"><span style="color:rgb(79,103,117);line-height:20px;font-size:13px !important;white-space: !important;"> ②:如果连接成功,就意味着通道建立了,socket流就已经产生了。只要获取到socket流中的读取流和写入流即可,只要通过getInputStream和getOutputStream就可以获取两个流对象。</span> <span style="color:rgb(79,103,117);line-height:20px; font-size:13px !important;white-space: !important;"> ③:关闭资源。<code style="margin-left:-20px;line-height:12px;border-width:0px;font-size:10px;font-family:inherit !important;"><span style="color:rgb(79,103,117);line-height:20px;font-size:13px !important;white-space: !important;"> ③:关闭资源。</span>
*/ //单方面的输入! public class TcpClient { public static void main(String[] args) { try { Socket s = new Socket("127.0.0.1", 9999); OutputStream o = s.getOutputStream(); o.write("tcp sssss".getBytes()); s.close(); } catch (IOException e) { e.printStackTrace(); } } }
Nach dem Login kopieren
服务器端:
.import
<span style="color:rgb(199,146,234);line-height:20px;font-size:13px !important;white-space: !important;">import</span><span style="color:rgb(238,255,255);line-height:20px;font-size:13px !important;white-space: !important;"> java</span><span style="color:rgb(204,204,204);line-height:20px;font-size:13px !important;white-space: !important;">.</span><span style="color:rgb(238,255,255);line-height:20px;font-size:13px !important;white-space: !important;">io</span><span style="color:rgb(204,204,204);line-height:20px;font-size:13px !important;white-space: !important;">.</span><span style="color:rgb(126,165,247);line-height:20px;font-size:13px !important;white-space: !important;">IOException</span><span style="color:rgb(204,204,204);line-height:20px;font-size:13px !important;white-space: !important;">;</span>
java.io IOException- ;
<span style="color:rgb(199,146,234);line-height:20px;font-size:13px !important;white-space: !important;">import</span><span style="color:rgb(238,255,255);line-height:20px;font-size:13px !important;white-space: !important;"> java</span><span style="color:rgb(204,204,204);line-height:20px;font-size:13px !important;white-space: !important;">.</span><span style="color:rgb(238,255,255);line-height:20px;font-size:13px !important;white-space: !important;">io</span><span style="color:rgb(204,204,204);line-height:20px;font-size:13px !important;white-space: !important;">.</span><span style="color:rgb(126,165,247);line-height:20px;font-size:13px !important;white-space: !important;">InputStream</span><span style="color:rgb(204,204,204);line-height:20px;font-size:13px !important;white-space: !important;">;</span>
<span style="color:rgb(199,146,234);line-height:20px;font-size:13px !important;white-space: !important;">import<p style="min-height:1em;"><span style ="color:rgb(238,255,255);line-height:20px;font-size:13px !important;white-space: !important;"> java<span style="color:rgb(74,74,74);display:block;line-height:22px;font-size:14px !important;"><span style="color:rgb(204,204,204);line- height:20px;font-size:13px !important;white-space: !important;">.<span style="line-height:22px;display:block;"><span style="color:rgb(238,255,255);line-height:20px;font-size:13px !important ;white-space: !important;">io<code style="margin-left:-20px;line-height:12px;border-width:0px;font-size:10px;font-family:inherit !important;"><span style="color:rgb(199,146,234);line-height:20px;font-size:13px !important;white-space: !important;">import</span><span style="color:rgb(238,255,255);line-height:20px;font-size:13px !important;white-space: !important;"> java</span><span style="color:rgb(204,204,204);line-height:20px;font-size:13px !important;white-space: !important;">.</span><span style="color:rgb(238,255,255);line-height:20px;font-size:13px !important;white-space: !important;">net</span><span style="color:rgb(204,204,204);line-height:20px;font-size:13px !important;white-space: !important;">.</span><span style="color:rgb(126,165,247);line-height:20px;font-size:13px !important;white-space: !important;">ServerSocket</span><span style="color:rgb(204,204,204);line-height:20px;font-size:13px !important;white-space: !important;">;</span>
. InputStream;<🎜><🎜><🎜><🎜><🎜> <🎜><🎜><🎜>< span style="color:rgb(199,146,234);line-height:20px;font-size:13px !important;white-space: !important;">import<🎜><span style="color:rgb(238,255,255); line-height:20px;font-size:13px !important;white-space: !important;"> java<🎜><span style="color:rgb(204,204,204);line-height:20px;font-size:13px !important;white-space: !important;">.<🎜><span style="color:rgb(238,255,255);line-height:20px;font-size:13px !important;white-space: !important;" >net<🎜><span style="color:rgb(204,204,204);line-height:20px;font-size:13px !important;white-space: !important;">.<🎜><span style="color :rgb(126,165,247);line-height:20px;font-size:13px !important;white-space: !important;">ServerSocket<🎜><span style="color:rgb(204,204,204);line-height:20px ;font-size:13px !important;white-space: !important;">;<🎜>
<🎜><🎜><🎜><span style="color:rgb(199,146,234);line-height:20px;font-size:13px !important;white-space: !important;">import</span><span style="color:rgb(238,255,255);line-height:20px;font-size:13px !important;white-space: !important;"> java</span><span style="color:rgb(204,204,204);line-height:20px;font-size:13px !important;white-space: !important;">.</span><span style="color:rgb(238,255,255);line-height:20px;font-size:13px !important;white-space: !important;">net</span><span style="color:rgb(204,204,204);line-height:20px;font-size:13px !important;white-space: !important;">.</span><span style="color:rgb(126,165,247);line-height:20px;font-size:13px !important;white-space: !important;">Socket</span><span style="color:rgb(204,204,204);line-height:20px;font-size:13px !important;white-space: !important;">;</span>
/** * Created by 10412 on 2017/5/2. */ public class TcpServer { public static void main(String[] args) { try { ServerSocket ss = new ServerSocket(9999);//建立服务端的socket服务 Socket s = ss.accept();//获取客户端对象 String ip = s.getInetAddress().getHostAddress(); int port = s.getPort(); System.out.println(ip + " : " + port + " connected"); // 可以通过获取到的socket对象中的socket流和具体的客户端进行通讯。 InputStream ins = s.getInputStream();//读取客户端的数据,使用客户端对象的socket读取流 byte[] bytes = new byte[1024]; int len = ins.read(bytes); String text = new String(bytes, 0, len); System.out.println(text); //关闭资源 s.close(); ss.close(); } catch (IOException e) { e.printStackTrace(); } } }
Nach dem Login kopieren
Das obige ist der detaillierte Inhalt vonWebsite-Architektur und Entwicklung der Spring MVC-Codepraxis. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



Im Jahr 2023 ist die KI-Technologie zu einem heißen Thema geworden und hat enorme Auswirkungen auf verschiedene Branchen, insbesondere im Programmierbereich. Die Bedeutung der KI-Technologie wird den Menschen zunehmend bewusst, und die Spring-Community bildet da keine Ausnahme. Mit der kontinuierlichen Weiterentwicklung der GenAI-Technologie (General Artificial Intelligence) ist es entscheidend und dringend geworden, die Erstellung von Anwendungen mit KI-Funktionen zu vereinfachen. Vor diesem Hintergrund entstand „SpringAI“ mit dem Ziel, den Prozess der Entwicklung von KI-Funktionsanwendungen zu vereinfachen, ihn einfach und intuitiv zu gestalten und unnötige Komplexität zu vermeiden. Durch „SpringAI“ können Entwickler einfacher Anwendungen mit KI-Funktionen erstellen, wodurch diese einfacher zu verwenden und zu bedienen sind.

Websites zum Erlernen der C-Sprache: 2. C-Sprach-Forum 5. Tianji.com; 51 Selbststudiennetzwerk; 10. C-Programmierung. Detaillierte Einführung: 1. C-Sprach-Chinesisch-Website, die sich der Bereitstellung von C-Sprach-Lernmaterialien für Anfänger widmet. Sie ist reich an Inhalten, einschließlich grundlegender Grammatik, Zeiger, Arrays, Funktionen, Strukturen und anderen Modulen. Dies ist eine umfassende Website zum Programmieren und mehr.

Als Branchenführer bietet Spring+AI durch seine leistungsstarke, flexible API und erweiterte Funktionen führende Lösungen für verschiedene Branchen. In diesem Thema werden wir uns mit den Anwendungsbeispielen von Spring+AI in verschiedenen Bereichen befassen. Jeder Fall wird zeigen, wie Spring+AI spezifische Anforderungen erfüllt, Ziele erreicht und diese LESSONSLEARNED auf ein breiteres Anwendungsspektrum ausdehnt. Ich hoffe, dieses Thema kann Sie dazu inspirieren, die unendlichen Möglichkeiten von Spring+AI tiefer zu verstehen und zu nutzen. Das Spring-Framework hat eine mehr als 20-jährige Geschichte im Bereich der Softwareentwicklung, und seit der Veröffentlichung der Spring Boot 1.0-Version sind 10 Jahre vergangen. Nun kann niemand diesen Frühling bestreiten

SpringDataJPA basiert auf der JPA-Architektur und interagiert mit der Datenbank über Mapping, ORM und Transaktionsmanagement. Sein Repository bietet CRUD-Operationen und abgeleitete Abfragen vereinfachen den Datenbankzugriff. Darüber hinaus nutzt es Lazy Loading, um Daten nur bei Bedarf abzurufen und so die Leistung zu verbessern.

Papieradresse: https://arxiv.org/abs/2307.09283 Codeadresse: https://github.com/THU-MIG/RepViTRepViT funktioniert gut in der mobilen ViT-Architektur und zeigt erhebliche Vorteile. Als nächstes untersuchen wir die Beiträge dieser Studie. In dem Artikel wird erwähnt, dass Lightweight-ViTs bei visuellen Aufgaben im Allgemeinen eine bessere Leistung erbringen als Lightweight-CNNs, hauptsächlich aufgrund ihres Multi-Head-Selbstaufmerksamkeitsmoduls (MSHA), das es dem Modell ermöglicht, globale Darstellungen zu lernen. Allerdings wurden die architektonischen Unterschiede zwischen Lightweight-ViTs und Lightweight-CNNs noch nicht vollständig untersucht. In dieser Studie integrierten die Autoren leichte ViTs in die effektiven

Die Lernkurve der Go-Framework-Architektur hängt von der Vertrautheit mit der Go-Sprache und der Backend-Entwicklung sowie der Komplexität des gewählten Frameworks ab: einem guten Verständnis der Grundlagen der Go-Sprache. Es ist hilfreich, Erfahrung in der Backend-Entwicklung zu haben. Frameworks mit unterschiedlicher Komplexität führen zu unterschiedlichen Lernkurven.

Einführung In der sich schnell entwickelnden digitalen Welt von heute ist es von entscheidender Bedeutung, robuste, flexible und wartbare WEB-Anwendungen zu erstellen. Die PHPmvc-Architektur bietet eine ideale Lösung, um dieses Ziel zu erreichen. MVC (Model-View-Controller) ist ein weit verbreitetes Entwurfsmuster, das verschiedene Aspekte einer Anwendung in unabhängige Komponenten unterteilt. Die Grundlage der MVC-Architektur Das Kernprinzip der MVC-Architektur ist die Trennung von Belangen: Modell: Kapselt die Daten und Geschäftslogik der Anwendung. Ansicht: Verantwortlich für die Präsentation von Daten und die Abwicklung der Benutzerinteraktion. Controller: Koordiniert die Interaktion zwischen Modellen und Ansichten, verwaltet Benutzeranfragen und Geschäftslogik. PHPMVC-Architektur Die phpMVC-Architektur folgt dem traditionellen MVC-Muster, führt aber auch sprachspezifische Funktionen ein. Das Folgende ist PHPMVC

So legen Sie die Transaktionsisolationsstufe in Spring fest: 1. Verwenden Sie die Annotation @Transactional. 3. Legen Sie sie in der Spring-Konfigurationsdatei fest. 4. Legen Sie sie in der Java-Konfigurationsklasse fest. Detaillierte Einführung: 1. Verwenden Sie die Annotation @Transactional, fügen Sie die Annotation @Transactional zu der Klasse oder Methode hinzu, die eine Transaktionsverwaltung erfordert, und legen Sie die Isolationsstufe im Attribut fest. 2. In der Spring-Konfigurationsdatei usw.
