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-Operatoren

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.
Weitere Erweiterungen