JSP Syntax
Dieser Abschnitt führt kurz in die grundlegende Syntax der JSP-Entwicklung ein.
Scriptlet
Ein Scriptlet kann beliebig viele Java-Anweisungen, Variablen, Methoden oder Ausdrücke enthalten, solange sie in der Skriptsprache gültig sind.
Das Syntaxformat eines Scriptlets:
<% code snippet %>
Alternativ können Sie auch die entsprechende XML-Anweisung wie folgt schreiben:
<jsp:scriptlet> 代码片段 </jsp:scriptlet>
Alle Textinhalte, HTML-Tags oder JSP-Elemente müssen außerhalb des Scriptlets geschrieben werden.
Nachfolgend finden Sie ein Beispiel; es ist zugleich das erste JSP-Beispiel in diesem Tutorial:
<html>
<head><title>Hello World</title></head>
<body>
Hello World!<br/>
<%
out.println("Your IP address is " + request.getRemoteAddr());
%>
</body>
</html>
Hinweis:Bitte stellen Sie sicher, dass Apache Tomcat im Verzeichnis C:\apache-tomcat-7.0.2 installiert ist und die Laufzeitumgebung korrekt konfiguriert wurde.
Speichern Sie den obigen Code als hello.jsp, legen Sie ihn dann im Verzeichnis C:\apache-tomcat-7.0.2\webapps\ROOT ab, öffnen Sie einen Browser und geben Sie http://localhost:8080/hello.jsp in die Adressleiste ein. Nach der Ausführung erhalten Sie das folgende Ergebnis:
Problem mit der chinesischen Kodierung
Wenn wir Chinesisch korrekt auf der Seite anzeigen möchten, müssen wir den folgenden Code oben in der JSP-Datei hinzufügen:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
Als Nächstes ändern wir das obige Programm wie folgt:
<%@ 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>
Hello World!<br/>
<%
out.println("你的 IP 地址 " + request.getRemoteAddr());
%>
</body>
</html>
Auf diese Weise kann Chinesisch korrekt angezeigt werden.
JSP-Deklaration
Eine Deklarationsanweisung kann eine oder mehrere Variablen oder Methoden deklarieren, die von nachfolgendem Java-Code verwendet werden. In einer JSP-Datei müssen Sie diese Variablen und Methoden deklarieren, bevor Sie sie verwenden können.
Das Syntaxformat einer JSP-Deklaration:
<%! declaration; [ declaration; ]+ ... %>
Alternativ können Sie auch die entsprechende XML-Anweisung wie folgt schreiben:
<jsp:declaration> 代码片段 </jsp:declaration>
Beispielprogramm:
<%! int i = 0; %> <%! int a, b, c; %> <%! Circle a = new Circle(2.0); %>
JSP-Ausdruck
Der in einem JSP-Ausdruck enthaltene Ausdruck der Skriptsprache wird zunächst in einen String umgewandelt und dann an der Stelle eingefügt, an der der Ausdruck erscheint.
Da der Wert des Ausdrucks in einen String umgewandelt wird, können Sie den Ausdruck in einer Textzeile verwenden, ohne sich darum sorgen zu müssen, ob es sich um ein HTML-Tag handelt.
Das Ausdruckselement kann jeden Ausdruck enthalten, der der Java-Sprachspezifikation entspricht, aber Sie dürfen kein Semikolon verwenden, um den Ausdruck zu beenden.
Das Syntaxformat eines JSP-Ausdrucks:
<%= expression %>
Ebenso können Sie auch die entsprechende XML-Anweisung schreiben:
<jsp:expression> 表达式 </jsp:expression>
Beispielprogramm:
<%@ 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>
<p>
今天的日期是: <%= (new java.util.Date()).toLocaleString()%>
</p>
</body>
</html>
Nach der Ausführung erhalten Sie das folgende Ergebnis:
今天的日期是: 2016-6-25 13:40:07
JSP-Kommentare
JSP-Kommentare haben hauptsächlich zwei Zwecke: Code zu kommentieren und einen Codeblock auszukommentieren.
Das Syntaxformat von JSP-Kommentaren:
<%@ 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>
<%-- 该部分注释在网页中不会被显示--%>
<p>
今天的日期是: <%= (new java.util.Date()).toLocaleString()%>
</p>
</body>
</html>
Nach der Ausführung erhalten Sie das folgende Ergebnis:
今天的日期是: 2016-6-25 13:41:26
Syntaxregeln für die Verwendung von Kommentaren in verschiedenen Situationen:
| Syntax | Beschreibung |
|---|---|
| <%-- comment --%> | JSP-Kommentar; der Kommentarinhalt wird nicht an den Browser gesendet und nicht einmal kompiliert. |
| <!-- comment --> | HTML-Kommentar; der Kommentarinhalt ist sichtbar, wenn man den Quellcode der Seite im Browser anzeigt. |
| <\% | Repräsentiert statische <% Konstante |
| %\> | Repräsentiert statische %> Konstante |
| \' | In Attributen verwendete einfache Anführungszeichen |
| \" | In Attributen verwendete doppelte Anführungszeichen |
JSP-Direktiven
JSP-Direktiven werden verwendet, um Eigenschaften festzulegen, die sich auf die gesamte JSP-Seite beziehen.
Das Syntaxformat von JSP-Direktiven:
<%@ directive attribute="value" %>
Es gibt drei Arten von Direktiven-Tags:
| Direktive | Beschreibung |
|---|---|
| <%@ page ... %> | Definiert seitenabhängige Attribute wie Skriptsprache, Fehlerseite, Cache-Anforderungen usw. |
| <%@ include ... %> | Bindet andere Dateien ein |
| <%@ taglib ... %> | Führt Definitionen von Tag-Bibliotheken ein, die benutzerdefinierte Tags sein können |
JSP-Aktionen
JSP-Aktions-Tags verwenden XML-Syntax, um die Servlet-Engine zu steuern. Sie können dynamisch eine Datei einfügen, JavaBean-Komponenten wiederverwenden, Benutzer auf andere Seiten umleiten, relevanten HTML-Code für Java-Plug-ins generieren usw.
Aktions-Tags haben nur ein Syntaxformat, das strikt dem XML-Standard folgt:
<jsp:action_name attribute="value" />
Aktions-Tags sind im Grunde vordefinierte Funktionen. Die folgende Tabelle listet einige verfügbare JSP-Aktions-Tags auf:
| Syntax | Beschreibung |
|---|---|
| jsp:include | Dient zum Einbinden statischer oder dynamischer Ressourcen in die aktuelle Seite |
| jsp:useBean | Findet eine JavaBean-Komponente und initialisiert sie |
| jsp:setProperty | Setzt den Wert einer JavaBean-Komponente |
| jsp:getProperty | Fügt den Wert einer JavaBean-Komponente in die Ausgabe ein |
| jsp:forward | Übergibt ein Request-Objekt, das die Benutzeranfrage enthält, von einer JSP-Datei an eine andere |
| jsp:plugin | Dient zum Einbinden von Applet- und JavaBean-Objekten in die generierte HTML-Seite |
| jsp:element | Erstellt dynamisch ein XML-Element |
| jsp:attribute | Definiert Attribute eines dynamisch erstellten XML-Elements |
| jsp:body | Definiert den Body eines dynamisch erstellten XML-Elements |
| jsp:text | Dient zum Kapseln von Vorlagendaten |
Implizite JSP-Objekte
JSP unterstützt neun automatisch definierte Variablen, allgemein bekannt als implizite Objekte. Sie sind Objekte, die in JSP-Seiten automatisch verfügbar sind, ohne dass eine zusätzliche Deklaration oder Initialisierung erforderlich ist.
Die folgende Tabelle gibt eine kurze Einführung in diese neun impliziten Objekte:
| Objekt | Beschreibung |
|---|---|
| request | HttpServletRequestInstanz der Klasse, ein Objekt, das die HTTP-Anfrage repräsentiert und Informationen enthält, die vom Client an den Server gesendet werden, wie Formulardaten, URL-Parameter usw. |
| response | HttpServletResponseInstanz der Klasse, ein Objekt, das die HTTP-Antwort repräsentiert und verwendet wird, um Daten und Antworten an den Client zu senden. |
| out | JspWriterInstanz der Klasse, ein Objekt, das dazu dient, Textinhalte an den Client auszugeben, und typischerweise zur Generierung von HTML verwendet wird. |
| session | HttpSessionInstanz der Klasse, ein Objekt, das die Benutzersitzung repräsentiert und verwendet werden kann, um benutzerspezifische Daten über mehrere Seiten hinweg zu speichern und abzurufen. |
| application | ServletContextInstanz der Klasse, repräsentiert den Webanwendungskontext und kann verwendet werden, um globale Anwendungsdaten zu speichern und abzurufen. |
| config | ServletConfigInstanz der Klasse, enthält Konfigurationsinformationen über die aktuelle JSP-Seite, wie Initialisierungsparameter. |
| pageContext | PageContextInstanz der Klasse, bietet Zugriff auf alle Objekte und Namensräume der JSP-Seite. |
| page | Ähnlich wie das Schlüsselwort `this` in Java-Klassen repräsentiert es die aktuelle JSP-Seiteninstanz und kann verwendet werden, um Methoden der Seite aufzurufen. |
| Ausnahme | exceptionEin Objekt der Klasse, das das entsprechende Ausnahmeobjekt in der JSP-Seite darstellt, auf der der Fehler aufgetreten ist. Es wird verwendet, um Ausnahmen in JSP-Seiten zu behandeln, und kann verwendet werden, um Ausnahmen abzufangen und zu behandeln, die auf der Seite auftreten. |
Kontrollflussanweisungen
JSP bietet umfassende Unterstützung für die Java-Sprache. Sie können Java-APIs in JSP-Programmen verwenden und sogar Java-Codeblöcke erstellen, einschließlich bedingter Anweisungen und Schleifenanweisungen usw.
Bedingte Anweisungen
if…elseBlock, siehe folgendes Beispiel:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%! int day = 3; %>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Example(example.com)</title>
</head>
<body>
<h3>IF...ELSE 实例</h3>
<% if (day == 1 || day == 7) { %>
<p>今天是周末</p>
<% } else { %>
<p>今天不是周末</p>
<% } %>
</body>
</html>
Nach der Ausführung erhalten Sie das folgende Ergebnis:
IF...ELSE 实例 今天不是周末
Sehen wir uns nun den switch...case-Block an, der sich stark vom if...else-Block unterscheidet. Er verwendet out.println(), und das Ganze ist in Scriptlet-Tags enthalten, wie unten gezeigt:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%! int day = 3; %>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Example(example.com)</title>
</head>
<body>
<h3>SWITCH...CASE 实例</h3>
<%
switch(day) {
case 0:
out.println("星期天");
break;
case 1:
out.println("星期一");
break;
case 2:
out.println("星期二");
break;
case 3:
out.println("星期三");
break;
case 4:
out.println("星期四");
break;
case 5:
out.println("星期五");
break;
default:
out.println("星期六");
}
%>
</body>
</html>
Zugriff über den Browser; nach dem Ausführen erhalten Sie das folgende Ergebnis:
SWITCH...CASE 实例 星期三
Schleifenanweisungen
In JSP-Programmen können Sie die drei grundlegenden Java-Schleifentypen verwenden: for, while und do...while.
Sehen wir uns das Beispiel für die for-Schleife an. Das Folgende gibt "Example Tutorial" in verschiedenen Schriftgrößen aus:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%! int fontSize; %>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Example(example.com)</title>
</head>
<body>
<h3>For 循环实例</h3>
<%for ( fontSize = 1; fontSize <= 3; fontSize++){ %>
<font color="green" size="<%= fontSize %>">
Example
</font><br />
<%}%>
</body>
</html>
Nach der Ausführung erhalten Sie das folgende Ergebnis:

Schreiben Sie das obige Beispiel mit einer while-Schleife neu:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%! int fontSize=0; %>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Example(example.com)</title>
</head>
<body>
<h3>While 循环实例</h3>
<%while ( fontSize <= 3){ %>
<font color="green" size="<%= fontSize %>">
Example
</font><br />
<%fontSize++;%>
<%}%>
</body>
</html>
Zugriff über den Browser, das Ausgabeergebnis ist (fontSize ist auf 0 initialisiert, daher wird eine zusätzliche Zeile ausgegeben):
JSP unterstützt alle logischen und arithmetischen Operatoren von Java.
Die folgende Tabelle listet gängige JSP-Operatoren auf, mit Priorität von hoch nach niedrig:
| Kategorie | Operator | Assoziativität |
|---|---|---|
| Postfix | () [] . (Punktoperator) | Von links nach rechts |
| Unär | ++ - - ! ~ | Von rechts nach links |
| Multiplikativ | * / % | Von links nach rechts |
| Additiv | + - | Von links nach rechts |
| Verschiebung | >> >>> << | Von links nach rechts |
| Relational | > >= < <= | Von links nach rechts |
| Gleichheit / Ungleichheit | == != | Von links nach rechts |
| Bitweises AND | & | Von links nach rechts |
| Bitweises XOR | ^ | Von links nach rechts |
| Bitweises OR | | | Von links nach rechts |
| Logisches AND | && | Von links nach rechts |
| Logisches OR | || | Von links nach rechts |
| Conditional | ?: | Von rechts nach links |
| Zuweisung | = += -= *= /= %= >>= <<= &= ^= |= | Von rechts nach links |
| Komma | , | von links nach rechts |
JSP-Literale
Die JSP-Sprache definiert die folgenden Literale:
- Boolean (boolean): true und false;
- Integer (int): wie in Java;
- Float (float): wie in Java;
- String (string): beginnt und endet mit einfachen oder doppelten Anführungszeichen;
- Null: null.