Wie vermeidet man Java-Code in JSP-Dateien?
Ich bin neu in Java EE und ich weiß, dass so etwas wie die folgenden drei Zeilen
<%= x+1 %>
<%= request.getParameter("name") %>
<%! counter++; %>
ist eine alte Schule Art der Kodierung und in der JSP-version 2 gibt es ein Verfahren zur Vermeidung von Java-code in JSP-Dateien. Kann jemand bitte sagen Sie mir, die alternative ist JSP 2 Linien, und das, was diese Technik heißt?
InformationsquelleAutor der Frage former | 2010-07-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den Einsatz von scriptlets (diese
<% %>
Dinge) in JSP ist in der Tat dringend abgeraten, da die Geburt taglibs (wie JSTL) und EL (Die Expression Languagediese${}
Dinge) Weg zurück im Jahr 2001.Die wichtigsten Nachteile scriptlets sind:
SonneOracle selbst empfiehlt auch in der JSP-coding-Konventionen zu verwenden scriptletswenn die gleiche Funktionalität ist möglich durch (tag -) Klassen. Hier sind einige zitiert von Relevanz:Wie ersetzen scriptlets hängt ganz von der einzige Zweck des code/Logik. Mehr als oft dieser code ist in einer fullworthy Java-Klasse:
Wenn Sie möchten, rufen Sie das gleichen Java-code auf jeder Wunsch, weniger oder mehr, unabhängig von der angeforderten Seite, z.B. überprüfen, ob ein Benutzer angemeldet ist, dann implementieren Sie eine filter und schreiben Sie den code entsprechend in
doFilter()
Methode. E. g.:Beim Mappen auf eine entsprechende
<url-pattern>
deckt die JSP-Seiten von Interesse sind, dann brauchen Sie nicht zu copypaste das gleiche Stück code über alle JSP-Seiten.Wenn Sie aufrufen möchten, einige Java-code Vorverarbeiten eine Anfrage, z.B. vorspannen einer Liste aus einer Datenbank anzeigen in einer Tabelle, wenn nötig, basierend auf einem query-Parameter, dann implementieren Sie eine servlet und schreiben Sie den code entsprechend in
doGet()
Methode. E. g.:Diese Art und Weise den Umgang mit Ausnahmen einfacher ist. Die DB wird nicht zugegriffen, in der Mitte der JSP rendering, aber weit bevor die JSP wird angezeigt. Sie haben noch die Möglichkeit, um die Antwort zu ändern, wenn der DB-Zugriff eine exception wirft. Im obigen Beispiel werden die Standard-Fehler 500-Seite wird angezeigt, die kann man eh anpassen, indem Sie eine
<error-page>
imweb.xml
.Wenn Sie aufrufen möchten, einige Java-code nachbearbeiten eine Anfrage, z.B. Bearbeitung ein Formular Einreichen, dann implementieren Sie eine servlet und schreiben Sie den code entsprechend in
doPost()
Methode. E. g.:Diese Art und Weise den Umgang mit anderen Ergebnis-Seite Zielen ist einfacher: redisplaying das Formular mit Validierung Fehler im Falle eines Fehlers (in diesem speziellen Beispiel können Sie erneut anzeigen, es mit
${message}
im EL), oder einfach nur auf die gewünschte Zielseite bei Erfolg.Wenn Sie aufrufen möchten, einige Java-code Kontrolle der Ausführungsplan und/oder das Ziel der Anfrage und der Antwort, dann implementieren Sie eine servlet nach der MVC Front Controller Pattern. E. g.:
Oder einfach nur verabschieden, ein MVC-framework wie JSFSpring MVCWicketetc, so dass Sie am Ende nur mit JSP/Facelets Seite und eine Javabean-Klasse, ohne die Notwendigkeit für ein custom servlet.
Wenn Sie aufrufen möchten, einige Java-code Steuern den Fluss innerhalb einer JSP-Seite, dann müssen Sie schnappen Sie sich einen (vorhandenen) flow control taglib wie JSTL core. E. g. Anzeige
List<Product>
in einer Tabelle:Mit XML-tags, die passt gut unter allen, die HTML, der code ist besser lesbar (und daher besser wartbar) als ein Haufen von scriptlets mit verschiedenen öffnung und schließende Klammern ("Wo zum Teufel dieses schließende geschweifte Klammer gehören?"). Eine einfache Hilfe ist das konfigurieren Ihrer web-Anwendung eine exception werfen, wenn scriptlets sind noch benutzt worden, indem Sie die folgende Stück zu
web.xml
:In Faceletsder Nachfolger von JSP ist Bestandteil der Java EE zur Verfügung gestellt MVC-framework JSFes ist schon nicht möglich scriptlets. Auf diese Weise sind Sie automatisch gezwungen, Dinge zu tun, "den richtigen Weg".
Wenn Sie aufrufen möchten, einige Java-code Zugriff und Anzeige "backend" Daten innerhalb einer JSP-Seite, dann müssen Sie die Verwendung von EL (Expression Language), die
${}
Dinge. E. g. redisplaying übermittelten Eingabewerte:Den
${param.foo}
zeigt das Ergebnis desrequest.getParameter("foo")
.Wenn Sie aufrufen möchten einige utility Java-code direkt in die JSP-Seite (in der Regel
public static
Methoden), dann müssen Sie Sie definieren als EL-Funktionen. Es gibt eine standard - Funktionen taglib in der JSTL, aber Sie können auch einfach erstellen Funktionen selbst. Hier ist ein Beispiel, wie JSTLfn:escapeXml
ist nützlich, um zu verhindern, dass XSS Angriffe.Beachten Sie, dass der XSS-Empfindlichkeit ist in keiner Weise speziell im Zusammenhang mit Java/JSP/JSTL/EL/was auch immer, dieses problem muss berücksichtigt werden jeder webapplication, die Sie entwickeln. Das problem der scriptlets ist, dass es keine Möglichkeit bietet der builtin-Verhinderungen, zumindest nicht mit den standard-Java-API. JSP ' s Nachfolger Facelets bereits implizite HTML-escaping, so dass Sie nicht brauchen, um über XSS-Löcher in Facelets.
Siehe auch:
InformationsquelleAutor der Antwort BalusC
Als Schutz: Deaktivieren von Scriptlets Für Gute
Als eine andere Frage ist zu diskutieren, Sie können und sollten immer deaktivieren von scriptlets in Ihrem
web.xml
web application descriptor.Ich würde immer das tun, um zu verhindern, dass irgendwelche Entwickler das hinzufügen von scriptlets, vor allem in größeren Unternehmen, wo Sie überblick verlieren, früher oder später. Die
web.xml
Einstellungen wie folgt Aussehen:InformationsquelleAutor der Antwort Stefan Schubert-Peters
JSTL bietet tags für Bedingungen, Schleifen, sets, gets, etc. Zum Beispiel:
JSTL arbeitet mit Anfrage-Attribute - Sie sind die meisten Häufig in der Anfrage von einem Servlet, welches leitet die JSP.
InformationsquelleAutor der Antwort Bozho
Ich bin mir nicht sicher, ob ich dies zu korrigieren.
Sollten Sie Lesen etwas über MVC. Spring MVC & Struts 2 sind die zwei häufigsten Lösungen.
InformationsquelleAutor der Antwort tzim
Können Sie die Verwendung von JSTL-tags zusammen mit EL-Ausdrücke zu vermeiden, die Vermischung von Java-und HTML-code:
InformationsquelleAutor der Antwort Behrang
Gibt es auch component-based frameworks wie Wicket generieren, dass eine Menge HTML-Code für Sie. Die tags, die am Ende in der HTML sind sehr einfach und es gibt praktisch keine Logik vermischt wird. Das Ergebnis ist fast leer-wie HTML-Seiten mit typischen HTML-Elemente. Der Nachteil ist, dass es eine Menge von Komponenten, die in der Wicket - API zu lernen, und einige Dinge, die schwierig sein kann, zu erreichen unter diese Einschränkungen.
InformationsquelleAutor der Antwort tsand
In der MVC-Architektur-Muster, JSPs stellen die View-Schicht. Die Einbettung von java-code in JSPs ist als eine schlechte Praxis ist.
Sie können JSTL, freeMarker, Geschwindigkeit mit JSP als "template-engine".
Die Daten-provider, um diese tags hängt von Rahmenbedingungen, dass Sie zu tun haben.
Struts 2
undwebwork
als eine Implementierung für MVC-Muster verwendet OGNL "sehr interessante Technik zu setzen Bohnen-Eigenschaften JSP ".InformationsquelleAutor der Antwort Sami Jmii
Erfahrung hat gezeigt, dass die JSP ' s haben einige Mängel, einer davon ist schwer zu vermeiden, mischen markup mit code.
Wenn Sie können, dann sollten Sie verwenden eine spezielle Technologie für das, was Sie tun müssen. In Java EE 6, JSF 2.0, welches eine Menge netter features, einschließlich der klebenden Java beans zusammen mit JSF-Seiten durch die
#{bean.method(argument)}
Ansatz.InformationsquelleAutor der Antwort Thorbjørn Ravn Andersen
Wicket ist auch eine alternative, die völlig trennt java, das html, so dass ein designer und Programmierer zusammen arbeiten können und auf verschiedene Gruppen von code mit wenig Verständnis für einander.
Blick auf Wicket.
InformationsquelleAutor der Antwort msj121
wenn Sie wollen einfach nur, um die Nachteile der Java-Programmierung in JSP können Sie tun, auch mit scriplets. Folgen Sie einfach einige Disziplin, um die minimalen Java in JSP und fast keine Berechnungen und Logik in der JSP-Seite.
InformationsquelleAutor der Antwort dipu
Lernen, anpassen und schreiben Sie Ihre eigenen tags mit JSTL
Beachten, dass EL ist Böse (runtime-Ausnahmen, refactoring)
Wicket kann böse sein (Leistung, mühselig für kleine apps oder simple-view-tier)
Beispiel aus java2s,
Dies muss Hinzugefügt werden, um die web-Anwendung web.xml
Datei erstellen:java2s.tld in der /WEB-INF/
kompilieren Sie den folgenden code in WEB-INF\classes\com\java2s
Server starten und laden Sie die bodyContent.jsp im browser
InformationsquelleAutor der Antwort tomasb
Hoben Sie eine gute Frage und zwar du hast gute Antworten, ich würde vorschlagen, dass Sie loszuwerden, JSP. Es ist veraltete Technik, die schließlich sterben. Mit einem modernen Ansatz, wie template-engines. Sie haben sehr klare Trennung von business-und Präsentation-Layer, und sicherlich kein Java-code in Vorlagen, so generieren Sie Vorlagen direkt aus dem web-Präsentation-editing-software, in den meisten Fällen die Nutzung WYSIWYG.
Und sicherlich bleiben Sie Weg von Filter und pre-und post-processing, sonst können Sie Angebot mit support/Fehlerbeseitigung Schwierigkeiten, da Sie immer nicht wissen, wo die variable erhält den Wert.
InformationsquelleAutor der Antwort Dmitriy R
um zu vermeiden, dass java-code in JSP-Dateien, die java bietet nun tag libraries wie JSTL auch java mit JSF in die u schreiben kann, alle Programmierungs-Strukturen in form von tags
InformationsquelleAutor der Antwort mahesh
Egal wie viel Sie versuchen zu vermeiden, wenn Sie arbeiten mit anderen Entwicklern, einige von Ihnen werden immer noch lieber scriptlet und legen Sie dann die bösen code in das Projekt. Deshalb soll mit der Einrichtung des Projekts an der ersten Zeichen ist sehr wichtig, wenn Sie wirklich wollen, zu verringern, die scriptlet-code. Es gibt verschiedene Techniken, um über diese (auch mehrere frameworks, die anderen genannten). Allerdings, wenn Sie lieber den reinen JSP-Weg, dann verwenden Sie das JSTL-tag-Datei. Die nette Sache über dieses ist, können Sie auch einrichten von master-Seiten für Ihr Projekt, so dass die anderen Seiten können Erben die master-Seiten
Erstellen Sie eine master-Seite mit dem Namen base.tag unter WEB-INF/tags mit folgendem Inhalt
Auf dieser mater-Seite, habe ich ein fragment namens "Titel", so dass in der untergeordneten Seite, die ich einfügen könnte mehr codes in diesem Ort, von der master-Seite. Auch ist die tag -
<jsp:doBody/>
wird ersetzt durch den Inhalt der untergeordneten SeiteErstellen, untergeordnete Seite (Kind.jsp) in Ihrem WebContent-Ordner:
<t:base>
wird verwendet, um die master-Seite, die Sie verwenden möchten (das ist die Basis.tag, in diesem moment). Alle Inhalte in der tag -<jsp:body>
hier ersetzen die<jsp:doBody/>
auf Ihrem master-Seite. Ihr Kind Seite kann auch keine tag-lib, und Sie können verwenden Sie es normalerweise, wie bei den anderen genannten. Allerdings, wenn Sie eine scriptlet-code hier (<%= request.getParameter("name") %>
...) und versuchen auf dieser Seite erhalten Sie eineJasperException because Scripting elements ( <%!, <jsp:declaration, <%=, <jsp:expression, <%, <jsp:scriptlet ) are disallowed here
. Daher gibt es keine Möglichkeit, andere Menschen können die bösen code in der jsp-DateiAufruf dieser Seite aus dem controller:
Können Sie leicht rufen Sie das Kind.jsp-Datei von Ihrem controller. Dies funktioniert auch schön mit dem struts framework
InformationsquelleAutor der Antwort Thai Tran
Verwenden
JSTL Tag libraries
in der JSP, das funktioniert perfekt.InformationsquelleAutor der Antwort Chandra Sekhar
Nutzen Sie einfach das JSTL-tag-und EL-Ausdruck.
InformationsquelleAutor der Antwort tanglei
Wenn jemand wirklich gegen die Programmierung in mehreren Sprachen als eineschlage ich vor, GWT, theoretisch können Sie vermeiden, alle JS-und HTML-Elemente, weil Google Toolkit wandelt alle client-und shared code, JS, werden Sie nicht haben problem mit Ihnen, so haben Sie einen webservice ohne Codierung in andere Sprachen. Auch können Sie einige Standard-CSS von irgendwo, wie es gegeben ist durch Erweiterungen (smartGWT oder Vaadin). Sie brauchen nicht zu lernen, Dutzende von Anmerkungen.
Natürlich, wenn Sie wollen, können Sie hacken sich in die tiefen des Codes und injizieren JS und bereichern Sie Ihre HTML-Seite ist, aber wirklich Sie es vermeiden können, wenn Sie wollen, und das Ergebnis wird gut sein, wie es geschrieben wurde, in jedem anderen frameworks. Ich sagen lohnt zu versuchen, und die grundlegenden GWT ist gut dokumentiert.
Und natürlich viele Kolleginnen und Programmierer hiermit beschrieben oder empfohlen werden, mehrere andere Lösungen. GWT ist für Leute, die wirklich nicht wollen, um sich mit der web-Teil oder zu minimalisieren.
InformationsquelleAutor der Antwort CsBalazsHungary
Eine nette Idee aus der Python-Welt sind Attribut Template-Sprachen; TAL wurde von Zope (daher ein.k.ein. "Zope Page Templates", ZPT) und ist ein standard mit Implementierungen in PHP, XSLT und Java sowie (ich habe die Python/Zope und PHP-Inkarnationen). In dieser Klasse von Template-Sprachen obigen Beispiel könnte wie folgt Aussehen:
Der code sieht aus wie gewöhnliche HTML (oder XHTML) plus einige spezielle Attribute in einem XML-Namensraum; es können eingesehen werden mit einem browser und sicher optimiert werden, das von einem designer.
Es gibt Unterstützung für Makros und für i18n:
Wenn übersetzungen der Inhalte verfügbar sind, werden Sie verwendet.
Ich weiß nicht sehr viel über die Die Java-Implementierungobwohl.
InformationsquelleAutor der Antwort Tobias
Verwendung von scriptlets in JSPs ist nicht eine gute Praxis.
Statt, die Sie verwenden können:
Bitte an:
InformationsquelleAutor der Antwort kapil das
Technisch, JSP sind alle konvertiert Servlets zur Laufzeit. JSP wurde ursprünglich für den Zweck der Entkopplung der business-Logik und design-Logik, nach der MVC-Muster. So JSP sind technisch alle java-codes zur Laufzeit. Aber um die Frage zu beantworten, Tag-Bibliotheken sind in der Regel für die Anwendung der Logik zu entfernen (Java-codes), um JSP-Seiten.
InformationsquelleAutor der Antwort mel3kings
Sicher, ersetzen
<%! counter++; %>
durch ein event producer-consumer-Architektur, wo die business-Schicht informiert wird über die Notwendigkeit zu, erhöht sich der Zähler, reagiert es entsprechend, und benachrichtigt die Moderatoren, so dass Sie aktualisieren Sie die Aussicht. Eine Reihe von Datenbank-Transaktionen beteiligt sind, seit wir in der Zukunft benötigen, zu wissen, der neue und der alte Wert des Zählers, der erhöht hat und mit welchem Zweck im Auge. Offensichtlich Serialisierung beteiligt ist, da die Schichten sind vollständig entkoppelt. Sie werden in der Lage sein zu Inkrementieren Ihre Zähler über RMI, IIOP, SOAP. Aber nur HTML ist erforderlich, die Sie nicht implementieren, da es solch einen banalen Fall. Ihr neues Ziel ist das erreichen von 250 Schritten von einer Sekunde auf Ihre neue glänzende E7, 64 GB RAM server.Habe ich mehr als 20 Jahre in der Programmierung, dass die meisten Projekte scheitern, bevor das Sextett: Wiederverwendbarkeit Austauschbarkeit OO-Fähigkeit Debuggability Testbarkeit Wartbarkeit ist sogar notwendig. Andere Projekte, die von Menschen geführt, die nur gepflegt über die Funktionalität, die sehr erfolgreich waren. Auch, steifen Objekt-Struktur, umgesetzt zu früh in das Projekt, macht der code nicht angepasst werden, um die drastischen Veränderungen in den Spezifikationen (aka agile).
Also ich halte für die Verschleppung der Aktivität der Definition von "Schichten" oder redundante Daten-Strukturen entweder in der Anfangsphase des Projekts, oder, wenn nicht ausdrücklich erforderlich.
InformationsquelleAutor der Antwort Razvan
Wenn wir die folgenden Dinge in einer java web-Anwendung, java-code, der eliminiert werden kann von der Vordergrund-von der JSP.
Verwendung der MVC-Architektur für web-Anwendung
Verwenden JSP-Tags
ein. Standard-Tags
b. Benutzerdefinierte Tags
Ausdruck, Sprache
InformationsquelleAutor der Antwort Ajay Takur
So vermeiden Sie Java-code in JSP-Dateien?
Können Sie mit der tab-library-tags wie JSTL zusätzlich zu Expression Language (EL). Aber EL auch nicht mit JSP. So ist es wahrscheinlich besser, um die drop-JSP vollständig und verwenden Sie Facelets.
Facelets ist der erste nicht-JSP-Seite Erklärung Sprache konzipiert für JSF (Java Server Faces) die einen einfacher und mehr leistungsstarke Programmiermodell für JSF-Entwickler, da im Vergleich zu JSP. Es behebt verschiedene Probleme Auftritt in JSP für die Entwicklung von web-Anwendungen.
InformationsquelleAutor der Antwort Yster
Verwendung von Scriptlets ist eine sehr alte Form und wird Nicht empfohlen. Wenn Sie direkt die gewünschte Ausgabe etwas in Ihrem JSP-Seiten verwenden Sie einfach Expression Language(EL) zusammen mit JSTL .
Gibt es auch andere Optionen wie die Verwendung einer Template-engine wie Velocity, Freemarker, Thymeleaf etc. Aber mit plain JSP mit EL und JSTL dient meinem Zweck, die meisten der Zeit, und es scheint auch das einfachste für einen Anfänger.
Auch, beachten Sie, dass es nicht eine beste Praxis zu tun, business-Logik in der view-Schicht, sollten Sie mit Ihrem business-Logiken in die Service-Schicht,
und pass die Ausgabe von Ergebnis an ' Ihre Ansichten über einen Controller.
InformationsquelleAutor der Antwort adn.911
JSP 2.0 hat eine Funktion namens " "Tag-Files"Sie können schreiben, tags ohne externe
java
code undtld
. Sie müssen zum erstellen einer.tag
- Datei und legen Sie es inWEB-INF\tags
Sie können sogar erstellen Sie die Verzeichnisstruktur in einem Paket-tags.Beispiel:
Verwenden Sie es wie
Ebenfalls können Sie Lesen, die tag Körper easly
Verwenden
Die Beispiele sind sehr einfach, aber Sie können tun, viele komplizierte Aufgaben hier. Bitte beachten Sie verwenden können, anderen tags (z.B.:
JSTL
die controlling-tags wieif/forEcah/chosen
text-manipulation wieformat/contains/uppercase
oder auch SQL-tagsselect/update
), übergeben Sie alle Arten von Parametern, zum BeispielHashmap
Zugangsession
request
... in Ihre tag-Datei zu.Tag-Datei sind so einfach entwickelt, wie Sie nicht brauchen, um starten Sie den server neu, wenn Sie Sie ändern, wie die jsp-Dateien. Dies machen Sie einfach für die Entwicklung.
Selbst wenn Sie ein framework wie struts 2, die haben viele gute tags, können Sie feststellen, dass Sie Ihre eigenen tags kann reduzieren Sie Ihr code viel. Sie können Ihren pass-tag-Parameter zu Streben und auf diese Weise passen Sie Ihre framework-tag.
Können Sie tag-nicht nur, um java, aber auch minimieren, Ihre HTML-codes. Ich selbst versuchen, zu überprüfen, HTML-codes und-tags erstellen eine Menge, so bald wie finden Sie code-Duplikate start in meine Seiten.
(Auch wenn Sie am Ende mit java in Ihr jsp-code, was ich nicht hoffe, können Sie Kapseln code in einem tag)
InformationsquelleAutor der Antwort Alireza Fattahi
So viele Antworten sagt, JSTL verwenden oder erstellen Sie Ihre eigenen benutzerdefinierten tags. Hier ist eine gute Erklärung über das erstellen von benutzerdefinierten tags
InformationsquelleAutor der Antwort Code_Mode
Nichts ist mehr mein Freund, mein Rat ist, zu entkoppeln, view(css, html, javascript, etc.) aus dem server.
In meinem Fall habe ich zu tun, meine Systeme die Handhabung der view mit Schwenk-und alle Daten, die erforderlich ist, wurde von dem server über rest-services.
Glauben Sie mir, dies wird sich ändern die Weise, die Sie entwerfen
InformationsquelleAutor der Antwort Eduardo
Verwenden, backbone , angular, wie javascript-framework für UI-design
und Holen sich die Daten unter Verwendung der rest-api. Dies entfernt die java-Abhängigkeit von UI komplett.
InformationsquelleAutor der Antwort Sumesh TG
Durch die Verwendung von JSTL-tags zusammen mit EL-Ausdruck können Sie dies vermeiden. Setzen Sie die folgenden Dinge in Ihrem jsp-Seite:
InformationsquelleAutor der Antwort bhanwar rathore