2016-04-28 3 views
1

Jedes Mal, wenn ich in JSP-Code und Inline-Java-Code haben, wie folgt:Inline Back-End-Code in HTML-Dateien

<% 
    double num = Math.random(); 
    if (num > 0.95) { 
    %> 
     <h2>You'll have a luck day!</h2><p>(<%= num %>)</p> 
    <% 
    } else { 
    %> 
     <h2>Well, life goes on ... </h2><p>(<%= num %>)</p> 
    <% 
    } 
    %> 

Es scheint, die Leute verrückt und sie passieren Kommentare wie zu fahren:

Warum benutzen Sie eine Technologie, die 20 Jahre alt ist?

Dies ist nicht überschaubar Code

Sie Servlets verwenden sollten

Sie JSTL verwenden sollten.

Selbst JSTL ist nicht mehr eine gute Praxis.

Und wenn es um andere Sprachen wie Python (Django) und C# (ASP.NET) geht, scheint es völlig in Ordnung zu sein. Die folgenden Snippets stammen bereits in wenigen Monaten aus Tutorials.

Also, was ist hier los? Nur Java hat einen Weg gefunden, Code richtig zu verwalten, und andere Sprachen sitzen mit einer 20 Jahre alten Technologie zurück? Oder Java-Entwickler reagieren zu sehr auf eine vollkommen akzeptable Art der Codierung?

{% for x in range(5) %} 
    <h1>Hello World</h1> 
{% endfor %} 

Gleiche Fall in Razor, wenn ASP.NET MVC initialisiert, wenn Sie ein neues Projekt zu starten, haben die cshtml Seiten Inline C# Codes. Zum Beispiel wie folgt:

@{ var theMonth = DateTime.Now.Month; } 
<p>The numeric value of the current month: @theMonth</p> 

Hinweis: Bitte beachten Sie, dass ich nicht zu fragen, wie Java-Code in JSP zu vermeiden, zu schreiben. Ich frage, warum ist Back-End-Codierung "Kein Problem" in anderen Sprachen weniger Java.

+1

Gut, ich habe wieder geöffnet. [This] (http://stackoverflow.com/questions/3177733/how-to-avoid-java-code-in-jsp-files) erklärt, warum Scriptlets in Java entmutigt werden. –

+0

@StiriosDelimanolis Danke. Ich habe diesen Beitrag gesehen, bevor ich diese Frage gestellt habe. Ich verstehe, warum Scriplets entmutigt werden. Dennoch verstehe ich nicht, warum dieses Konzept des Zurückschreibens von Endcode in HTML-Dateien in anderen Sprachen vollkommen akzeptabel ist und immer noch überschaubar ist. – ksv99

+0

Sie können Logik in Ihren django/flask-Vorlagen ausführen ... Ich verstehe nicht, was Sie fragen –

Antwort

0

Das Problem ist nicht nur Skriptlets.

Das Problem ist die Trennung von Präsentation und Geschäftslogik.

Sicher, die Präsentation (Ihre Vorlage) benötigt Logik, wie bedingte Abschnitte und Schleifen für sich wiederholende Werte, aber das Sammeln/Vorbereiten der Daten (Geschäftslogik) gehört in einen Action-Handler geschrieben in reinem Java/C#/Python, nicht eingebettet (versteckt) in der Präsentationsvorlage. Für Java und JSPs unterstützt die JSP-Vorlage Scriptlets, unterstützt jedoch auch Tag-Bibliotheken, die die Verwendung von Scriptlets grundsätzlich verwerfen, so dass Scriptlets häufig gesperrt werden (Codierungsrichtlinie).

Für andere Vorlagensprachen, die nicht zwei Möglichkeiten haben, bedingte und Schleifenlogik auszuführen, verwenden Sie, was verfügbar ist. Sie können nicht "verbieten" tun, wenn es die einzige Möglichkeit ist, aber Sie sollten diese Logik auf reine Präsentationslogik beschränken.

z. C#, oder besser gesagt ASP.NET, fördert das gleiche mit der code-behind model:

von ASP.NET Code-Behind-Modell markiert eine Abkehr von klassischen ASP, dass es Entwickler ermutigt Anwendungen mit Trennung von Darstellung und Inhalt im Auge zu bauen .

Also, für JSP, sollte JSTL mächtig genug sein, um alles, was Sie für Präsentation müssen zu tun. Alle anderen Logik sollte in Aktion Handler sein. Es sollte daher nie (selten) benötigt werden, um Skriptlets zu schreiben.