webentwicklung-frage-antwort-db.com.de

Wann verwenden Sie eine JSP und wann ein Servlet?

Ich habe eine Anwendung, die den Kunden an einen anderen Standort schickt, um die Zahlungen abzuwickeln. Die andere Site außerhalb des Kunden ruft eine Seite auf unserem Server auf, um uns über den Status der Zahlung zu informieren. Die aufgerufene Seite überprüft die von der Zahlungsanwendung angegebenen Parameter und prüft, ob die Transaktion uns bekannt ist. Anschließend wird die Datenbank aktualisiert, um den Status anzuzeigen. Dies geschieht alles ohne Interaktion mit dem Kunden.

Ich habe mich persönlich für die Implementierung dieser Funktionalität als JSP entschieden, da es einfacher ist, eine Datei einfach im Dateisystem abzulegen, als die Datei zu kompilieren und zu verpacken und dann einen Eintrag in eine Konfigurationsdatei hinzuzufügen.

In Anbetracht der Funktionalität der Seite würde ich davon ausgehen, dass ein Servlet die bevorzugte Option wäre. Die Frage (n) sind:

  • Ist meine Vermutung richtig?
  • Gibt es einen Grund, ein Servlet über eine JSP zu verwenden?
  • Was sind das für Gründe?
  • 37
    Antony

    Eine JSP wird bei der ersten Ausführung zu einem Servlet kompiliert. Das heißt, es gibt keinen wirklichen Laufzeitunterschied zwischen ihnen. 

    Die meisten haben jedoch die Tradition, Servlets für Steuerungen und JSPs für Ansichten zu verwenden. Da Controller nur Java-Klassen sind, können Sie von allen IDEs vollständige Werkzeugunterstützung (Code-Vervollständigung usw.) erhalten. Dies führt zu einer besseren Qualität und kürzeren Entwicklungszeiten im Vergleich zu JSPs. Einige fortgeschrittenere IDEs (IntelliJ IDEA) haben eine großartige JSP-Unterstützung und machen dieses Argument überflüssig.

    Wenn Sie Ihr eigenes Framework erstellen oder nur mit einfachen JSPs erstellen, können Sie die JSPs weiterhin verwenden. Es gibt keinen Leistungsunterschied und wenn Sie der Meinung sind, dass JSPs leichter zu schreiben sind, fahren Sie auf jeden Fall fort.

    31
    s3v1

    JSPs: Um dem Benutzer Daten anzuzeigen. Es sollte keine Geschäftslogik vorhanden sein und sicherlich kein Datenbankzugriff.

    Servlets: Um Eingaben aus einem Formular oder einer bestimmten URL zu behandeln. Normalerweise benutzen die Leute eine Bibliothek wie Struts/Spring auf Servlets, um die Programmierung zu klären. Unabhängig davon sollte das Servlet die eingegangenen Daten nur überprüfen und dann an eine Back-End-Business-Layer-Implementierung übergeben (für die Sie Testfälle codieren können). Die resultierenden Werte sollten dann in die Anforderung oder Sitzung eingefügt und eine JSP aufgerufen werden, um sie anzuzeigen.

    Modell: Ein Datenmodell, das Ihre strukturierten Daten enthält, die von der Website verarbeitet werden. Das Servlet kann die Argumente übernehmen, sie in das Modell einfügen und dann die Business-Schicht aufrufen. Das Modell kann dann mit Back-End-DAOs (oder Ruhezustand) verbunden werden, um auf die Datenbank zuzugreifen.

    Jedes nicht triviale Projekt sollte eine MVC-Struktur implementieren. Es ist natürlich ein Overkill für triviale Funktionalität. In Ihrem Fall würde ich ein Servlet implementieren, das ein DAO aufgerufen hat, um den Status usw. oder was auch immer erforderlich ist, zu aktualisieren.

    26
    JeeBee

    JSPs sollten in der Präsentationsschicht, Servlets für Geschäftslogik und Back-End-Code (normalerweise Datenbankschicht) verwendet werden.

    Ich weiß nicht, warum Sie eine JSP nicht verwenden können, wie Sie sie beschreiben (sie wird sowieso vom Serviercontainer zu einem Servlet kompiliert), aber Sie haben recht, die bevorzugte Methode ist es, sie zu einem Servlet zu machen .

    8
    Bill the Lizard

    JSPs sind eine Verknüpfung zum Schreiben eines Servlets. Sie werden vor der Kompilierung in Servlet-Java-Code übersetzt. (Sie können es unter einem Tomcat-Unterverzeichnis überprüfen, an den ich mich nicht mehr erinnern kann).

    Um zwischen Servlet und JSP zu wählen, verwende ich eine einfache Regel: Wenn die Seite mehr HTML-Code als Java-Code enthält, gehen Sie für JSP, sonst schreiben Sie ein Servlet. Im Allgemeinen wird dies grob übersetzt: Verwenden Sie JSPs für die Inhaltsdarstellung und Servlets für die Steuerung, Validierung usw.

    Außerdem ist es einfacher, Ihren Code in einem Servlet zu organisieren und zu strukturieren, da er die einfache Java-Klassensyntax verwendet. JSPs tendieren dazu, eher monolithisch zu sein, obwohl es möglich ist, darin Methoden zu erstellen.

    4
    user16120

    Es gibt zwei ziemlich einfache Regeln:

    1. Wann immer Sie Java-Code (Geschäftslogik) schreiben möchten, führen Sie ihn in einer Java-Klasse (Servlet) aus.
    2. Wenn Sie HTML-/CSS-/JS-Code (Ansichts-/Vorlagenlogik) schreiben möchten, tun Sie dies in einer JSP.

    Verwandte Frage:

    4
    BalusC

    Ich weiß, dass dies heute nicht die populärste Antwort ist, aber: Wenn ich eine App völlig neu entwerfe, verwende ich immer JSPs. Wenn die Logik nicht trivial ist, erstelle ich gewöhnliche Java-Klassen, um die grunzige Arbeit auszuführen, die ich von der JSP aus anrufe. Ich habe nie das Argument verstanden, dass Sie Servlets verwenden sollten, da sie als reine Java-Klassen wartungsfähiger sind. Eine JSP kann problemlos eine reine Java-Klasse aufrufen, und natürlich ist eine gewöhnliche Java-Klasse genauso wartbar wie jedes Servlet. Es ist einfacher, eine Seite in einer JSP zu formatieren, da Sie das gesamte Markup inline setzen können, anstatt ein paar Ausdrucke schreiben zu müssen. Der größte Vorteil von JSPs ist jedoch, dass Sie sie einfach in einem Verzeichnis ablegen können und auf sie direkt zugreifen können: Sie müssen sich nicht mit dem Einrichten von Beziehungen zwischen der URL und der Klassendatei beschäftigen. Die Sicherheit lässt sich leicht handhaben, indem jede JSP mit einer Sicherheitsüberprüfung beginnt, bei der es sich um eine einzige Aufrufanweisung handeln kann. Daher muss die Sicherheit nicht in eine Dispatch-Schicht eingefügt werden.

    Der einzige Grund für die Verwendung eines Servlets ist, wenn Sie eine komplexe Zuordnung zwischen URLs und der resultierenden Ausführungsklasse benötigen. Beispielsweise, wenn Sie die URL überprüfen und dann je nach Sitzungsstatus eine oder mehrere Klassen aufrufen möchten. Ich persönlich wollte das nie, und Apps, die ich gesehen habe, sind oft schwer zu warten, denn bevor Sie überhaupt eine Änderung vornehmen können, müssen Sie herausfinden, welcher Code wirklich ausgeführt wird.

    3
    Jay

    JSPs sind im Wesentlichen ein Markup, das vom Servlet-Container automatisch zu einem Servlet kompiliert wird. In beiden Fällen wird der Kompilierungsschritt ausgeführt. Aus diesem Grund muss ein Servlet-Container, der JSP unterstützt, über das vollständige JDK verfügen, anstatt nur die JRE zu benötigen.

    Daher besteht der Hauptgrund für JSP darin, den zum Rendern einer Seite erforderlichen Code zu reduzieren. Wenn Sie keine Seite rendern müssen, ist ein Servlet besser.

    3
    Steve Moyer

    Stimmte mit allen oben genannten Punkten hinsichtlich der Unterschiede zwischen JSPs und Servlets überein, aber es gibt noch einige weitere Überlegungen. Du schreibst:

    Ich habe eine Anwendung, die die .__ sendet. Kunde zu einer anderen Site, um die Zahlungen. Die andere Seite außerhalb von Der Kunde ruft eine Seite in unserem Server, um uns wissen zu lassen, wie der Status ist ist von der Zahlung. Die aufgerufene Seite prüft die angegebenen Parameter von der Zahlungsanwendung und Schecks um zu sehen, ob die Transaktion .__ ist. uns bekannt Es aktualisiert dann die Datenbank, um den Status anzuzeigen. Diese ist alles ohne Interaktion erledigt mit dem Kunden.

    Ihre Anwendung verbraucht den Zahlungsdienst einer anderen Anwendung. Ihre Lösung ist zerbrechlich, da Ihre JSP-Seite beschädigt wird, wenn sich der Zahlungsdienst in der anderen Anwendung ändert. Wenn Sie die Zahlungsrichtlinien Ihrer Anwendung ändern möchten, muss Ihre Seite geändert werden. Die kurze Antwort lautet, dass Ihre Anwendung den Zahlungsdienst der Anwendung über einen Webservice nutzen sollte. Weder ein Servlet noch eine JSP-Seite ist geeignet, um Ihre Verbrauchslogik zu platzieren. 

    Zweitens wurden die meisten Servlets/JSP-Seiten in den letzten Jahren in einen Rahmen wie Spring oder Struts gestellt. Ich würde Spring empfehlen, da es Ihnen den gesamten Stapel von dem bietet, was Sie von den Serverseiten über die Web-Service-Gateway-Logik bis hin zu DAOs benötigen. Wenn Sie die Schrauben und Muttern von Spring verstehen wollen, würde ich Spring in Action empfehlen. Wenn Sie besser verstehen möchten, wie eine Unternehmensarchitektur in einer Sprache wie Java (oder C #) geschichtet werden kann, würde ich Fowlers Patterns of Enterprise Application Architecture empfehlen.

    1
    Alan

    Die meisten Java-Anwendungen basieren heutzutage auf dem MVC-Muster ....__ Auf der Controller-Seite (Servlet) implementieren Sie Geschäftslogik. Der Servlet-Controller leitet die Anforderung normalerweise an ein jsp weiter, das die eigentliche HTML-Antwort (die Ansicht in MVC) generiert .. Das Ziel ist es, die Bedenken voneinander zu trennen. Tausende Bücher wurden zu diesem Thema geschrieben.

    1

    In einer MVC-Architektur werden Servlets als Controller und JSPs als Ansicht verwendet. Beide sind jedoch technisch identisch. JSP wird in Servlet übersetzt, entweder in der Kompilierzeit (wie in JDeveloper) oder beim ersten Zugriff (wie in Tomcat) . Der eigentliche Unterschied liegt in der Benutzerfreundlichkeit. Ich bin mir ziemlich sicher, dass es Ihnen schwer fallen wird, die HTML-Seite mit Servlet zu rendern. Im Gegensatz zum gesunden Menschenverstand ist es jedoch ziemlich einfach, selbst eine ziemlich komplexe Logik in JSP zu codieren (möglicherweise mit Hilfe einer vorbereiteten Hilfsklasse). PHP Leute machen das die ganze Zeit. Und so fallen sie in die Falle der Erstellung von Spaghetti-Codes .. Meine Lösung für Ihr Problem: Wenn Sie in JSP Code leichter finden könnten und es nicht zu viele Codes gibt, können Sie in JSP Code schreiben. Andernfalls verwenden Sie das Servlet.

    1
    Rudi Adianto

    ich denke es liegt an dir? weil JSP ist Java in HTML Servlet ist ein Java, das HTML im Inneren ausführen kann

    hmmm ... servlet ist mehr sercure als jsp, denn wenn Sie Servlet übermitteln und an eine andere JSP weiterleiten, wird keine Dateierweiterung angezeigt, und Sie können nicht sehen, um welche Seite es sich handelt.

    der Vorteil von JSP ist jedoch, dass Sie dort leicht codieren können.

    0
    wrecklez

    Im Java-Servlet sind die HTML-Tags in Java-Codierung eingebettet. In JSP werden die Java-Codierungen in HTML-Tags eingebettet.

    Bei großen Anwendungen für große Probleme ist das Servlet komplex zu lesen, zu verstehen, zu debuggen usw., da es unleserlich ist, weitere HTML-Tags in die Java-Codierung einzufügen.

    Vielen Dank & Grüße, Sivakumar.j

    0
    SIVAKUMAR.J

    Ja, das sollte ein Servlet sein. Eine JSP ist möglicherweise einfacher zu entwickeln, ein Servlet ist jedoch einfacher zu warten. Stellen Sie sich vor, Sie müssten in 6 Monaten einen zufälligen Fehler beheben und versuchen, sich daran zu erinnern, wie es funktioniert.

    0
    sblundy