1. Einführung in JSP
JSP (Java Server Pages) ist eine serverseitige Skriptsprache. Dabei handelt es sich um eine Technologie, die Java-Sprache zu HTML-Seiten hinzufügt, um dynamische Seiten zu generieren: Neue Tags (<%, %>,...) werden hinzugefügt.
JSP ist eine dynamische Webseitengenerierungstechnologie, die auf Java und Servlet basiert. Die zugrunde liegende Implementierung ist Java Servlet.
JSP-Seiten bestehen aus HTML-Code und darin eingebettetem Java-Code. Der Server verarbeitet diese Java-Codes, nachdem die Seite vom Client angefordert wurde, und gibt dann die generierte HTML-Seite an den Browser des Clients zurück.
2. JSP-Ausführungsprozess Der Client fordert die JSP-Seite an -> JSP-Parser analysiert *.jsp und kompiliert es in *.java -> javac-Befehl kompiliert es in *.class -> führt die Klassendatei aus -> antwortet und gibt das Ergebnis an zurück der Kunde
JSP-Code enthält zwei Kategorien: JSP-Elemente und Vorlagendaten. Vorlagendaten beziehen sich auf den Teil, den die JSP-Engine nicht verarbeitet. Das heißt, die JSP-Engine gibt die Teile mit Ausnahme der Tags <%...%> direkt und ohne Verarbeitung weiter.
Wenn JSP zum ersten Mal oder nach dem Ändern der JSP-Datei ausgeführt wird, ruft es den JSP-Parser auf, um die *.jsp-Datei in ein Servlet-Programm zu kompilieren, sodass es langsamer ist.
3. Grundlegende JSP-Syntax
1. Zwei Anmerkungstypen
(1) HTML-Kommentar Sie können dem JSP-Code einen Kommentar im HTML-Format hinzufügen. Dieser Kommentar wird an den Client gesendet, aber nicht auf der Seite angezeigt.
<!-- Kommentare im HTML-Format, sichtbar beim Anzeigen des Quellcodes auf dem Client -->
<!-- Dieser Kommentar wurde von <%=programmer%>--> hinzugefügt
Wenn der Programmierer ein Hackiller ist, lautet der auf dem Client zurückgegebene Kommentar <!-- Dieser Kommentar wird vom Hackiller hinzugefügt -->
(2) JSP-Kommentare werden in den JSP-Code geschrieben, aber nicht an den Client gesendet.
<%-- JSP-Kommentar, dieser Kommentar wird beim Kompilieren von JSP ignoriert --%>
<%-- /*Mehrzeilige Kommentare im Scriptlet*/ --%>
<%-- /**Mehrzeilige Kommentare in Scriptlet, die mit javadoc*/ --%> aus Java-Dateien extrahiert werden können
<%-- Einzeiliger JSP-Kommentar--%>
2. 3 Skriptelemente
(1) Deklaration globaler Variablen
<%! int i=0; String str="Hallo Welt!";
(2)Ausdruck
Im JSP-Code werden Ausdrücke häufig verwendet, um den Wert einer Variablen auszugeben, die an einer beliebigen Stelle liegen kann
<%! int a=1; int b=2; String str="Hallo Welt!";
<%=a+b%> <%=str>
PS: Sie können das Symbol „;“ nicht als Abschlusszeichen eines Ausdrucks verwenden. Derselbe Ausdruck muss jedoch im Scriptlet mit einem Semikolon enden.
(3)Skriptlet
Ein Skriptsegment wird verwendet, um ein gültiges Java-Programmsegment zu enthalten
<% int b=3; %>lokale Variable
3. 3 Befehlselemente
(1)Seitenbefehl
<%@ page contentType="text/html;charset=utf-8"%>
Definieren Sie die globalen Attribute der JSP-Datei, einschließlich: Sprache, Erweiterungen, Import, Sitzung, Puffer, Autoflush, isThreadSafe, Info, ErrorPage, IsErrorPage, ContentType (Ausgabeformat vom Server zum Client).
Die Position kann an einer beliebigen Stelle auf der Seite liegen, es wird jedoch empfohlen, sie oben auf der Seite zu platzieren.
Sprache: deklariert den Typ der Skriptsprache. Derzeit kann nur „Java“ verwendet werden.
erweitert: Gibt den vollständigen Namen der Java-Klasse an, die beim Kompilieren von JSP hinzugefügt werden muss. Dadurch wird die Kompilierungsfähigkeit von JSP eingeschränkt. Verwenden Sie ihn daher mit Vorsicht!
import: Liste der Java-Pakete, die importiert werden müssen.
Sitzung: Legen Sie fest, ob der Client eine HTTP-Sitzung benötigt. Der Standardwert ist wahr.
Puffer: Die Größe des Puffers wird vom Out-Objekt verwendet, um die Ausgabe der ausgeführten JSP an den Client-Browser zu verarbeiten. Der Standardwert ist 8 KB.
autoFlush: Legt fest, ob die Ausgabe erzwungen werden soll, wenn der Puffer überläuft. Wenn er als „true“ (Standardwert) definiert ist, ist die Ausgabe normal. Wenn er als „false“ definiert ist, tritt ein unerwarteter Fehler auf.
isThreadSafe: Legt fest, ob die JSP-Datei in mehreren Threads verwendet werden kann. Der Standardwert ist wahr.
info: Textinformationen. Es kann mit der Methode Servlet.getServletInfo() abgerufen werden.
errorPage: Legen Sie die JSP-Datei fest, die Ausnahmeereignisse behandelt
sErrorPage: Legen Sie fest, ob es sich bei dieser Seite um eine Seite handelt, die Ausnahmeereignisse verarbeitet. Wenn auf true gesetzt, kann das Ausnahmeobjekt verwendet werden.
contentType: Legen Sie den MIME-Typ und den Zeichenkodierungssatz fest. Der Standard-MIME-Typ ist text/html und der Standardzeichensatz ist charset=ISO-8859-1.
Auf einer Seite können mehrere < %@page %>-Direktiven verwendet werden, mit Ausnahme des Importattributs können andere Attribute jedoch nur einmal verwendet werden.
Von JSP standardmäßig importierte Pakete Die folgenden Pakete wurden während der JSP-Kompilierung importiert, daher ist es nicht erforderlich, sie mit der Seitenanweisung in die JSP-Datei einzufügen:
java.lang.*
javax.servlet.*
javax.servlet.jsp.*
javax.servlet.http.*
(2)Richtlinie einschließen
HTML-Code
<%@ include file = "relative path" %>
Verwenden Sie die Anweisung include, um eine statische Datei in JSP einzubinden und die JSP-Anweisungen in dieser Datei zu analysieren.
Wenn der Pfad mit „/“ beginnt, bezieht sich dieser Pfad hauptsächlich auf den Kontextpfad der JSP-Anwendung.
Wenn der Pfad als Dateiname oder Dateiverzeichnis geöffnet wird, ist dieser Pfad der aktuelle Pfad der verwendeten JSP-Datei.
(3) taglib-Befehl
HTML-Code
<%@ taglib uri = "TagLibrary" prefix = "mypfx" %>
Verwenden Sie die taglib-Direktive, um eine Tag-Bibliothek und ihr benutzerdefiniertes Präfix zu definieren.
uri: Uniform Resource Identifier benennt das benutzerdefinierte Label eindeutig basierend auf dem Präfix des Labels, das ein relativer oder absoluter Pfad sein kann.
Präfix: das Präfix des benutzerdefinierten Labels. Verwenden Sie nicht jsp, jspx, java, javax, servlet, sun, sunw als Präfixe, diese wurden von Sun als reserviert erklärt.
4. 8 Aktionsbefehle
(1) Seitensprung: <jsp:forward>
Das <jsp:forward>-Tag übergibt ein Anforderungsobjekt, das eine Benutzeranforderung enthält, von einer JSP-Datei an eine andere.
Enthält insgesamt 2 Attribute
Das Seitenattribut ist ein Ausdruck oder eine Zeichenfolge, die die Datei oder URL beschreibt, an die weitergeleitet werden soll.
<jsp:param>Senden Sie einen oder mehrere Parameter an eine dynamische Datei. Wenn das Tag <jsp:param> verwendet wird, muss die Zieldatei eine dynamische Datei sein (z. B. Servlet oder JSP usw.).
HTML-Code
<jsp:forward page=test.jsp>
<jsp:param name="username" value="<%=user%>"/>
<jsp:param name="password" value="12345678"/>
</jsp:forward>
Holen Sie sich den Benutzernamen über request.getParameter("username")
(2) Seite einschließen: <jsp:include>
<jsp:include> ermöglicht die Einbindung statischer und dynamischer Webressourcen, und die Ergebnisse dieser beiden Einbindungen sind unterschiedlich.
Wenn nur statische Dateien eingebunden werden, fügt diese Einbindung nur den Inhalt der eingebundenen Datei zur JSP-Datei hinzu, ähnlich wie < %@include% >;
Wenn eine dynamische Webressource eingebunden ist, wird die eingebundene Datei auch vom JSP-Compiler ausgeführt.
Wenn diese Include-Datei dynamisch ist, können Sie auch <jsp:param> verwenden, um Parameter und Parameterwerte zu übergeben.
(3) Bean erstellen: <jsp:useBean>
Erstellen Sie eine Bean-Instanz und geben Sie deren Namen und Umfang an.
<jsp:useBean id="beanInstanceName" Scope="page|request|session|application" class="package.className"/>
Enthält 5 Attribute.
ID: Bestätigen Sie die Bean-Variable im definierten Bereich und verwenden Sie die ID, um diese Bean-Instanz im Programm zu verwenden. Beim Wert von id wird die Groß-/Kleinschreibung beachtet.
Geltungsbereich: Der Geltungsbereich, in dem die Bean existiert, und der gültige Geltungsbereich des ID-Variablennamens. Der Standardwert ist Seite.
Klasse: Verwenden Sie das Schlüsselwort new und den Klassenkonstruktor, um eine Bean aus einer Klasse zu instanziieren. Die Klasse darf nicht abstrakt sein und muss über einen öffentlichen Konstruktor ohne Argumente verfügen.
Typ: Wenn diese Bean bereits im angegebenen Bereich vorhanden ist, weist die Verwendung von Typ dieser Bean einen Datentyp zu. Wenn type ohne class oder beanName verwendet wird, wird die Bean nicht instanziiert.
beanName: beanName kann eine Zeichenfolge package.class oder ein JSP-Ausdruck sein und sein Wert wird an die Methode Beans.instantiate übergeben. Der Wert von type kann mit beanName, seiner Basisklasse oder der von ihm implementierten Schnittstelle identisch sein.
(4) Bean-Eigenschaften festlegen: <jsp:setProperty>
<jsp:setProperty name="beanInstanceName" property="*"|property="propertyName" value="string|<%=expression%>"|param="parameterName"/>
Name: Gibt den Namen der Bean-Instanz an, die in <jsp:useBean> erstellt wurde, also die ID.
Eigenschaft: Passen Sie die Eigenschaften in der Bean an
param: Verweist auf den Parameternamen im Anforderungsobjekt und setzt den entsprechenden Wert auf das Bean-Attribut.
Wert: Verwenden Sie den angegebenen Wert, um die Bean-Eigenschaft festzulegen. Dieser Wert kann eine Zeichenfolge oder ein Ausdruck sein. Wenn es sich um eine Zeichenfolge handelt, wird sie in den Typ des Bean-Attributs konvertiert (z. B. wird „0,98“ in den Double-Typ 0,98 konvertiert). Wenn es sich um einen Ausdruck handelt, muss sein Typ mit dem Typ des Bean-Attributs übereinstimmen.
PS: Param-Attribute und Wertattribute können nicht gleichzeitig im selben <jsp:setProperty> verwendet werden
(5) Bean-Eigenschaften abrufen: <jsp:getProperty>
Rufen Sie den Attributwert im vorhandenen Bean-Objekt ab und zeigen Sie ihn auf der Seite an.
<jsp:getProperty name="beanInstanceName property="propertyName"/>
Name: Derselbe Name wie die vorhandene Objektinstanz.
Eigenschaft: der Name der Eigenschaft im Objekt
(6) Verwenden Sie das Applet-Plugin: <jsp:plugin>
HTML-Code
<jsp:plugin type="applet" code="MeidaPlay.class" codebase="../classes">
<jsp:parmas>
<jsp:param name="way" value="Hall"/>
</jsp:params>
<jsp:fallback>
<p>Applet konnte nicht geladen werden!</p>
</fallback>
</jsp:plugin>
Verwenden Sie <jsp:plugin>, um ein Applet oder Bean einzufügen, und laden Sie bei Bedarf ein Java-Plug-in herunter, um es auszuführen.
(7) Parameter definieren: <jsp:param>
Kann in <jsp:include>, <jsp:forward>, <jsp:plugin> verwendet werden.
(8) Plug-in-Fehlermeldung: <jsp:fallback>
Wenn das Plug-in <jsp:plugin> nicht normal angezeigt werden kann, wird eine Eingabeaufforderung angezeigt.
3. Integrierte JSP-Objekte
1. Anfrage: Dieses Objekt kapselt die vom Benutzer übermittelten Informationen. Die gekapselten Informationen können durch Aufrufen der entsprechenden Methode des Objekts abgerufen werden.
Wenn das Anforderungsobjekt die vom Kunden übermittelten chinesischen Zeichen erhält, werden verstümmelte Zeichen angezeigt und es muss eine spezielle Verarbeitung durchgeführt werden.
Häufig verwendete Methoden:
getParameter(String parameterName): Informationen zur Formularübermittlung abrufen.
getProtocol(): Ruft das vom Kunden verwendete Protokoll ab.
getServletPath(): Ruft die Seite ab, auf der der Kunde Informationen übermittelt hat.
getMethod(): Die Methode zum Abrufen der vom Kunden übermittelten Informationen.
getHeader(String str): Ruft die Werte von Accept, Accept-Encoding und Host in der HTTP-Header-Datei ab.
getRermoteHost(): Ruft die IP-Adresse des Kunden ab.
getServerName: Rufen Sie den Servernamen ab.
getServerPort: Ruft die Portnummer des Servers ab.
getParameterNames(): Ruft die Namen aller vom Client übermittelten Parameter ab.
2. Antwort: Das Antwortobjekt reagiert dynamisch auf die Anfrage des Clients und sendet Daten an den Client.
(1) Reagieren Sie dynamisch auf das contentType-Attribut der Seite, um das contentType-Attribut der Seite statisch festzulegen.
(2)Antwortumleitung
Response.sendRedirect("index.jsp");
3. Sitzung: Sitzungsobjekt
(1)Was ist ein Session-Objekt?
Das Sitzungsobjekt wird automatisch erstellt, wenn die erste JSP-Seite geladen wird, um die Sitzungsverwaltung abzuschließen.
Sie beginnt, wenn ein Client einen Browser öffnet und eine Verbindung zum Server herstellt, und endet, wenn der Client den Browser schließt und den Server verlässt. Dies wird als Sitzung bezeichnet.
(2) ID des Sitzungsobjekts
Wenn ein Kunde zum ersten Mal eine JSP-Seite auf dem Server besucht, generiert die JSP-Engine ein Sitzungsobjekt und weist eine ID-Nummer vom Typ String zu. Die JSP-Engine sendet diese ID-Nummer auch an den Client und speichert sie in einem Cookie Auf diese Weise wird das Sitzungsobjekt erst dann vom Server geändert, wenn der Client den Browser schließt, und die Sitzungskorrespondenz mit dem Client verschwindet.
(3)Gemeinsame Methoden
public String getId(): Ruft die Nummer des Session-Objekts ab.
public void setAttribute(String str,Object obj): Fügen Sie das Parameterobjekt zum Session-Objekt hinzu.
öffentliches Objekt getAttribute(): Ruft die Attribute im Sitzungsobjekt basierend auf dem Attributnamen ab.
public boolean isNew(): Bestimmen Sie, ob es sich um einen neuen Kunden handelt.
4. Anwendung: Anwendungsobjekt
(1)Was ist ein Anwendungsobjekt?
Dieses Anwendungsobjekt wird nach dem Start des Servers generiert. Wenn ein Kunde zwischen verschiedenen Seiten der besuchten Website navigiert, ist das Anwendungsobjekt dasselbe und alle Kunden teilen sich dieses integrierte Anwendungsobjekt.
(2)Gemeinsame Methoden
setAttribute(String key,Object obj): Fügen Sie das Parameterobjekt zum Anwendungsobjekt hinzu.
getAttibute(String-Schlüssel): Rufen Sie die Attribute im Anwendungsobjekt basierend auf dem Attributnamen ab
5. Out: Ausgabeobjekt
Das Out-Objekt ist ein Ausgabestream, der zur Ausgabe von Daten an Clients verwendet wird.
out.print(): Verschiedene Datentypen ausgeben.
out.newLine(): Gibt ein Newline-Zeichen aus.
out.close(): Schließt den Stream.
6. Config: Konfigurationsobjekt Im Allgemeinen verwenden wir das Config-Objekt, um einige Initialisierungskonfigurationsinformationen abzurufen. Häufig verwendete Methoden sind getInitParameter und getInitParameterNames, um die Parameter während der Servlet-Initialisierung abzurufen.
7.Seite: Seitenobjekt
Das Seitenobjekt stellt das von der JSP-Datei generierte laufende Klassenobjekt dar und wird für allgemeine Leser nicht empfohlen.
8.PageContext: Seitenkontextobjekt
Mit der von JSP eingeführten PageContext-Klasse können Sie auf viele Eigenschaften der Seite zugreifen. Die Variable pageContext speichert den Wert des PageContext-Objekts, das der aktuellen Seite zugeordnet ist. Die PageContext-Klasse verfügt über Methoden wie getRequest, getResponse, getOut und getSession.
9. Ausnahme: Ausnahmeobjekt
Das Ausnahmeobjekt stellt das Ausnahmeobjekt dar, das beim Ausführen der JSP-Datei generiert wird. Dieses Objekt kann nicht direkt in gewöhnlichen JSP-Dateien verwendet werden, sondern nur in
< %@page isErrorPage="true"%> wird in JSP-Dateien verwendet. Dies liegt daran, dass das beim Ausführen der JSP-Datei generierte Fehlerobjekt verworfen wird und nur von einer JSP abgefangen werden kann, die das Tag < %@pageisErrorPage="true"% > zum Abfangen des Fehlerobjekts verwendet. Die am häufigsten verwendete Methode ist getMessage, mit der Fehlerinformationen abgerufen werden.
4. Instanz-Anmeldeseite: index.jsp
HTML-Code
<%@ page language="java" pageEncoding="UTF-8" contentType="text/html; charset=UTF-8" %>
<html>
<Kopf>
<title>Systemanmeldung</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<link href="css/vbulletin.css" rel="stylesheet" type="text/css">
<style type="text/css">
.btn {
Schriftfamilie: „Tahoma“, „宋体“;
Schriftgröße: 9pt;
Farbe: #001E3C;
BORDER-BOTTOM: #6794BC 1px einfarbig;
RAND LINKS: #8BB8E0 1 Pixel durchgehend;
BORDER-RECHTS: #6794BC 1px durchgehend;
BORDER-TOP: #8BB8E0 1 Pixel durchgehend;
Hintergrundbild: url(image/buttonbg.gif);
CURSOR: Hand;
Schriftstil: normal;
Polsterung links: 3px;
padding-right: 3px;
}
</style>
<script type="text/javascript">
Funktion doLogin(){
var vform = document.loginform;
if(!loginform.username.value){
Alert("Bitte Benutzernamen eingeben!")
zurückkehren;
}
if(!loginform.password.value){
Alert("Bitte Passwort eingeben!")
zurückkehren;
}
vform.submit();
}
</script>
</head>
<body topmargin="0" leftmargin="0" >
<form action="receive.jsp" name="longinForm" method="post">
<table width="100%" height="100%">
<tr>
<td align="center" valign="middle">
<TABLE id="form1"
cellpacing="0" cellpadding="0" border="0" style="width: 500;">
<CAPTION style="display: none">
</CAPTION>
<TR>
<TD>
<TABLE width="100%" height="100%" cellpacing="0"
cellpadding="0" border="0" style="table-layout: behoben">
<TR>
<TD valign="top">
<FIELDSET id="form1_group0" style="width: 100%;">
<LEGEND>Systemanmeldung</LEGEND>
<DIV>
<DIV style="width: 100 %; height: 100 %">
<TABLE width="100%" Zellenabstand="0"
cellpadding="4" border="0" style="table-layout: behoben;">
<COLGROUP>
<COL width="100"></COL>
<COL width="50%"></COL>
<COL width="100"></COL>
<COL width="50%"></COL>
</COLGROUP>
<TR>
<TD align="right">
Benutzername
</TD>
<TD class="InnerTableContentCell">
<input type="text" name="username"
style="width: 100%;">
</TD>
<TD align="right">
Passwort
</TD>
<TD>
<input type="password" name="password"
style="width: 100%;" />
<input type="hidden" name="action2" value="0">
</TD>
</TR>
<TR>
<TD colSpan="4"
align="right">
<input type="button" name="login" value="Login" onclick="this.form.submit();"
</TD>
</TR>
</TABLE>
</DIV>
</DIV>
</FIELDSET>
</TD>
</TR>
</TABLE>
</TD>
</TR>
</TABLE>
</td>
</tr>
</table>
</form>
</body>
</html>
Seite „Daten empfangen“: „receive.jsp“.
HTML-Code
<%@ page language="java" pageEncoding="UTF-8" contentType="text/html; charset=UTF-8" info="action tag"%>
<jsp:useBean id="userVo" class="exercise.vo.UserVo" Scope="request">
<jsp:setProperty name="userVo" property="name" param="username"/>
<jsp:setProperty name="userVo" property="password" param="password"/>
</jsp:useBean>
<html>
<Kopf>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8" >
<link href="css/vbulletin.css" rel="stylesheet" type="text/css">
</head>
<Körper>
Dies ist meine JSP-Seite
<hr>Verwenden Sie <jsp:getProperty>, um den im Formular übermittelten Wert abzurufen<br>
name:<jsp:getProperty property="name" name="userVo"/><br>
Passwort:<jsp:getProperty property="password" name="userVo"/>
<br><br><hr>
<%
out.println("Direkt vom VO-Objekt abrufen:<br> name:"+userVo.getName()+
"<br>password:"+userVo.getPassword()+"<br>");
String serviceName = request.getServerName();//request-Objekt in 1.jsp
out.println("<br><hr>Servername: "+serviceName);
out.println("<br>MIME-Typ: "+response.getContentType());//2.jsp internes Antwortobjekt
session.setAttribute("sessionName","session object inside jsp");//3.jsp internes Sitzungsobjekt
out.println("<br>session object: "+session.getAttribute("sessionName"));//4.jsp internes Out-Objekt
pageContext.setAttribute("pageContext","Context-Umgebungsreferenz");//pageContext-Objekt in 5.jsp
//6.application
//7. ServletConfig-Instanz konfigurieren
//8. Instanz der Seite java.lang.Object
//9. Ausnahme muss eine Instanz von java.lang.Throwable auf der Seite mit isErrorPage=true in der Seitenanweisung verwenden.
String info = pageContext.getServletContext().getServerInfo();
out.println("Holen Sie sich das Info-Attribut im Seitenbefehl: "+info);
%>
</body>