{"id":296,"date":"2018-03-12T09:59:13","date_gmt":"2018-03-12T08:59:13","guid":{"rendered":"https:\/\/www.virtualberater.com\/?p=296"},"modified":"2020-05-15T16:12:45","modified_gmt":"2020-05-15T14:12:45","slug":"die-core-bliothek","status":"publish","type":"post","link":"https:\/\/www.virtualberater.com\/index.php\/2018\/03\/12\/die-core-bliothek\/","title":{"rendered":"Die Core Bliothek"},"content":{"rendered":"\n<p>Die Tags der Core-Bibliothek bilden &#8211; wie der Name schon andeutet &#8211; die zentralen Elemente der JSTL. Diese steuern vor allem den Programmfluss durch die JSP, indem Schleifen- und Verzweigungskonstrukte zur Verf\u00fcgung gestellt werden.<br>Die folgende Tabelle listet alle Tags dieser Bibliothek auf und beschreibt grob deren Nutzung. In den nachfolgenden Abschnitten sind die Tags dann detaillierter erl\u00e4utert.<\/p>\n\n\n\n<figure class=\"wp-block-table is-style-stripes\"><table class=\"has-subtle-pale-blue-background-color has-background\"><tbody><tr><td><strong>Tag<\/strong><\/td><td><strong>Body<\/strong><\/td><td><strong>Bedeutung<\/strong><\/td><\/tr><tr><td><a href=\"#out\">out<\/a><\/td><td>JSP<\/td><td>Gibt Text aus. Durch die EL weitestgehend \u00fcberfl\u00fcssig. Allenfalls noch in Verbindung mit dem Attribut &#8222;escapeXml&#8220; sinnvoll<\/td><\/tr><tr><td><a href=\"#set\">set<\/a><\/td><td>JSP<\/td><td>Setzt eine Variable in den angegebenen G\u00fcltigkeitsbereich<\/td><\/tr><tr><td><a href=\"#remove\">remove<\/a><\/td><td>leer<\/td><td>Entfernt eine Variable aus dem angegebenen G\u00fcltigkeitsbereich<\/td><\/tr><tr><td><a href=\"#catch\">catch<\/a><\/td><td>JSP<\/td><td>Entspricht einem Catch-Block<\/td><\/tr><tr><td><a href=\"#if\">if<\/a><\/td><td>JSP<\/td><td>Einfache Bedingungsverzweigung. Ein Else-Zweig kann nicht vorkommen<\/td><\/tr><tr><td><a href=\"#choose\">choose<\/a><\/td><td>JSP<\/td><td>F\u00fcr Bedingungsverzweigungen. Kann c:when und c:otherwise-Tags enthalten. Kombiniert mit den when- und otherwise-Tags markiert der Tag Bereiche, die der Nutzung von if, else if, else entsprechen<\/td><\/tr><tr><td><a href=\"#when\">when<\/a><\/td><td>JSP<\/td><td>Markiert einen von m\u00f6glichen Bedingungszweigen innerhalb eines choose-Blockes<\/td><\/tr><tr><td><a href=\"#otherwise\">otherwise<\/a><\/td><td>JSP<\/td><td>Markiert den Default-Zweig eines choose-Blockes<\/td><\/tr><tr><td><a href=\"#forEach\">forEach<\/a><\/td><td>JSP<\/td><td>Stellt diverse Schleifen zur Verf\u00fcgung. Die genaue Verwendungsart wird durch zahlreiche Attribute bestimmt<\/td><\/tr><tr><td><a href=\"#forTokens\">forTokens<\/a><\/td><td>JSP<\/td><td>Iteriert \u00fcber Token in einem String. Die Nutzung kann durch diverse Attribute feinjustiert werden<\/td><\/tr><tr><td><a href=\"#import\">import<\/a><\/td><td>JSP<\/td><td>L\u00e4dt Ressourcen. Hat nichts mit dem &#8222;import&#8220;-Statement in Java-Anwendungen zu tun<\/td><\/tr><tr><td><a href=\"#url\">url<\/a><\/td><td>JSP<\/td><td>Erzeugt eine URL<\/td><\/tr><tr><td><a href=\"#redirect\">redirect<\/a><\/td><td>JSP<\/td><td>F\u00fchrt einen HTTP-Redirect aus<\/td><\/tr><tr><td><a href=\"#param\">param<\/a><\/td><td>JSP<\/td><td>Dient der \u00dcbergabe von Parametern an die mit dem import-Tag angesprochenen Ressourcen<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>In dieser \u00dcbersicht und den \u00dcbersichten der anderen Bibliotheken bedeutet ein Eintrag von &#8222;JSP&#8220; in der Spalte Body, dass der Tag einen Body haben kann, der beliebigen JSP-Code enthalten darf. Steht in dieser Spalte der Wert &#8222;leer&#8220;, so handelt es sich um einen Leer-Tag, der keinerlei Body (auch keine Leerzeichen oder Zeilenumbr\u00fcche) enthalten darf.<br>Wir stellen die Tags entsprechend der Einteilung in der JSTL-Spezifikation vor. Demnach kommen zun\u00e4chst allgemeine Tags, dann Verzweigungstags, Tags zur Abbildung von Schleifen und schlussendlich Tags, die URLs verarbeiten.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><a name=\"out\"><strong>&lt;c:out&gt;<\/strong><\/a><\/h2>\n\n\n\n<figure class=\"wp-block-table is-style-stripes\"><table class=\"has-subtle-pale-blue-background-color has-background\"><tbody><tr><td><strong>Attribut<\/strong><\/td><td><strong>Pflichtfeld<\/strong><\/td><td><strong>Bedeutung<\/strong><\/td><\/tr><tr><td>value<\/td><td>ja<\/td><td>Ein EL-Ausdruck, der ausgegeben werden soll<\/td><\/tr><tr><td>default<\/td><td>nein<\/td><td>Ein m\u00f6glicher Defaultwert, falls der EL-Ausdruck null ergibt<\/td><\/tr><tr><td>escapeXml<\/td><td>nein<\/td><td>Ein boolsches Flag, das angibt, ob die Standard-XML-Entity, wie bspw. &#8222;&lt;&#8220; oder &#8222;&amp;&#8220; in ihre Entity-Codes umgewandelt werden sollen<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Mit &lt;c:out&gt; kannst du einen String ausgeben. Das Pflicht-Attribut &#8222;value&#8220; bestimmt, welcher Wert in den HTML-Code eingef\u00fcgt wird. Dem Attribut &#8222;default&#8220; kannst du einen Wert mitgeben, der ausgegeben wird, falls das &#8222;value&#8220;-Attribut zu null ausgewertet wird. Wirklich interessant wird der Tag aber durch das Attribut &#8222;escapeXml&#8220;. Damit werden XML-Sonderzeichen (wie bspw. &#8222;&lt;&#8222;) in ihre Entit\u00e4ts-Werte (bei &#8222;&lt;&#8220; in &#8222;&amp;lt;&#8220;) umgewandelt. Dieses Attribut ist sehr n\u00fctzlich, wenn bspw. HTML- oder XML-Code zur Anzeige gebracht werden soll.<br>Sofern man das Attribut &#8222;escapeXml&#8220; nicht ben\u00f6tigt, kommt man mit der direkten Verwendung der Expression Language im JSP-Code genauso weit und erh\u00e4lt lesbareren Code. Es sei denn, die Anwendung l\u00e4uft noch in einem Server, der nicht JSP 2.0 (oder neuer) unterst\u00fctzt. Dann kann man EL-Ausdr\u00fccke nicht au\u00dferhalb der JSTL-Tags verwenden und muss daher zur Ausgabe von EL-Ausdr\u00fccken mit dem &lt;c:out&gt;-Tag arbeiten.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><a name=\"set\"><strong>&lt;c:set&gt;<\/strong><\/a><\/h2>\n\n\n\n<figure class=\"wp-block-table is-style-stripes\"><table class=\"has-subtle-pale-blue-background-color has-background\"><tbody><tr><td><strong>Attribut<\/strong><\/td><td><strong>Pflichtfeld<\/strong><\/td><td><strong>Bedeutung<\/strong><\/td><\/tr><tr><td>value<\/td><td>nein<\/td><td>Der EL Ausdruck, der ausgewertet und in einer Variable gesetzt werden soll<\/td><\/tr><tr><td>var<\/td><td>nein<\/td><td>Der Name, unter dem das Ergebnis der Auswertung abgelegt werden soll<\/td><\/tr><tr><td>target<\/td><td>nein<\/td><td>Der Name eines Objekts, das den Wert aufnehmen soll. Das Objekt muss \u00fcber eine geeignete setter-Methode verf\u00fcgen oder vom Typ java.util.Map sein<\/td><\/tr><tr><td>property<\/td><td>nein<\/td><td>Die Property der unter dem &#8222;target&#8220;-Attribut angegebenen Bean, die den Wert aufnehmen soll<\/td><\/tr><tr><td>scope<\/td><td>nein<\/td><td>Der G\u00fcltigkeitsbereich, unter dem der Wert abgelegt werden soll, bzw. unter dem die Map\/Bean zu finden ist<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Mit diesem Tag wird es m\u00f6glich, einen EL-Ausdruck auszuwerten und das Ergebnis dieser Auswertung einer Bean-Property zuzuweisen oder unter einem Namen in einem der G\u00fcltigkeitsbereiche abzulegen.<br>Es gibt mehrere sich gegenseitig ausschlie\u00dfende M\u00f6glichkeiten, diesen Tag zu nutzen. Zum einen kann dieser Tag genutzt werden, um in einem G\u00fcltigkeitsbereich einen benannten Wert zu setzen. Zum zweiten aber auch, um eine Property einer bereits existierenden Bean zu setzen bzw. einer java.util.Map einen Wert hinzuzuf\u00fcgen. Zudem kann sich der zu setzende Wert einerseits aus dem Body des Tags ergeben oder als Ergebnis eines EL-Ausdrucks entstehen.<br>Im Falle von JavaServer Faces-Anwendungen kann dieser Tag zudem genutzt werden, um &#8222;deferred values&#8220; zu setzen. Darauf gehen wir sp\u00e4ter in einem eigenen Kapitel ein.<br>In unserer Beispiel-Anwendung nutzen wir diesen Tag nicht, aber wir zeigen im Folgenden die zwei wichtigsten Verwendungsarten:<\/p>\n\n\n\n<p class=\"has-background has-background-color-background-color\">&lt;c:set&nbsp;var=&#8220;aSimpleString&#8220;&nbsp;value=&#8220;Just&nbsp;a&nbsp;string&#8220;&nbsp;scope=&#8220;request&#8220;&nbsp;\/&gt;<br>${aSimpleString}<br>&lt;c:set&nbsp;target=&#8220;${unit}&#8220;&nbsp;value=&#8220;Im&nbsp;Restaurant&#8220;&nbsp;property=&#8220;unitName&#8220;&nbsp;\/&gt;<br>&lt;c:set&nbsp;target=&#8220;${unit}&#8220;&nbsp;value=&#8220;4&#8243;&nbsp;property=&#8220;unitNumber&#8220;&nbsp;\/&gt;<br>${unit.unitNumber}&nbsp;&#8211;&nbsp;${unit.unitName}<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><a name=\"remove\"><strong>&lt;c:remove&gt;<\/strong><\/a><\/h2>\n\n\n\n<figure class=\"wp-block-table is-style-stripes\"><table class=\"has-subtle-pale-blue-background-color has-background\"><tbody><tr><td><strong>Attribut<\/strong><\/td><td><strong>Pflichtfeld<\/strong><\/td><td><strong>Bedeutung<\/strong><\/td><\/tr><tr><td>var<\/td><td>ja<\/td><td>Der Name der Variable, die entfernt werden soll<\/td><\/tr><tr><td>scope<\/td><td>nein<\/td><td>Der G\u00fcltigkeitsbereich, aus dem die Variable entfernt werden soll<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Dieser Tag stellt das direkte Gegenst\u00fcck zu dem &lt;c:set&gt;-Tag dar. Er entfernt die Variabel, die unter dem Namen des Attributs &#8222;var&#8220; im angegebenen G\u00fcltigkeitsbereich abgelegt ist.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><a name=\"catch\"><strong>&lt;c:catch&gt;<\/strong><\/a><\/h2>\n\n\n\n<figure class=\"wp-block-table is-style-stripes\"><table class=\"has-subtle-pale-blue-background-color has-background\"><tbody><tr><td><strong>Attribut<\/strong><\/td><td><strong>Pflichtfeld<\/strong><\/td><td><strong>Bedeutung<\/strong><\/td><\/tr><tr><td>var<\/td><td>nein<\/td><td>Der Name der Variablen, unter der eine etwaig gefangene Exception abgelegt wird<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Dieser Tag umspannt einen Bereich, in dem es evtl. zu Exceptions kommen k\u00f6nnte, die man abfangen will. M\u00f6chte man im Anschluss an den Tag Zugriff auf die Exception haben (bspw. f\u00fcr Fehlermeldungen), so kann man mit dem optionalen Attribut &#8222;var&#8220; einen Namen vergeben, unter dem die Exception f\u00fcr den sp\u00e4teren Zugriff abgelegt wird.<br>Ich pers\u00f6nlich halte diesen Tag f\u00fcr nicht so wichtig. Da JSPs lediglich f\u00fcr die View genutzt werden sollten, sollten alle Exceptions der Gesch\u00e4ftslogik oder solche, die im Zusammenhang mit den Zugriff auf potenziell fehlerhafte Ressourcen (Datentr\u00e4ger, Netzwerk, Persistenzschicht) auftreten k\u00f6nnen, bereits vor dem Aufbau der JSP abgefangen sein. In diesem Falle w\u00fcrde man daher besser direkt zu einer geeigneten Fehlerseite weiterleiten. Sollte man allerdings in der JSP selbst Anwendungslogik haben oder die XML- oder SQL-Taglibraries nutzen wollen, ist dieser Tag wiederum fast ein Muss.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><a name=\"if\"><strong>&lt;c:if&gt;<\/strong><\/a><\/h2>\n\n\n\n<figure class=\"wp-block-table is-style-stripes\"><table class=\"has-subtle-pale-blue-background-color has-background\"><tbody><tr><td><strong>Attribut<\/strong><\/td><td><strong>Pflichtfeld<\/strong><\/td><td><strong>Bedeutung<\/strong><\/td><\/tr><tr><td>scope<\/td><td>nein<\/td><td>Der G\u00fcltigkeitsbereich f\u00fcr die im Attribut &#8222;var&#8220; definierte Variable<\/td><\/tr><tr><td>test<\/td><td>ja<\/td><td>Die Bedingung, die dar\u00fcber entscheidet, ob der Body dieses Tags ausgewertet wird oder nicht<\/td><\/tr><tr><td>var<\/td><td>nein<\/td><td>Der Name der Variablen, unter der das Ergebnis der Auswertung abgelegt wird<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Dieser Tag dient nur zum Test auf das Vorliegen einer einzigen Bedingung. Einen &#8222;else&#8220;- bzw. &#8222;otherwise&#8220;-Zweig gibt es nicht. Das wichtigste Attribut ist das Pflichtattribut &#8222;test&#8220;. Hier kann jeder beliebige Ausdruck verwendet werden, der einen boolschen Wert ergibt. Weniger h\u00e4ufig wird man dagegen die beiden anderen Attribute nutzen, die dazu dienen, das Ergebnis der Abfrage unter einem Namen in einem anzugebenden G\u00fcltigkeitsbereich abzulegen. Das Attribut &#8222;var&#8220; legt den Namen fest, unter dem das Ergebnis gespeichert werden soll. Das Attribut &#8222;scope&#8220; gibt den G\u00fcltigkeitsbereich f\u00fcr diese Variable an. Das folgende Beispiel zeigt die Verwendung des Tags:<\/p>\n\n\n\n<p class=\"has-background has-background-color-background-color\">&lt;c:if&nbsp;test=&#8220;${not&nbsp;empty&nbsp;remainingVocabs}&#8220;&gt;<br>  &lt;table&nbsp;id=&#8220;remainderTable&#8220;&nbsp;cellpadding=&#8220;0&#8243;&nbsp;cellspacing=&#8220;0&#8243;&nbsp;border=&#8220;0&#8243;&gt;<br>    &lt;tr&gt;&lt;th&gt;&lt;fmt:message&nbsp;key=&#8220;showResultsPage.th.orig&#8220;&nbsp;\/&gt;&lt;\/th&gt;<br>       &lt;th&gt;&lt;fmt:message&nbsp;key=&#8220;showResultsPage.th.translation&#8220;&nbsp;\/&gt;&lt;\/th&gt;<br>    &lt;\/tr&gt;<br>&lt;c:forEach&nbsp;items=&#8220;${remainingVocabs}&#8220;&nbsp;var=&#8220;vocab&#8220;&gt;<br>  &lt;tr&nbsp;class=&#8220;unanswered&#8220;&gt;<br>    &lt;td&gt;${vocab.orig}&lt;\/td&gt;<br>   &lt;td&gt;${vocab.translation}&lt;\/td&gt;<br>&lt;\/tr&gt;<br>&lt;\/c:forEach&gt;<br>&lt;\/table&gt;<br>&lt;\/c:if&gt;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><a name=\"choose\"><strong>&lt;c:choose&gt;<\/strong><\/a><\/h2>\n\n\n\n<p>Der <em>&lt;c:choose&gt;<\/em>-Tag hat keine Attribute.<br>Dieser Tag stellt einen Rahmen f\u00fcr Verzweigungen dar. Sein einziger Zweck besteht darin, einen G\u00fcltigkeitsbereich f\u00fcr die in ihm benutzten Tags <em>&lt;c:when&gt;<\/em> und<em>&lt;c:otherwise&gt;<\/em> zu definieren. Innerhalb des<em> &lt;c:choose&gt;<\/em>-Tags kann man eine beliebige Anzahl von Bedingungen mit dem <em>&lt;c:when&gt;<\/em>-Tag definieren und einen <em>&lt;c:otherwise&gt;<\/em>-Zweig f\u00fcr den Fall, dass keine der anderen Bedingungen zutrifft.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><a name=\"when\"><strong>&lt;c:when&gt;<\/strong><\/a><\/h2>\n\n\n\n<figure class=\"wp-block-table is-style-stripes\"><table class=\"has-subtle-pale-blue-background-color has-background\"><tbody><tr><td><strong>Attribut<\/strong><\/td><td><strong>Pflichtfeld<\/strong><\/td><td><strong>Bedeutung<\/strong><\/td><\/tr><tr><td>test<\/td><td>ja<\/td><td>Die Bedingung, die dar\u00fcber entscheidet, ob der Body dieses Tags ausgewertet wird oder nicht<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Mit &lt;c:when&gt; kann man konkrete Bedingungen definieren, bei deren Eintreffen der Body dieses Tags ausgewertet wird. Dabei wird das Pflicht-Attribut &#8222;test&#8220; zu einem boolschen Ausdruck ausgewertet. Zumeist wird innerhalb des &#8222;test&#8220;-Attributs die Expression Language zur Definition der Bedingung zum Einsatz kommen. Es k\u00f6nnen beliebig viele &lt;c:when&gt;-Tagpaare innerhalb eines &lt;c:choose&gt;-Tagpaars vorkommen.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><a name=\"otherwise\"><strong>&lt;c:otherwise&gt;<\/strong><\/a><\/h2>\n\n\n\n<p>Der <em>&lt;c:otherwise&gt;<\/em>-Tag hat keine Attribute.<br>Der Body eines <em>&lt;c:otherwise&gt;<\/em>-Tags wird immer dann ausgef\u00fchrt, wenn keine der <em>&lt;c:when&gt;<\/em>-Bedingungen im zugeh\u00f6rigen <em>&lt;c:choose&gt;<\/em>-Tag zutreffen. Damit wird auch deutlich, welchen Zweck der<em> &lt;c:choose&gt;<\/em>-Rahmen erf\u00fcllt. G\u00e4be es dieses umschlie\u00dfende Tagpaar nicht, k\u00f6nnte man den Bezug f\u00fcr <em>&lt;c:otherwise&gt;<\/em> nicht begrenzen. Die Verwendung eines <em>&lt;c:otherwise&gt;<\/em>-Tags innerhalb eines <em>&lt;c:choose&gt;<\/em>-Tags ist nat\u00fcrlich optional.<br>Das folgende Beispiel zeigt die Verwendung der drei Tags<em> &lt;c:choose&gt;<\/em>, &lt;c:when&gt; und <em>&lt;c:otherwise&gt;<\/em>:<\/p>\n\n\n\n<p class=\"has-background has-background-color-background-color\">&lt;c:choose&gt;<br>&nbsp;&nbsp; &lt;c:when&nbsp;test=&#8220;${firstCondition}&#8220;&gt;<br>   &lt;%&#8211;&nbsp;evaluated&nbsp;when&nbsp;the&nbsp;first&nbsp;condition&nbsp;is&nbsp;met&nbsp;&#8211;%&gt;<br>&lt;\/c:when&gt;<br>   &lt;c:when&nbsp;test=&#8220;${secondCondition}&#8220;&gt;<br>   &lt;%&#8211;&nbsp;evaluated&nbsp;when&nbsp;the&nbsp;second&nbsp;condition&nbsp;is&nbsp;met&nbsp;&#8211;%&gt;<br>&lt;\/c:when&gt;<br>  &lt;c:otherwise&gt;<br>      &lt;%&#8211;&nbsp;evaluated&nbsp;whenever&nbsp;no&nbsp;other&nbsp;condition&nbsp;is&nbsp;met&nbsp;&#8211;%&gt;<br>&lt;\/c:otherwise&gt;<br>&lt;\/c:choose&gt;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><a name=\"forEach\"><strong>&lt;c:forEach&gt;<\/strong><\/a><\/h2>\n\n\n\n<figure class=\"wp-block-table is-style-stripes\"><table class=\"has-subtle-pale-blue-background-color has-background\"><tbody><tr><td><strong>Attribut<\/strong><\/td><td><strong>Pflichtfeld<\/strong><\/td><td><strong>Bedeutung<\/strong><\/td><\/tr><tr><td>items<\/td><td>nein<\/td><td>Die Collection, \u00fcber die iteriert werden soll<\/td><\/tr><tr><td>begin<\/td><td>nein<\/td><td>Der Iterationsanfang<\/td><\/tr><tr><td>end<\/td><td>nein<\/td><td>Das Iterationsende. Der Iterationslauf mit diesem Wert wird noch ausgef\u00fchrt<\/td><\/tr><tr><td>step<\/td><td>nein<\/td><td>Die Schrittweite der Iteration<\/td><\/tr><tr><td>var<\/td><td>nein<\/td><td>Der Name, unter dem das aktuelle Item der Collection abgelegt werden soll<\/td><\/tr><tr><td>varStatus<\/td><td>nein<\/td><td>Name der Status-Variablen der Iteration. Diese ist vom Typ javax.servlet.jsp.jstl.core.LoopTagStatus<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>&lt;c:forEach&gt; ist einer der wichtigsten Tags in der JSTL, aber auch einer der komplizierteren. Mit ihm ist es m\u00f6glich verschiedene Schleifenkonstrukte nachzubilden. Zwar ist kein Attribut ein Pflichtfeld, allerdings muss du entweder das Attribut &#8222;items&#8220; <em>oder<\/em> die Attribute &#8222;begin&#8220; und &#8222;end&#8220; gesetzt sein. Beliebige dar\u00fcber hinausgehende Kombinationen sind m\u00f6glich. Mit diesem Tag kann man Konstrukte per JSTL in JSPs nachbilden, die in Java den <em>for<\/em>&#8211; oder den <em>while<\/em>-Schleifen entsprechen. Eine Entsprechung f\u00fcr die do&#8230;while-Schleife gibt es nicht.<br>Ich gebe f\u00fcr beides Beispiele:<\/p>\n\n\n\n<p class=\"has-background has-background-color-background-color\">&lt;c:forEach&nbsp;items=&#8220;${remainingVocabs}&#8220;&nbsp;var=&#8220;vocab&#8220;&gt;<br>&lt;tr&nbsp;class=&#8220;unanswered&#8220;&gt;<br>&lt;td&gt;${vocab.orig}&lt;\/td&gt;<br>&lt;td&gt;${vocab.translation}&lt;\/td&gt;<br>&lt;\/tr&gt;<br>&lt;\/c:forEach&gt;<br><br>&lt;c:forEach&nbsp;begin=&#8220;0&#8243;&nbsp;end=&#8220;${fn:length(remainingVocabs)}&#8220;&nbsp;varStatus=&#8220;status&#8220;&gt;<br>&lt;tr&nbsp;class=&#8220;unanswered&#8220;&gt;<br>&lt;td&gt;${remainingVocabs[status.index].orig}&lt;\/td&gt;<br>&lt;td&gt;${remainingVocabs[status.index].translation}&lt;\/td&gt;<br>&lt;\/tr&gt;<br>&lt;\/c:forEach&gt;<\/p>\n\n\n\n<p>Ben\u00f6tigt du Zugriff auf Informationen \u00fcber die Iteration, kann man mit dem Attribut &#8222;varStatus&#8220; ein Objekt vom Typ <em>javax.servlet.jsp.jstl.core.LoopTagStatus<\/em> exportieren. Dieses Objekt bietet Zugriff auf Informationen \u00fcber die aktuelle Iteration, wie den derzeitigen Schleifenwert, den derzeitigen Schleifenz\u00e4hler (der durch die Attribute &#8222;start&#8220;, und &#8222;step&#8220; abweichend vom Schleifenz\u00e4hler sein kann) oder ob der letzte Durchlauf der Iteration erreicht ist, etc. In dem zweiten Beispiel oben wurde von diesem Objekt Gebrauch gemacht.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><a name=\"forTokens\"><strong>&lt;c:forTokens&gt;<\/strong><\/a><\/h2>\n\n\n\n<figure class=\"wp-block-table is-style-stripes\"><table class=\"has-subtle-pale-blue-background-color has-background\"><tbody><tr><td><strong>Attribut<\/strong><\/td><td><strong>Pflichtfeld<\/strong><\/td><td><strong>Bedeutung<\/strong><\/td><\/tr><tr><td>items<\/td><td>ja<\/td><td>Der String, mit den Tokens \u00fcber die iteriert werden soll<\/td><\/tr><tr><td>delims<\/td><td>ja<\/td><td>Die Zeichen, die zur Trennung der einzelnen Tokens genutzt werden sollen<\/td><\/tr><tr><td>begin<\/td><td>nein<\/td><td>Der Iterationsanfang<\/td><\/tr><tr><td>end<\/td><td>nein<\/td><td>Das Iterationsende. Der Iterationslauf mit diesem Wert wird noch ausgef\u00fchrt<\/td><\/tr><tr><td>step<\/td><td>nein<\/td><td>Die Schrittweite der Iteration<\/td><\/tr><tr><td>var<\/td><td>nein<\/td><td>Der Name, unter dem das aktuelle Item der Collection abgelegt werden soll<\/td><\/tr><tr><td>varStatus<\/td><td>nein<\/td><td>Name der Status-Variablen der Iteration. Diese ist vom Typ javax.servlet.jsp.jstl.core.LoopTagStatus<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Diese Schleifenvariante dient dazu, \u00fcber verschiedene Tokens eines Strings zu iterieren. W\u00e4hrend der <em>java.util.StringTokenizer <\/em>der Java-Standardbibliothek mit den Whitespace-Zeichen ein Defaultset zur Auftrennnung eines Strings bietet, muss man bei dem Tag &lt;<em>c:forTokens&gt;<\/em> explizit angeben, welche Zeichen zur Trennung der einzelnen Token genutzt werden sollen. Dazu werden einfach alle m\u00f6glichen Zeichen ohne Komma hintereinander in einen String geschrieben.<br>Die Nutzung dieses Tags entspricht ansonsten der Nutzung der while-Variante des <em>&lt;c:forEach&gt;<\/em>-Tags.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><a name=\"import\"><strong>&lt;c:import&gt;<\/strong><\/a><\/h2>\n\n\n\n<figure class=\"wp-block-table is-style-stripes\"><table class=\"has-subtle-pale-blue-background-color has-background\"><tbody><tr><td><strong>Attribut<\/strong><\/td><td><strong>Pflichtfeld<\/strong><\/td><td><strong>Bedeutung<\/strong><\/td><\/tr><tr><td>context<\/td><td>nein<\/td><td>Der Kontext, wenn auf einen anderen Webkontext desselben Hosts zugegriffen werden soll<\/td><\/tr><tr><td>charencoding<\/td><td>nein<\/td><td>Das Encoding, in dem die Ressource vorliegt<\/td><\/tr><tr><td>url<\/td><td>ja<\/td><td>Die URL der zu importierenden Ressource<\/td><\/tr><tr><td>scope<\/td><td>nein<\/td><td>Der G\u00fcltigkeitsbereich der im Attribut &#8222;var&#8220; benannten Variablen<\/td><\/tr><tr><td>var<\/td><td>nein<\/td><td>Der Name, unter dem der Inhalt der Ressource abgelegt wird<\/td><\/tr><tr><td>varReader<\/td><td>nein<\/td><td>Der Name, unter dem der Reader der Ressource zug\u00e4nglich gemacht wird<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Dieser Tag dient dazu, textuelle Ressourcen zu inkludieren oder in einer Variablen abzulegen. Dabei geht <em>&lt;c:import&gt;<\/em> \u00fcber die zuvor bereits in JSPs vorhandenen Inklude-M\u00f6glichkeiten per Standardaktion hinaus, da nun auch der Zugriff auf Ressourcen au\u00dferhalb des derzeitigen Servlet-Kontexts m\u00f6glich ist. Dabei k\u00f6nnen entweder Ressourcen von entfernten Rechnern mittels einer absoluten URL, Ressourcen benachbarter Servlet-Kontexte bei Angabe des &#8222;context&#8220;-Attributs oder relative Ressourcen innerhalb der aktuellen Anwendung geladen werden. Bei dem Zugriff auf Ressourcen aus benachbarten Servlet-Kontexten ist zu beachten, dass diesen Ressourcen nicht die gleichen Informationen \u00fcber die Anfrage zur Verf\u00fcgung stehen wie dem eigenen Kontext.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><a name=\"url\"><strong>&lt;c:url&gt;<\/strong><\/a><\/h2>\n\n\n\n<figure class=\"wp-block-table is-style-stripes\"><table class=\"has-subtle-pale-blue-background-color has-background\"><tbody><tr><td><strong>Attribut<\/strong><\/td><td><strong>Pflichtfeld<\/strong><\/td><td><strong>Bedeutung<\/strong><\/td><\/tr><tr><td>var<\/td><td>nein<\/td><td>Der Name, unter dem die umgeschriebene URL abgelegt werden soll<\/td><\/tr><tr><td>scope<\/td><td>nein<\/td><td>Der G\u00fcltigkeitsbereich f\u00fcr die abgelegte Variable<\/td><\/tr><tr><td>value<\/td><td>ja<\/td><td>Die URL, die transformiert werden soll<\/td><\/tr><tr><td>context<\/td><td>nein<\/td><td>Der ServletContext einer anderen Anwendung unter der gleichen Domain<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Dieser Tag dient dazu, URLs entsprechend der URL-Rewriting-Regeln umzuschreiben. URL-Rewriting ist eine Technik, die ein Session-Tracking auch ohne Cookies erlaubt.<br>URLs auf lokale Ressourcen m\u00fcssen immer in der Form relativer URLs verwendet werden, ansonsten werden sie wie externe Ressourcen behandelt und nicht umgeschrieben. Was eine relative URL ist, ist im Abschnitt &#8222;URLs innerhalb der core-Bibliothek&#8220; erl\u00e4utert. Wichtig ist, dass auch ein absoluter Pfad eine relative URL ist. Die Begrifflichkeit ist unn\u00f6tig verwirrend. Das dahinter steckende Konzept ist gl\u00fccklicherweise aber trivial \ud83d\ude09<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><a name=\"redirect\"><strong>&lt;c:redirect&gt;<\/strong><\/a><\/h2>\n\n\n\n<figure class=\"wp-block-table is-style-stripes\"><table class=\"has-subtle-pale-blue-background-color has-background\"><tbody><tr><td><strong>Attribut<\/strong><\/td><td><strong>Pflichtfeld<\/strong><\/td><td><strong>Bedeutung<\/strong><\/td><\/tr><tr><td>url<\/td><td>nein<\/td><td>Die URL der Ressource, zu der redirected werden soll<\/td><\/tr><tr><td>context<\/td><td>nein<\/td><td>Der ServletContext einer anderen Anwendung unter der gleichen Domain<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Der<em>&lt;c:redirect&gt;<\/em>-Tag veranlasst, dass anstelle einer weiteren Auswertung der JSP der Buffer gel\u00f6scht wird und der Request auf eine andere Ressource umgeleitet wird. Die Regeln f\u00fcr m\u00f6gliche Werte des &#8222;url&#8220;-Attributs sind weiter unten im Abschnitt &#8222;URLs innerhalb der core-Bibliothek&#8220; beschrieben.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><a name=\"import\"><strong>&lt;c:param&gt;<\/strong><\/a><\/h2>\n\n\n\n<figure class=\"wp-block-table is-style-stripes\"><table class=\"has-subtle-pale-blue-background-color has-background\"><tbody><tr><td><strong>Attribut<\/strong><\/td><td><strong>Pflichtfeld<\/strong><\/td><td><strong>Bedeutung<\/strong><\/td><\/tr><tr><td>name<\/td><td>ja<\/td><td>Der Name des Parameters, der an die aufzurufende Ressource \u00fcbergeben wird<\/td><\/tr><tr><td>value<\/td><td>nein<\/td><td>Der Wert des Parameters f\u00fcr den gegebenen Namen<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Dieser Tag kann nur innerhalb der drei Tags &lt;c:import&gt;, &lt;c:redirect&gt; und &lt;c:url&gt; genutzt werden und dient dazu, der entfernten Ressource Anfrage-Parameter mitzugeben.<\/p>\n\n\n\n<p class=\"has-background has-background-color-background-color\">&lt;c:url&nbsp;var=&#8220;selectUnitUrl&#8220;&nbsp;value=&#8220;\/frontController\/SelectUnit&#8220;&gt;<br>   &lt;c:param&nbsp;name=&#8220;unit&#8220;&nbsp;value=&#8220;${unit.unitNumber}&#8220;&nbsp;\/&gt;<br>   &lt;c:param&nbsp;name=&#8220;firstExample_token&#8220;&nbsp;value=&#8220;${firstExample_token}&#8220;&nbsp;\/&gt;<br>&lt;\/c:url&gt;<br>&lt;a&nbsp;href=&#8220;${selectUnitUrl}&#8220;&nbsp;title=&#8220;${unit.unitName}&#8220;&gt;&lt;fmt:message&nbsp;key=&#8220;${unit.unitName}&#8220;&nbsp;\/&gt;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>URLs innerhalb der core-Bibliothek<\/strong><\/h2>\n\n\n\n<p>URLs k\u00f6nnen sowohl relativ als auch absolut sein. Dabei bedeuten absolute URLs immer vollst\u00e4ndige URLs inklusive Protokoll- und Server-Angabe.<br>Bei den relativen URLs gibt es wiederum zwei Typen: Die kontext-relativen URLs und die pfad-relativen URLs. Eine kontext-relative URL f\u00e4ngt immer mit einem f\u00fchrenden Slash &#8222;\/&#8220; an. Der f\u00fchrende Slash bezeichnet dabei die Wurzel des aktuellen Servletkontextes. Wollen wir z.B. einen Link auf&nbsp;einer Seite dieser Anwendung einbauen, so w\u00fcrden wir die URL mit dem Tag &lt;c:url&gt; wie folgt generieren:<\/p>\n\n\n\n<p class=\"has-background has-background-color-background-color\">&lt;c:url&nbsp;value=&#8220;\/code_first_simple_hello_world.jsp&#8220;&nbsp;var=&#8220;exampleLink&#8220;&nbsp;\/&gt;<br>&lt;a&nbsp;href=&#8220;${exampleLink}&#8220;&gt;Ein&nbsp;erstes&nbsp;JSP-Beispiel&lt;\/a&gt;<\/p>\n\n\n\n<p>Beide Angaben unterscheiden sich darin, dass in HTML der Servletkontext (&#8222;\/examples&#8220;) durch die Nutzung des &lt;c:url&gt;-Tags automatisch erg\u00e4nzt wurde. In HTML zeigen alle absoluten Pfadangaben (nicht zu verwechseln mit absoluten URLs wie weiter oben beschrieben) auf die (logische) Wurzel innerhalb der Domain. In den Tags der JSTL hingegen beziehen sich absolute Pfadangaben immer auf den aktuellen Servletkontext, logisch gesehen also auf ein Unterverzeichnis innerhalb der Domain. In allen URL-relevanten Tags kann auch auf andere Kontexte innerhalb der gleichen Domain verwiesen werden. Notwendig hierzu ist, dass sowohl die verwendete URL mit einem Slash beginnt als auch der angegebene Kontext. Der Zugriff auf Ressourcen au\u00dferhalb des eigenen Kontextes ist freilich aus Sicherheitsgr\u00fcnden nicht ganz unproblematisch und kann daher auch unterbunden werden. Im Tomcat ist dazu der folgende Eintrag in der context.xml notwendig:<\/p>\n\n\n\n<p class=\"has-background has-background-color-background-color\">&lt;Context&nbsp;path=&#8220;\/examples&#8220;&nbsp;crossContext=&#8220;false&#8220;&nbsp;\/&gt;<\/p>\n\n\n\n<p>Unter GlassFish kann man das Gleiche mit dem Eintrag der folgenden Zeilen in der Datei \/WEB-INF\/glassfish-web.xml erreichen:<\/p>\n\n\n\n<p class=\"has-background has-background-color-background-color\">&lt;sun-web-app&nbsp;error-url=&#8220;&#8220;&gt;<br>&lt;context-root&gt;\/examples&lt;\/context-root&gt;<br>&lt;property&nbsp;name=&#8220;crossContextAllowed&#8220;&nbsp;value=&#8220;false&#8220;\/&gt;<br>&lt;\/sun-web-app&gt;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Die Tags der Core-Bibliothek bilden &#8211; wie der Name schon andeutet &#8211; die zentralen Elemente der JSTL. Diese steuern vor allem den Programmfluss durch die JSP, indem Schleifen- und Verzweigungskonstrukte zur Verf\u00fcgung gestellt werden.Die folgende Tabelle listet alle Tags dieser Bibliothek auf und beschreibt grob deren Nutzung. In den nachfolgenden [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[10,8],"tags":[41,42,43,40,19,16,39],"class_list":["post-296","post","type-post","status-publish","format-standard","hentry","category-jsp","category-javaweb","tag-bibliothek","tag-core","tag-core-bibliothek","tag-java-ee","tag-java-web","tag-jsp","tag-jstl"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v25.8 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Die Core Bliothek - Virtualberater<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.virtualberater.com\/index.php\/2018\/03\/12\/die-core-bliothek\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Die Core Bliothek - Virtualberater\" \/>\n<meta property=\"og:description\" content=\"Die Tags der Core-Bibliothek bilden &#8211; wie der Name schon andeutet &#8211; die zentralen Elemente der JSTL. Diese steuern vor allem den Programmfluss durch die JSP, indem Schleifen- und Verzweigungskonstrukte zur Verf\u00fcgung gestellt werden.Die folgende Tabelle listet alle Tags dieser Bibliothek auf und beschreibt grob deren Nutzung. In den nachfolgenden [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.virtualberater.com\/index.php\/2018\/03\/12\/die-core-bliothek\/\" \/>\n<meta property=\"og:site_name\" content=\"Virtualberater\" \/>\n<meta property=\"article:published_time\" content=\"2018-03-12T08:59:13+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2020-05-15T14:12:45+00:00\" \/>\n<meta name=\"author\" content=\"Franz-Martin\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Franz-Martin\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"14\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.virtualberater.com\/index.php\/2018\/03\/12\/die-core-bliothek\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.virtualberater.com\/index.php\/2018\/03\/12\/die-core-bliothek\/\"},\"author\":{\"name\":\"Franz-Martin\",\"@id\":\"https:\/\/www.virtualberater.com\/#\/schema\/person\/c70d622c592ff122093a39649b040609\"},\"headline\":\"Die Core Bliothek\",\"datePublished\":\"2018-03-12T08:59:13+00:00\",\"dateModified\":\"2020-05-15T14:12:45+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.virtualberater.com\/index.php\/2018\/03\/12\/die-core-bliothek\/\"},\"wordCount\":3019,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.virtualberater.com\/#\/schema\/person\/c70d622c592ff122093a39649b040609\"},\"keywords\":[\"Bibliothek\",\"Core\",\"Core Bibliothek\",\"Java EE\",\"Java Web\",\"Jsp\",\"Jstl\"],\"articleSection\":[\"Java Server Pages\",\"Java Web\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.virtualberater.com\/index.php\/2018\/03\/12\/die-core-bliothek\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.virtualberater.com\/index.php\/2018\/03\/12\/die-core-bliothek\/\",\"url\":\"https:\/\/www.virtualberater.com\/index.php\/2018\/03\/12\/die-core-bliothek\/\",\"name\":\"Die Core Bliothek - Virtualberater\",\"isPartOf\":{\"@id\":\"https:\/\/www.virtualberater.com\/#website\"},\"datePublished\":\"2018-03-12T08:59:13+00:00\",\"dateModified\":\"2020-05-15T14:12:45+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.virtualberater.com\/index.php\/2018\/03\/12\/die-core-bliothek\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.virtualberater.com\/index.php\/2018\/03\/12\/die-core-bliothek\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.virtualberater.com\/index.php\/2018\/03\/12\/die-core-bliothek\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Startseite\",\"item\":\"https:\/\/www.virtualberater.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Die Core Bliothek\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.virtualberater.com\/#website\",\"url\":\"https:\/\/www.virtualberater.com\/\",\"name\":\"Virtualberater\",\"description\":\"Java und mehr\",\"publisher\":{\"@id\":\"https:\/\/www.virtualberater.com\/#\/schema\/person\/c70d622c592ff122093a39649b040609\"},\"alternateName\":\"Java Entwicklung, Microframeworks und Cloud-Native Solutions\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.virtualberater.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/www.virtualberater.com\/#\/schema\/person\/c70d622c592ff122093a39649b040609\",\"name\":\"Franz-Martin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\/\/www.virtualberater.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/383ead0152e9bb024087006ad8dbfa33de9e321b670411b3370ad907f770a666?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/383ead0152e9bb024087006ad8dbfa33de9e321b670411b3370ad907f770a666?s=96&d=mm&r=g\",\"caption\":\"Franz-Martin\"},\"logo\":{\"@id\":\"https:\/\/www.virtualberater.com\/#\/schema\/person\/image\/\"},\"url\":\"https:\/\/www.virtualberater.com\/index.php\/author\/franz-martin\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Die Core Bliothek - Virtualberater","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.virtualberater.com\/index.php\/2018\/03\/12\/die-core-bliothek\/","og_locale":"de_DE","og_type":"article","og_title":"Die Core Bliothek - Virtualberater","og_description":"Die Tags der Core-Bibliothek bilden &#8211; wie der Name schon andeutet &#8211; die zentralen Elemente der JSTL. Diese steuern vor allem den Programmfluss durch die JSP, indem Schleifen- und Verzweigungskonstrukte zur Verf\u00fcgung gestellt werden.Die folgende Tabelle listet alle Tags dieser Bibliothek auf und beschreibt grob deren Nutzung. In den nachfolgenden [&hellip;]","og_url":"https:\/\/www.virtualberater.com\/index.php\/2018\/03\/12\/die-core-bliothek\/","og_site_name":"Virtualberater","article_published_time":"2018-03-12T08:59:13+00:00","article_modified_time":"2020-05-15T14:12:45+00:00","author":"Franz-Martin","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Franz-Martin","Gesch\u00e4tzte Lesezeit":"14\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.virtualberater.com\/index.php\/2018\/03\/12\/die-core-bliothek\/#article","isPartOf":{"@id":"https:\/\/www.virtualberater.com\/index.php\/2018\/03\/12\/die-core-bliothek\/"},"author":{"name":"Franz-Martin","@id":"https:\/\/www.virtualberater.com\/#\/schema\/person\/c70d622c592ff122093a39649b040609"},"headline":"Die Core Bliothek","datePublished":"2018-03-12T08:59:13+00:00","dateModified":"2020-05-15T14:12:45+00:00","mainEntityOfPage":{"@id":"https:\/\/www.virtualberater.com\/index.php\/2018\/03\/12\/die-core-bliothek\/"},"wordCount":3019,"commentCount":0,"publisher":{"@id":"https:\/\/www.virtualberater.com\/#\/schema\/person\/c70d622c592ff122093a39649b040609"},"keywords":["Bibliothek","Core","Core Bibliothek","Java EE","Java Web","Jsp","Jstl"],"articleSection":["Java Server Pages","Java Web"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.virtualberater.com\/index.php\/2018\/03\/12\/die-core-bliothek\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.virtualberater.com\/index.php\/2018\/03\/12\/die-core-bliothek\/","url":"https:\/\/www.virtualberater.com\/index.php\/2018\/03\/12\/die-core-bliothek\/","name":"Die Core Bliothek - Virtualberater","isPartOf":{"@id":"https:\/\/www.virtualberater.com\/#website"},"datePublished":"2018-03-12T08:59:13+00:00","dateModified":"2020-05-15T14:12:45+00:00","breadcrumb":{"@id":"https:\/\/www.virtualberater.com\/index.php\/2018\/03\/12\/die-core-bliothek\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.virtualberater.com\/index.php\/2018\/03\/12\/die-core-bliothek\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.virtualberater.com\/index.php\/2018\/03\/12\/die-core-bliothek\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Startseite","item":"https:\/\/www.virtualberater.com\/"},{"@type":"ListItem","position":2,"name":"Die Core Bliothek"}]},{"@type":"WebSite","@id":"https:\/\/www.virtualberater.com\/#website","url":"https:\/\/www.virtualberater.com\/","name":"Virtualberater","description":"Java und mehr","publisher":{"@id":"https:\/\/www.virtualberater.com\/#\/schema\/person\/c70d622c592ff122093a39649b040609"},"alternateName":"Java Entwicklung, Microframeworks und Cloud-Native Solutions","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.virtualberater.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":["Person","Organization"],"@id":"https:\/\/www.virtualberater.com\/#\/schema\/person\/c70d622c592ff122093a39649b040609","name":"Franz-Martin","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/www.virtualberater.com\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/383ead0152e9bb024087006ad8dbfa33de9e321b670411b3370ad907f770a666?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/383ead0152e9bb024087006ad8dbfa33de9e321b670411b3370ad907f770a666?s=96&d=mm&r=g","caption":"Franz-Martin"},"logo":{"@id":"https:\/\/www.virtualberater.com\/#\/schema\/person\/image\/"},"url":"https:\/\/www.virtualberater.com\/index.php\/author\/franz-martin\/"}]}},"_links":{"self":[{"href":"https:\/\/www.virtualberater.com\/index.php\/wp-json\/wp\/v2\/posts\/296","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.virtualberater.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.virtualberater.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.virtualberater.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.virtualberater.com\/index.php\/wp-json\/wp\/v2\/comments?post=296"}],"version-history":[{"count":46,"href":"https:\/\/www.virtualberater.com\/index.php\/wp-json\/wp\/v2\/posts\/296\/revisions"}],"predecessor-version":[{"id":783,"href":"https:\/\/www.virtualberater.com\/index.php\/wp-json\/wp\/v2\/posts\/296\/revisions\/783"}],"wp:attachment":[{"href":"https:\/\/www.virtualberater.com\/index.php\/wp-json\/wp\/v2\/media?parent=296"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.virtualberater.com\/index.php\/wp-json\/wp\/v2\/categories?post=296"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.virtualberater.com\/index.php\/wp-json\/wp\/v2\/tags?post=296"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}