English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

JSP 动作元素

与JSP指令元素不同的是,JSP动作元素在请求处理阶段起作用。JSP动作元素是用XML语法写成的。

利用JSP动作可以动态地插入文件、重用JavaBean组件、把用户重定向到另外的页面、为Java插件生成HTML代码。

动作元素只有一种语法,它符合XML标准:

动作元素基本上都是预定义的函数,JSP规范定义了一系列的标准动作,它用JSP作为前缀,可用的标准动作元素如下:

SintassiDescrizione
jsp:includeIncludi un file quando la pagina viene richiesta.
jsp:useBeanCerca o istanzia un JavaBean.
jsp:setPropertyImposta una proprietà di un JavaBean.
jsp:getPropertyEsporta una proprietà di un JavaBean.
jsp:forwardInoltra la richiesta a una nuova pagina.
jsp:pluginGenera i tag OBJECT o EMBED per il plugin Java in base al tipo di browser.
jsp:elementDefinisce l'elemento XML dinamico
jsp:attributeImposta le proprietà degli elementi XML definiti dinamicamente.
jsp:bodyImposta il contenuto degli elementi XML definiti dinamicamente.
jsp:textModello di scrittura del testo utilizzato nelle pagine JSP e nei documenti

Proprietà comuni

Tutti gli elementi azione hanno due proprietà: id e scope.

  • Proprietà id:

    La proprietà id è l'identificatore unico dell'elemento azione e può essere richiamato nella pagina JSP. Il valore id creato dall'elemento azione può essere chiamato tramite PageContext.

  • Proprietà scope:

    Questa proprietà viene utilizzata per identificare il ciclo di vita dell'elemento azione. La proprietà id è strettamente correlata alla proprietà scope, che definisce la durata degli oggetti associati all'id. La proprietà scope ha quattro possibili valori: (a) page, (b) request, (c) session, e (d) application.

L'elemento azione <jsp:include>

L'elemento azione <jsp:include> viene utilizzato per includere file statici e dinamici. L'azione inserisce il file specificato nella pagina che sta venendo generata. La sintassi è la seguente:

<jsp:include page="indirizzo URL relativo" flush="true" />

 È stato già introdotto l'instruttore include, che viene utilizzato quando il file JSP viene convertito in Servlet, mentre l'azione jsp:include è diversa, l'inserimento del file avviene al momento della richiesta della pagina.

Di seguito è elencata la lista delle proprietà dell'azione include.

AttributoDescrizione
pageIndirizzo URL relativo incluso nella pagina.
flushProprietà booleana, definita se cancellare il buffer prima di includere la risorsa.

Esempio online

Di seguito abbiamo definito due file date.jsp e main.jspEcco il codice di seguito:

Codice del file date.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8"%>
    pageEncoding="UTF-8"%>
<p>
   Oggi è la data: <%= (new java.util.Date()).toLocaleString() %>
</p>

Codice del file main.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8"%>
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Web Base Tutorial (oldtoolbag.com)</title>
</head>
<body>
<h2>include azione di esempio</h2>
<jsp:include page="date.jsp" flush="true" />
</body>
</html>

Ora mettete questi due file nella directory root del server, accedete al file main.jsp. Il risultato è il seguente:

include azione di esempio
Oggi è la data: 2016-6-25 14:08:17

Elemento di azione <jsp:useBean>

jsp:useBean L'azione viene utilizzata per caricare un JavaBean che verrà utilizzato nella pagina JSP.

Questa funzione è molto utile perché ci permette di sfruttare l'advantage della riciclabilità dei componenti Java.

La sintassi più semplice dell'azione jsp:useBean è:

<jsp:useBean id="name" />

Dopo che la classe è caricata, possiamo modificare e recuperare le proprietà del bean tramite le azioni jsp:setProperty e jsp:getProperty.

Di seguito è riportata la lista delle proprietà dell'azione useBean.

AttributoDescrizione
classSpecificare il nome completo del pacchetto del Bean.
typeSpecificare il tipo di variabile che si riferisce all'oggetto.
beanNameSpecificare il nome del Bean tramite il metodo instantiate() di java.beans.Beans.

Prima di dare esempi specifici, diamo un'occhiata agli elementi di azione jsp:setProperty e jsp:getProperty:

Elemento di azione <jsp:setProperty>

jsp:setProperty viene utilizzato per impostare le proprietà di un oggetto Bean già esemplificato, ha due usi. Prima, puoi usare jsp:setProperty fuori dall'elemento jsp:useBean, come segue:

<jsp:useBean id="myName" ... />
...
<jsp:setProperty name="myName" property="someProperty" .../>

In questo momento, non importa se jsp:useBean ha trovato un Bean esistente o ha creato un esempio di Bean, jsp:setProperty eseguirà. La seconda utilizzo è quello di inserire jsp:setProperty all'interno dell'elemento jsp:useBean, come segue:

<jsp:useBean id="myName" ... >
...
   <jsp:setProperty name="myName" property="someProperty" .../>
</jsp:useBean>

In questo momento, jsp:setProperty viene eseguito solo quando viene creato un nuovo esempio di Bean, se viene utilizzato un esempio esistente non viene eseguito jsp:setProperty.

L'azione jsp:setProperty ha quattro attributi come nell'elenco seguente:

AttributoDescrizione
nameL'attributo name è obbligatorio. Esso indica quale Bean deve essere impostato l'attributo.
propertyL'attributo property è obbligatorio. Esso indica quale attributo deve essere impostato. C'è un uso speciale: se il valore di property è "*", significa che tutti i parametri di richiesta che corrispondono ai nomi e agli attributi dei Bean saranno passati al metodo set corrispondente dell'attributo.
valueL'attributo value è opzionale. Questo attributo viene utilizzato per specificare il valore dell'attributo del Bean. I dati di stringa vengono automaticamente convertiti in numeri, boolean, Boolean, byte, Byte, char, Character nel tipo di destinazione attraverso il metodo.valueOf standard. Ad esempio, i valori degli attributi di tipo boolean e Boolean (ad esempio, "true") vengono convertiti tramite Boolean.valueOf, i valori degli attributi di tipo int e Integer (ad esempio, "42") vengono convertiti tramite Integer.valueOf.   value e param non possono essere utilizzati contemporaneamente, ma può essere utilizzato uno qualsiasi di essi.
paramparam è opzionale. Specifica quale parametro di richiesta viene utilizzato come valore dell'attributo del Bean. Se la richiesta attuale non ha parametri, non succede nulla, il sistema non passa null al metodo set del valore dell'attributo del Bean. Pertanto, puoi far fornire al Bean un valore predefinito, che viene modificato solo quando il parametro di richiesta specifica un nuovo valore.

L'elemento azione <jsp:getProperty>

L'azione <jsp:getProperty> estrae il valore dell'attributo specificato del Bean, lo converte in una stringa e lo esprime. La sintassi è la seguente:

<jsp:useBean id="myName" ... />
...
<jsp:getProperty name="myName" property="someProperty" .../>

Di seguito è riportato l'elenco delle proprietà associate a getProperty:

AttributoDescrizione
nameIl nome dell'attributo del Bean da cercare. Il Bean deve essere già definito.
propertyRappresenta il valore dell'attributo del Bean da estrarre

Esempio online

Nel seguente esempio abbiamo utilizzato un Bean:

package com.w3codebox.main;
public class TestBean {
   private String message = "基础教程网";
 
   public String getMessage() {
      return(message);
   }
   public void setMessage(String message) {
      this.message = message;
   }
}

Compilare l'esempio di file TestBean.java di seguito:

$ javac TestBean.java

Dopo la compilazione, verrà generato un file nella directory corrente TestBean.class file, Copia il file nella directory corrente del progetto JSP WebContent/WEB-INF/classes/com/w3codebox/mainSotto (com/w3codebox/main percorso del pacchetto, non c'è bisogno di creare manualmente).

Di seguito è riportato un diagramma di struttura di directory in Eclipse:

Di seguito è riportato un esempio molto semplice, il cui scopo è caricare un Bean e impostare/leggere il suo attributo message.

Ora chiamiamo questo Bean nel file main.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8"%>
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Web Base Tutorial (oldtoolbag.com)</title>
</head>
<body>
<h2>Esempio di utilizzo di JavaBean in Jsp</h2>
<jsp:useBean id="test" />
 
<jsp:setProperty name="test" 
                    property="message" 
                    value="教程 di base..." />
 
<p>Output informazioni....</p>
 
<jsp:getProperty name="test" property="message" />
</body>
</html>

L'accesso del browser, l'esecuzione dei file seguenti, produce l'output seguente:

Elemento di azione <jsp:forward>

 L'azione jsp:forward reindirizza la richiesta a un'altra pagina. La marca jsp:forward ha un solo attributo, page. Il formato grammaticale è il seguente:

<jsp:forward page="indirizzo URL relativo" />

Di seguito sono riportati gli attributi associati a forward:

AttributoDescrizione
pageL'attributo page contiene un URL relativo. Il valore di page può essere fornito direttamente o calcolato dinamicamente durante la richiesta, può essere una pagina JSP o un Java Servlet.

Esempio online

Nei seguenti esempi abbiamo utilizzato due file, ovvero: date.jsp e main.jsp.

Il codice del file date.jsp è il seguente:

<%@ page language="java" contentType="text/html; charset=UTF-8"%>
    pageEncoding="UTF-8"%>
<p>
   Oggi è la data: <%= (new java.util.Date()).toLocaleString() %>
</p>

Codice del file main.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8"%>
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Web Base Tutorial (oldtoolbag.com)</title>
</head>
<body>
<h2>Esempio di azione forward</h2>
<jsp:forward page="date.jsp" />
</body>
</html>

Ora mettete questi due file nella directory root del server, accedete al file main.jsp. Il risultato è il seguente:

Oggi è la data: 2016-6-25 14:37:25

Elemento di azione <jsp:plugin>

L'azione jsp:plugin viene utilizzata per inserire, in base al tipo del browser, gli elementi OBJECT o EMBED necessari per eseguire Java Applet tramite plugin Java.

Se il plugin richiesto non esiste, scaricherà il plugin e poi eseguirà il componente Java. Il componente Java può essere un applet o un JavaBean.

L'azione plugin ha molte proprietà corrispondenti agli elementi HTML per formattare i componenti Java. L'elemento param può essere utilizzato per passare parametri all'Applet o al Bean.

Esempio tipico dell'uso dell'azione <jsp:plugin>:

<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>
      Impossibile inizializzare il Java Plugin
   </jsp:fallback>
 
</jsp:plugin>

Se sei interessato, puoi provare a utilizzare applet per testare l'elemento di azione <jsp:plugin>. L'elemento <fallback> è un nuovo elemento che invia un messaggio di errore all'utente quando il componente non funziona correttamente.

、<jsp:element> 、<jsp:attribute> L'elemento di azione <jsp:body>

、<jsp:element> 、<jsp:attribute> L'elemento di azione <jsp:body> definisce dinamicamente l'elemento XML. Dinamico è molto importante, il che significa che gli elementi XML vengono generati dinamicamente durante la compilazione e non staticamente.

Esempio seguente definisce dinamicamente l'elemento XML:

<%@ page language="java" contentType="text/html; charset=UTF-8"%>
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Web Base Tutorial (oldtoolbag.com)</title>
</head>
<body>
<jsp:element name="xmlElement">
<jsp:attribute name="xmlElementAttr">
   Valore dell'attributo
</jsp:attribute>
<jsp:body>
   Corpo dell'elemento XML
</jsp:body>
</jsp:element>
</body>
</html>

Quando il browser accede alla seguente pagina, il risultato è come segue:


L'elemento di azione <jsp:text>

L'elemento di azione <jsp:text> consente di utilizzare modelli di scrittura di testo nelle pagine JSP e nei documenti, con la seguente sintassi:

<jsp:text>模板数据</jsp:text>

以上文本模板不能包含重复元素,只能包含文本和 EL 表达式(注:EL 表达式将在后续章节中介绍)。请注意,在 XML 文件中,您不能使用表达式如 ${whatever > 0},因为 > 符号是非法的。 你可以使用 ${whatever gt 0} 表达式或者嵌入在一个 CDATA 部分的值。

<jsp:text><![CDATA[<br>]]></jsp:text>

如果你需要在 XHTML 中声明 DOCTYPE,必须使用到 <jsp:text> 动作元素,示例如下:

<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>  
    欢迎使用 JSP 编程
</jsp:text></book></books>
</body>
</html>

你可以尝试使用 <jsp:text> 及不使用该动作元素执行结果的区别。