Latest web development tutorials

Filtro JSP

filtri JSP e Servlet in tutte le classi Java.

I filtri possono intercetta in modo dinamico la richiesta e la risposta al fine di trasformare o utilizzare le informazioni contenute nella richiesta o di risposta.

Uno o più filtri possono essere collegati a un servlet o una Servlet. I filtri possono anche essere associate alle JavaServer Pages (JSP) i file e le pagine HTML.

I filtri sono disponibili per la classe di programmazione Java Servlet, è possibile raggiungere i seguenti obiettivi:

  • Prima di richiedere l'accesso alle risorse, client-back-end intercettare queste richieste.
  • Prima che il server invia la risposta al client per affrontare queste risposte.

In base alla specifica raccomandato dai vari tipi di filtri:

  • filtro di autenticazione (Filtri di autenticazione).
  • filtro di compressione dei dati (filtri di compressione dei dati).
  • Filtri di crittografia (Filtri crittografia).
  • Resource filtro eventi di trigger di accesso.
  • filtri di conversione Immagine (Filtri Conversione di immagini).
  • filtri di registrazione e di controllo (Registrazione e controllo filtri).
  • Filtro catena di tipo MIME (MIME Filtri-tipo di catena).
  • Filtro Labeled (Filtri creazione di token).
  • / Filtro XSL T (XSL / T Filtri), trasformando il contenuto XML.

Filtro descrittore di deployment (web.xml) in tag XML tramite la dichiarazione Web e quindi mappato al descrittore di deployment nome Servlet o l'URL modello dell'applicazione.

Quando il contenitore Web per avviare un'applicazione Web, sarà per voi nella dichiarazione descrittore di deployment per ogni filtro per creare un'istanza.

ordine di esecuzione Filter è coerente con l'ordine di disposizione nel file di configurazione web.xml, di solito la configurazione del filtro prima di tutto Servlet.

Metodo Servlet Filter

Il filtro è una classe Java che implementa l'interfaccia javax.servlet.Filter. Interfaccia javax.servlet.Filter definisce tre metodi:

序号方法 & 描述
1public void doFilter (ServletRequest, ServletResponse, FilterChain)
该方法完成实际的过滤操作,当客户端请求方法与过滤器设置匹配的URL时,Servlet容器将先调用过滤器的doFilter方法。FilterChain用户访问后续过滤器。
2public void init(FilterConfig filterConfig)
web 应用程序启动时,web 服务器将创建Filter 的实例对象,并调用其init方法,读取web.xml配置,完成对象的初始化功能,从而为后续的用户请求作好拦截的准备工作(filter对象只会创建一次,init方法也只会执行一次)。开发人员通过init方法的参数,可获得代表当前filter配置信息的FilterConfig对象。
3public void destroy()
Servlet容器在销毁过滤器实例前调用该方法,在该方法中释放Servlet过滤器占用的资源。

uso FilterConfig

metodo init di Filter fornisce un oggetto FilterConfig.

configurazione del file web.xml come segue:

<filter>
	<filter-name>LoginFilter</filter-name>
	<filter-class>com.w3big.test.LogFilter</filter-class>
	<init-param>
		<param-name>Site</param-name>
		<param-value>本教程</param-value>
	</init-param>
	</filter>

Utilizzare oggetto FilterConfig per ottenere i parametri nel metodo init:

public void  init(FilterConfig config) throws ServletException {
	// 获取初始化参数
	String site = config.getInitParameter("Site"); 
	// 输出初始化参数
	System.out.println("网站名称: " + site); 
}

esempio filtro JSP

I seguenti sono esempi di filtri Servlet, nome di output e indirizzo del sito web. Gli esempi servlet per offrirti una conoscenza di base del filtro, è possibile utilizzare lo stesso concetto di scrivere applicazioni di filtro più complesse:

//导入必需的 java 库
import javax.servlet.*;
import java.util.*;

//实现 Filter 类
public class LogFilter implements Filter  {
	public void  init(FilterConfig config) throws ServletException {
		// 获取初始化参数
		String site = config.getInitParameter("Site"); 

		// 输出初始化参数
		System.out.println("网站名称: " + site); 
	}
	public void  doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws java.io.IOException, ServletException {

		// 输出站点名称
		System.out.println("站点网址:http://www.w3big.com");

		// 把请求传回过滤链
		chain.doFilter(request,response);
	}
	public void destroy( ){
		/* 在 Filter 实例被 Web 容器从服务移除之前调用 */
	}
}

DisplayHeader.java codice del file è il seguente:

//导入必需的 java 库
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/DisplayHeader")

//扩展 HttpServlet 类
public class DisplayHeader extends HttpServlet {

	// 处理 GET 方法请求的方法
	public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
	{
		// 设置响应内容类型
		response.setContentType("text/html;charset=UTF-8");

		PrintWriter out = response.getWriter();
		String title = "HTTP Header 请求实例 - 本教程实例";
		String docType =
			"<!DOCTYPE html> \n";
			out.println(docType +
			"<html>\n" +
			"<head><meta charset=\"utf-8\"><title>" + title + "</title></head>\n"+
			"<body bgcolor=\"#f0f0f0\">\n" +
			"<h1 align=\"center\">" + title + "</h1>\n" +
			"<table width=\"100%\" border=\"1\" align=\"center\">\n" +
			"<tr bgcolor=\"#949494\">\n" +
			"<th>Header 名称</th><th>Header 值</th>\n"+
			"</tr>\n");

		Enumeration headerNames = request.getHeaderNames();

		while(headerNames.hasMoreElements()) {
			String paramName = (String)headerNames.nextElement();
			out.print("<tr><td>" + paramName + "</td>\n");
			String paramValue = request.getHeader(paramName);
			out.println("<td> " + paramValue + "</td></tr>\n");
		}
		out.println("</table>\n</body></html>");
	}
	// 处理 POST 方法请求的方法
	public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}
}

Web.xml alla mappatura del filtro Servlet (mappatura del filtro Servlet)

Definire filtri, quindi mappati ad un URL o servlet, che definiscono la Servlet, e quindi mappati ad un modello URL più o meno allo stesso modo. Creare la seguente voce per il tag del filtro nel file descrittore di distribuzioneweb.xml:

<?xml version="1.0" encoding="UTF-8"?>  
<web-app>  
<filter>
  <filter-name>LogFilter</filter-name>
  <filter-class>com.w3big.test.LogFilter</filter-class>
  <init-param>
    <param-name>Site</param-name>
    <param-value>本教程</param-value>
  </init-param>
</filter>
<filter-mapping>
  <filter-name>LogFilter</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>
<servlet>  
  <!-- 类名 -->  
  <servlet-name>DisplayHeader</servlet-name>  
  <!-- 所在的包 -->  
  <servlet-class>com.w3big.test.DisplayHeader</servlet-class>  
</servlet>  
<servlet-mapping>  
  <servlet-name>DisplayHeader</servlet-name>  
  <!-- 访问的网址 -->  
  <url-pattern>/TomcatTest/DisplayHeader</url-pattern>  
</servlet-mapping>  
</web-app>  

Il filtro si applica a tutti Servlet, perché abbiamo specificato nella configurazione/ *.Se si desidera applicare un filtro su un piccolo numero di Servlet, è possibile specificare un percorso servlet specifica.

Ora provate modo consueto per chiamare qualsiasi Servlet, vedrete i log del server Web generati. È inoltre possibile utilizzare il registratore per la registrazione Log4J sopra in un file separato.

Poi si visita questo indirizzo http esempio: // localhost: 8080 / TomcatTest / DisplayHeader, poi guarda l'output nella console, come segue:

Utilizzando una pluralità di filtri

Le applicazioni Web possono essere diversi filtri in base alla scopo specifico definito. Si supponga di aver definito due filtriAuthenFiltereLogFilter.È necessario creare una mappatura diversa descritto di seguito, e al di sopra del resto del processo è sostanzialmente la stessa spiegazione:

<Filter>
   <Filtro-name> LogFilter </ filter-name>
   <Filtro-class> com.w3big.test.LogFilter </ filter-class>
   <Init-param>
	  <Param-name> test-param </ param-name>
	  <Param-value> inizializzazione Parametro </ param-value>
   </ Init-param>
</ Filter>

<Filter>
   <Filtro-name> AuthenFilter </ filter-name>
   <Filtro-class> com.w3big.test.AuthenFilter </ filter-class>
   <Init-param>
	  <Param-name> test-param </ param-name>
	  <Param-value> inizializzazione Parametro </ param-value>
   </ Init-param>
</ Filter>

<Filter-mapping>
   <Filtro-name> LogFilter </ filter-name>
   <Url-pattern> / * </ url-pattern>
</ Filter-mapping>

<Filter-mapping>
   <Filtro-name> AuthenFilter </ filter-name>
   <Url-pattern> / * </ url-pattern>
</ Filter-mapping>

I filtri vengono applicati in sequenza

Ordine in elemento web.xml filter-mapping determina il contenitore Web per applicare filtri per l'ordine del Servlet. Per invertire l'ordine del filtro, è sufficiente invertire l'elemento filtrante-mapping nel file web.xml.

Ad esempio, l'esempio precedente sarà la prima LogFilter applicazione, quindi applicare AuthenFilter, ma i seguenti esempi invertire questo 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>

istruzioni di configurazione web.xml per ogni nodo

  • <filter> Specifica un filtro.
    • <filter-name> viene utilizzato per specificare un nome per il filtro, il contenuto dell'elemento non può essere vuoto.
    • <filter-class> elemento viene utilizzato per specificare il nome completo della classe del filtro.
    • <init-param> elemento viene utilizzato per specificare parametri di inizializzazione per il filtro, i suoi elementi figlio <param-name> specifica il nome del parametro, <param-value> valore specificato parametri.
    • Nel filtro, è possibile utilizzare FilterConfig oggetto interfaccia per accedere ai parametri di inizializzazione.
  • <filter-mapping> elemento viene utilizzato per impostare una risorsa filtro responsabile intercettati. Filtro intercetta una risorsa può essere specificato in due modi: il nome della richiesta percorso Servlet e l'accesso alle risorse
    • <filter-name> elemento secondario viene utilizzato per impostare il nome registrato del filtro. Il valore deve essere in <filter> dichiarazioni di elementi in nome del filtro attraverso
    • <url-pattern> impostare il filtro intercettato richiesta di traccia (filtro associato stile URL)
  • <servlet-name> Specifica il filtro ostruito nome Servlet.
  • <dispatcher> specificare il filtro di risorse intercettate sono chiamati container Servlet, che può essere REQUEST , INCLUDE , FORWARD e ERROR un default REQUEST . Gli utenti possono impostare più <dispatcher> sub-elemento viene utilizzato per specificare il filtro risorsa più modi per intercettare le chiamate.
  • <dispatcher> valore e il significato di sub-elementi che possono essere impostato
    • REQUEST : Quando l'utente l'accesso diretto alle pagine, contenitore Web chiamerà il filtro. Se il bersaglio è un metodo per accedere alla risorsa, allora il filtro non verrà chiamato da del RequestDispatcher include () o in avanti ().
    • INCLUDE : se la risorsa di destinazione si accede tramite del RequestDispatcher include (), allora il filtro verrà chiamato. Inoltre, non saranno chiamati filtri.
    • FORWARD : se la risorsa di destinazione si accede attraverso un RequestDispatcher metodo forward (), allora il filtro sarà chiamato, inoltre, non sarà chiamato il filtro.
    • ERROR : Se la risorsa di destinazione è attraverso il meccanismo di gestione delle eccezioni dichiarativa chiamato, allora il filtro verrà chiamato. Inoltre, il filtro non verrà chiamato.