JSP Aktionselemente
Anders als JSP-Direktivenelemente werden JSP-Aktionselemente während der Anfrageverarbeitungsphase wirksam. JSP-Aktionselemente werden in XML-Syntax geschrieben.
Mithilfe von JSP-Aktionen können Sie Dateien dynamisch einfügen, JavaBean-Komponenten wiederverwenden, Benutzer auf eine andere Seite umleiten und HTML-Code für Java-Plugins generieren.
Aktionselemente haben nur eine Syntax, die dem XML-Standard entspricht:
<jsp:action_name attribute="value" />
Aktionselemente sind grundsätzlich vordefinierte Funktionen. Die JSP-Spezifikation definiert eine Reihe von Standardaktionen, die JSP als Präfix verwenden. Die verfügbaren Standardaktionselemente sind wie folgt:
| Syntax | Beschreibung |
|---|---|
| jsp:include | Bindet eine Datei ein, wenn die Seite angefordert wird. |
| jsp:useBean | Findet oder instanziiert ein JavaBean. |
| jsp:setProperty | Setzt die Eigenschaften eines JavaBeans. |
| jsp:getProperty | Gibt die Eigenschaft eines JavaBeans aus. |
| jsp:forward | Leitet die Anfrage an eine neue Seite weiter. |
| jsp:plugin | Erzeugt OBJECT- oder EMBED-Tags für Java-Plugins basierend auf dem Browsertyp. |
| jsp:element | Definiert dynamische XML-Elemente |
| jsp:attribute | Legt Attribute dynamisch definierter XML-Elemente fest. |
| jsp:body | Legt den Inhalt dynamisch definierter XML-Elemente fest. |
| jsp:text | Verwendet Vorlagen zum Schreiben von Text in JSP-Seiten und Dokumenten. |
Häufige Attribute
Alle Aktionselemente haben zwei Attribute: das id-Attribut und das scope-Attribut.
- id-Attribut:
Das id-Attribut ist der eindeutige Bezeichner eines Aktionselements und kann in JSP-Seiten referenziert werden. Der von einem Aktionselement erzeugte id-Wert kann über PageContext abgerufen werden.
- scope-Attribut:
Dieses Attribut wird verwendet, um den Lebenszyklus eines Aktionselements zu identifizieren. Das id-Attribut und das scope-Attribut stehen in direktem Zusammenhang; das scope-Attribut definiert die Lebensdauer des zugehörigen id-Objekts. Das scope-Attribut hat vier mögliche Werte: (a) page, (b) request, (c) session und (d) application.
<jsp:include>-Aktionselement
Das <jsp:include>-Aktionselement wird verwendet, um statische und dynamische Dateien einzubinden. Diese Aktion fügt die angegebene Datei in die gerade generierte Seite ein. Das Syntaxformat lautet wie folgt:
<jsp:include page="相对 URL 地址" flush="true" />
Wir haben zuvor die include-Direktive vorgestellt, die Dateien einbindet, wenn die JSP-Datei in ein Servlet umgewandelt wird. Im Gegensatz dazu ist die jsp:include-Aktion hier anders; sie fügt Dateien ein, wenn die Seite angefordert wird.
Das Folgende ist eine Liste von Attributen, die sich auf die include-Aktion beziehen.
| Attribute | Beschreibung |
|---|---|
| page | Die relative URL-Adresse, die in die Seite eingebunden werden soll. |
| flush | Ein boolesches Attribut, das definiert, ob der Puffer vor dem Einbinden der Ressource geleert werden soll. |
Beispiel
Nachfolgend definieren wir zwei Dateiendate.jspundmain.jsp, der Code lautet wie folgt:
Code der Datei date.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<p>
今天的日期是: <%= (new java.util.Date()).toLocaleString()%>
</p>
Code der Datei main.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Example(example.com)</title>
</head>
<body>
<h2>include 动作实例</h2>
<jsp:include page="date.jsp" flush="true" />
</body>
</html>
Platzieren Sie nun die beiden oben genannten Dateien im Stammverzeichnis des Servers und greifen Sie auf die Datei main.jsp zu. Das angezeigte Ergebnis sieht wie folgt aus:
include 动作实例 今天的日期是: 2016-6-25 14:08:17
<jsp:useBean>-Aktionselement
jsp:useBeanDiese Aktion wird verwendet, um ein JavaBean zu laden, das in der JSP-Seite verwendet wird.
Diese Funktion ist sehr nützlich, weil sie es uns ermöglicht, die Wiederverwendung von Java-Komponenten zu nutzen.
Die einfachste Syntax der jsp:useBean-Aktion ist:
<jsp:useBean id="name" class="package.class" />
Nachdem die Klasse geladen wurde, können wir die Eigenschaften des Beans über die Aktionen jsp:setProperty und jsp:getProperty ändern und abrufen.
Im Folgenden finden Sie eine Liste von Attributen, die sich auf die useBean-Aktion beziehen.
| Attribute | Beschreibung |
|---|---|
| class | Gibt den vollständig qualifizierten Paketnamen des Beans an. |
| type | Gibt den Typ der Variablen an, die auf dieses Objekt verweisen wird. |
| beanName | Gibt den Namen des Beans über die Methode instantiate() von java.beans.Beans an. |
Bevor wir konkrete Beispiele geben, sehen wir uns zunächst die Aktionselemente jsp:setProperty und jsp:getProperty an:
<jsp:setProperty> Aktionselement
jsp:setProperty wird verwendet, um die Eigenschaften eines bereits instanziierten Bean-Objekts festzulegen. Es gibt zwei Verwendungsweisen. Erstens können Sie jsp:setProperty außerhalb (nach) des jsp:useBean-Elements verwenden, wie unten gezeigt:
<jsp:useBean id="myName" ... /> ... <jsp:setProperty name="myName" property="someProperty" .../>
An diesem Punkt wird jsp:setProperty ausgeführt, unabhängig davon, ob jsp:useBean ein vorhandenes Bean findet oder eine neue Bean-Instanz erstellt. Die zweite Verwendungsweise besteht darin, jsp:setProperty innerhalb des jsp:useBean-Elements zu platzieren, wie unten gezeigt:
<jsp:useBean id="myName" ... > ... <jsp:setProperty name="myName" property="someProperty" .../> </jsp:useBean>
An diesem Punkt wird jsp:setProperty nur ausgeführt, wenn eine neue Bean-Instanz erstellt wird; wenn eine vorhandene Instanz verwendet wird, wird jsp:setProperty nicht ausgeführt.
Die Aktion jsp:setProperty hat die folgenden vier Attribute, wie in der Tabelle unten gezeigt:
| Attribute | Beschreibung |
|---|---|
| name | Das Attribut name ist erforderlich. Es gibt an, welche Eigenschaften des Beans festgelegt werden sollen. |
| property | Das Attribut property ist erforderlich. Es gibt an, welche Eigenschaft festgelegt werden soll. Es gibt eine spezielle Verwendung: Wenn der Wert von property "*" ist, bedeutet das, dass alle Request-Parameter, deren Namen mit den Namen der Bean-Eigenschaften übereinstimmen, an die entsprechenden Setter-Methoden der Eigenschaften übergeben werden. |
| value | Das Attribut value ist optional. Dieses Attribut wird verwendet, um den Wert der Bean-Eigenschaft anzugeben. String-Daten werden in der Zielklasse automatisch durch die Standard-valueOf-Methode in numerische Typen sowie die Typen boolean, Boolean, byte, Byte, char und Character konvertiert. Zum Beispiel werden Eigenschaftswerte der Typen boolean und Boolean (wie "true") über Boolean.valueOf konvertiert, und Eigenschaftswerte der Typen int und Integer (wie "42") werden über Integer.valueOf konvertiert. value und param können nicht gleichzeitig verwendet werden, aber eines von beiden kann verwendet werden. |
| param | param ist optional. Es gibt an, welcher Request-Parameter als Wert der Bean-Eigenschaft verwendet werden soll. Wenn die aktuelle Anfrage keinen Parameter enthält, wird nichts getan; das System übergibt null nicht an die Setter-Methode der Bean-Eigenschaft. Daher können Sie die Bean ihre eigenen Standard-Eigenschaftswerte bereitstellen lassen und die Standardwerte nur dann ändern, wenn der Request-Parameter explizit einen neuen Wert angibt. |
<jsp:getProperty>-Aktionselement
Die Aktion jsp:getProperty extrahiert den Wert der angegebenen Bean-Eigenschaft, konvertiert ihn in einen String und gibt ihn dann aus. Das Syntaxformat lautet wie folgt:
<jsp:useBean id="myName" ... /> ... <jsp:getProperty name="myName" property="someProperty" .../>
Die folgende Tabelle listet die Attribute auf, die mit getProperty verknüpft sind:
| Attribute | Beschreibung |
|---|---|
| name | Der Name der abzurufenden Bean-Eigenschaft. Die Bean muss bereits definiert sein. |
| property | Gibt den Wert der Bean-Eigenschaft an, die extrahiert werden soll. |
Beispiel
Im folgenden Beispiel verwenden wir eine Bean:
package com.example.main;
public class TestBean {
private String message = "Example";
public String getMessage() {
return(message);
}
public void setMessage(String message) {
this.message = message;
}
}
Kompilieren Sie die obige Beispieldatei TestBean.java:
$ javac TestBean.java
Nach der Kompilierung wird eineTestBean.class-Datei im aktuellen Verzeichnis erzeugt. Kopieren Sie diese Datei in dasWebContent/WEB-INF/classes/com/example/main-Verzeichnis des aktuellen JSP-Projekts (Paketpfad com/example/main, erstellen Sie es manuell, falls es nicht vorhanden ist).
Nachfolgend sehen Sie ein Verzeichnisstrukturdiagramm in Eclipse:

Das Folgende ist ein sehr einfaches Beispiel, dessen Funktion darin besteht, ein Bean zu laden und dann seine message-Eigenschaft festzulegen/auszulesen.
Rufen wir nun dieses Bean in der Datei main.jsp auf:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Example(example.com)</title>
</head>
<body>
<h2>Jsp 使用 JavaBean 实例</h2>
<jsp:useBean id="test" class="com.example.main.TestBean" />
<jsp:setProperty name="test"
property="message"
value="Example..." />
<p>输出信息....</p>
<jsp:getProperty name="test" property="message" />
</body>
</html>
Greifen Sie über einen Browser zu, führen Sie die obige Datei aus, und die Ausgabe sieht wie folgt aus:

<jsp:forward>-Aktionselement
Die Aktion jsp:forward leitet die Anfrage an eine andere Seite weiter. Das Tag jsp:forward hat nur ein Attribut, page. Das Syntaxformat ist wie folgt:
<jsp:forward page="相对 URL 地址" />
Nachfolgend sind die mit forward verbundenen Attribute aufgeführt:
| Attribute | Beschreibung |
|---|---|
| page | Das Attribut page enthält eine relative URL. Der Wert von page kann direkt angegeben oder während der Anfrage dynamisch berechnet werden. Er kann eine JSP-Seite oder ein Java-Servlet sein. |
Beispiel
Im folgenden Beispiel verwenden wir zwei Dateien: date.jsp und main.jsp.
Der Code der Datei date.jsp ist wie folgt:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<p>
今天的日期是: <%= (new java.util.Date()).toLocaleString()%>
</p>
Der Code der Datei main.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Example(example.com)</title>
</head>
<body>
<h2>forward 动作实例</h2>
<jsp:forward page="date.jsp" />
</body>
</html>
Platzieren Sie nun die beiden oben genannten Dateien im Stammverzeichnis des Servers und greifen Sie auf die Datei main.jsp zu. Das angezeigte Ergebnis sieht wie folgt aus:
今天的日期是: 2016-6-25 14:37:25
<jsp:plugin>-Aktionselement
Die jsp:plugin-Aktion wird verwendet, um die OBJECT- oder EMBED-Elemente einzufügen, die erforderlich sind, um Java-Applets über das Java-Plugin auszuführen, abhängig vom Browsertyp.
Wenn das erforderliche Plugin nicht vorhanden ist, lädt es das Plugin herunter und führt anschließend die Java-Komponente aus. Die Java-Komponente kann ein Applet oder ein JavaBean sein.
Die Plugin-Aktion verfügt über mehrere Attribute, die HTML-Elementen entsprechen, um die Java-Komponente zu formatieren. Das param-Element kann verwendet werden, um Parameter an das Applet oder die Bean zu übergeben.
Das folgende ist ein typisches Beispiel für die Verwendung des Plugin-Aktionselements:
<jsp:plugin type="applet" codebase="dirname" code="MyApplet.class"
width="60" height="80">
<jsp:param name="fontcolor" value="red" />
<jsp:param name="background" value="black" />
<jsp:fallback>
Unable to initialize Java Plugin
</jsp:fallback>
</jsp:plugin>
Wenn Sie interessiert sind, können Sie versuchen, ein Applet zu verwenden, um das jsp:plugin-Aktionselement zu testen. Das <fallback>-Element ist ein neues Element, das dem Benutzer eine Fehlermeldung sendet, wenn die Komponente fehlschlägt.
<jsp:element>, <jsp:attribute>, <jsp:body>-Aktionselemente
Die Aktionselemente <jsp:element>, <jsp:attribute> und <jsp:body> definieren XML-Elemente dynamisch. Dynamisch ist sehr wichtig, was bedeutet, dass XML-Elemente zur Kompilierungszeit dynamisch statt statisch generiert werden.
Das folgende Beispiel definiert XML-Elemente dynamisch:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Example(example.com)</title>
</head>
<body>
<jsp:element name="xmlElement">
<jsp:attribute name="xmlElementAttr">
属性值
</jsp:attribute>
<jsp:body>
XML 元素的主体
</jsp:body>
</jsp:element>
</body>
</html>
Wenn der Browser auf die folgende Seite zugreift, sieht das Ausgabeergebnis wie folgt aus:
<jsp:text>-Aktionselement
Das <jsp:text>-Aktionselement ermöglicht die Verwendung von Textvorlagen in JSP-Seiten und -Dokumenten. Das Syntaxformat ist wie folgt:
<jsp:text>模板数据</jsp:text>
Die obige Textvorlage darf keine doppelten Elemente enthalten, sondern nur Text und EL-Ausdrücke (Hinweis: EL-Ausdrücke werden in späteren Kapiteln eingeführt). Beachten Sie, dass Sie in XML-Dateien keine Ausdrücke wie ${whatever > 0} verwenden können, da das Symbol > unzulässig ist. Sie können den Ausdruck ${whatever gt 0} oder einen in einen CDATA-Abschnitt eingebetteten Wert verwenden.
<jsp:text><![CDATA[<br>]]></jsp:text>
Wenn Sie in XHTML einen DOCTYPE deklarieren müssen, müssen Sie das Aktionselement <jsp:text> verwenden. Beispiel:
<jsp:text><![CDATA[<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"DTD/xhtml1-strict.dtd">]]>
</jsp:text>
<head><title>jsp:text action</title></head>
<body>
<books><book><jsp:text>
Welcome to JSP Programming
</jsp:text></book></books>
</body>
</html>
Für das obige Beispiel können Sie den Unterschied zwischen der Verwendung von <jsp:text> und dem Verzicht auf dieses Aktionselement ausprobieren.
Weitere Erweiterungen