JSP - Filtri
In questo capitolo, discuteremo dei filtri in JSP. I filtri servlet e JSP sono classi Java che possono essere utilizzate nella programmazione servlet e JSP per i seguenti scopi:
Per intercettare le richieste di un client prima che acceda a una risorsa nel back-end.
Per manipolare le risposte dal server prima che vengano rispedite al client.
Esistono vari tipi di filtri suggeriti dalle specifiche:
- Filtri di autenticazione
- Filtri di compressione dati
- Filtri di crittografia
- Filtri che attivano eventi di accesso alle risorse
- Filtri di conversione delle immagini
- Filtri di registrazione e controllo
- Filtri catena TIPO MIME
- Filtri di tokenizzazione
- Filtri XSL / T che trasformano il contenuto XML
I filtri vengono distribuiti nel file descrittore di distribuzione web.xmle quindi eseguire il mapping ai nomi servlet o JSP o ai pattern URL nel descrittore di distribuzione dell'applicazione. Il file descrittore di distribuzione web.xml può essere trovato nella directory <Tomcat-installation-directory> \ conf .
Quando il contenitore JSP avvia la tua applicazione web, crea un'istanza di ogni filtro che hai dichiarato nel descrittore di distribuzione. I filtri vengono eseguiti nell'ordine in cui sono dichiarati nel descrittore di distribuzione.
Metodi di filtro servlet
Un filtro è semplicemente una classe Java che implementa l'estensione javax.servlet.Filterinterfaccia. L'interfaccia javax.servlet.Filter definisce tre metodi:
S.No. | Metodo e descrizione |
---|---|
1 | public void doFilter (ServletRequest, ServletResponse, FilterChain) Questo metodo viene chiamato dal contenitore ogni volta che una coppia richiesta / risposta viene passata attraverso la catena a causa di una richiesta del client per una risorsa alla fine della catena. |
2 | public void init(FilterConfig filterConfig) Questo metodo viene chiamato dal contenitore Web per indicare a un filtro che viene messo in servizio. |
3 | public void destroy() Questo metodo viene chiamato dal contenitore Web per indicare a un filtro che è stato messo fuori servizio. |
Esempio di filtro JSP
L'esempio seguente mostra come stampare l'indirizzo IP del client e la data e l'ora corrente, ogni volta che accede a un file JSP. Questo esempio ti fornirà una comprensione di base del filtro JSP, ma puoi scrivere applicazioni di filtro più sofisticate utilizzando lo stesso concetto:
// Import required java libraries
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
// Implements Filter class
public class LogFilter implements Filter {
public void init(FilterConfig config) throws ServletException {
// Get init parameter
String testParam = config.getInitParameter("test-param");
//Print the init parameter
System.out.println("Test Param: " + testParam);
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws java.io.IOException, ServletException {
// Get the IP address of client machine.
String ipAddress = request.getRemoteAddr();
// Log the IP address and current timestamp.
System.out.println("IP "+ ipAddress + ", Time "+ new Date().toString());
// Pass request back down the filter chain
chain.doFilter(request,response);
}
public void destroy( ) {
/* Called before the Filter instance is removed
from service by the web container*/
}
}
Compilare LogFilter.java nel solito modo e metti il tuo LogFilter.class file in formato <Tomcat-installation-directory>/webapps/ROOT/WEB-INF/classes.
Mappatura filtri JSP in Web.xml
I filtri vengono definiti e quindi mappati su un URL o un nome file JSP, in modo molto simile a come viene definito Servlet e quindi mappato a un pattern URL web.xmlfile. Creare la seguente voce per il tag di filtro nel file descrittore di distribuzioneweb.xml
<filter>
<filter-name>LogFilter</filter-name>
<filter-class>LogFilter</filter-class>
<init-param>
<param-name>test-param</param-name>
<param-value>Initialization Paramter</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>LogFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
Il filtro sopra verrà applicato a tutti i servlet e JSP perché abbiamo specificato /*nella nostra configurazione. È possibile specificare un particolare servlet o il percorso JSP se si desidera applicare il filtro su pochi servlet o solo JSP.
Ora prova a chiamare qualsiasi servlet o JSP e vedrai il log generato nel log del tuo server web. Puoi usareLog4J logger per accedere sopra accedi in un file separato.
Utilizzo di più filtri
La tua applicazione web può definire diversi filtri differenti con uno scopo specifico. Considera di definire due filtri AuthenFilter e LogFilter . Il resto del processo rimarrà come spiegato sopra tranne che è necessario creare una mappatura diversa come indicato di seguito -
<filter>
<filter-name>LogFilter</filter-name>
<filter-class>LogFilter</filter-class>
<init-param>
<param-name>test-param</param-name>
<param-value>Initialization Paramter</param-value>
</init-param>
</filter>
<filter>
<filter-name>AuthenFilter</filter-name>
<filter-class>AuthenFilter</filter-class>
<init-param>
<param-name>test-param</param-name>
<param-value>Initialization Paramter</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>LogFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>AuthenFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
Ordine applicazione filtri
L'ordine degli elementi di mappatura del filtro in web.xml determina l'ordine in cui il contenitore web applica il filtro al servlet o JSP. Per invertire l'ordine del filtro, è sufficiente invertire gli elementi di mappatura del filtro nel fileweb.xml file.
Ad esempio, l'esempio precedente applicherà prima LogFilter e poi AuthenFilter a qualsiasi servlet o JSP; il seguente esempio invertirà l'ordine -
<filter-mapping>
<filter-name>AuthenFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>LogFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>