Latest web development tutorials

filtro JSP

Los filtros JSP y Servlets son clases Java.

Los filtros se intercepta de forma dinámica la solicitud y la respuesta con el fin de transformar o usar la información contenida en la petición o respuesta.

Uno o más filtros pueden estar unidos a un Servlet o un Servlet. Los filtros también se pueden unir a las Java Server Pages (JSP) y los archivos de páginas HTML.

Los filtros están disponibles para la clase de programación Java Servlet, puede alcanzar los siguientes objetivos:

  • Antes de solicitar el acceso a los servicios de fondo, los recursos de clientes, estas solicitudes de interceptación.
  • Antes de que el servidor envía la respuesta de vuelta al cliente para hacer frente a estas respuestas.

De acuerdo con la especificación recomendada por los diferentes tipos de filtros:

  • filtro de autenticación (Authentication Filtros).
  • filtro de compresión de datos (compresión de datos Filtros).
  • Filtros de cifrado (cifrado filtros).
  • Recursos filtro de evento de disparo de Acceso.
  • filtros de conversión de imagen (Conversión de imágenes filtros).
  • filtros de registro y auditoría de registro y auditoría (filtros).
  • filtro de cadena de tipo MIME (MIME del tipo de cadena Filtros).
  • filtro de marcado (tokenizing Filtros).
  • XSL / filtro de T (T / XSL Filtros), la transformación de contenido XML.

Filtro descriptor de despliegue (web.xml) en las etiquetas XML a través de la cuenta de Web y, a continuación mapeado en el descriptor de despliegue de servlets nombre o URL patrón de la aplicación.

Cuando el contenedor Web para iniciar una aplicación web, será para usted en la declaración de descriptor de despliegue para cada filtro para crear una instancia.

orden de ejecución de filtro es consistente con el orden de disposición en el archivo de configuración web.xml, por lo general la configuración del filtro antes de que todo Servlet.

Método servlet de filtro

El filtro es una clase Java que implementa la interfaz javax.servlet.Filter. javax.servlet.Filter interfaz define tres métodos:

序号方法 & 描述
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

el método init del filtro proporciona un objeto FilterConfig.

la configuración del archivo web.xml de la siguiente manera:

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

Use objeto FilterConfig para obtener los parámetros en el método init:

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

instancia de filtro JSP

Los siguientes son ejemplos de filtros de servlet, nombre de la producción y dirección del sitio web. Los ejemplos de servlet para darle una comprensión básica del filtro, se puede utilizar el mismo concepto para escribir aplicaciones de filtros más complejos:

//导入必需的 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 código de archivo es la siguiente:

//导入必需的 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 la asignación del filtro de servlet (Mapeo de filtro de servlet)

Definir filtros, entonces mapeados a una URL o un servlet, que definen el servlet, y luego asignadas a un patrón de URL de la misma manera. Crea la siguiente entrada para la etiqueta de filtro en el ficheroweb.xml descriptor de despliegue:

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

El filtro se aplica a todos los servlet, porque especificamos en la configuración/ *.Si desea aplicar un filtro en un pequeño número de servlet, se puede especificar una ruta de servlet específico.

Ahora trata de la manera habitual para llamar a cualquier servlet, podrás ver los registros del servidor web generadas. También puede utilizar la grabadora a la tala Log4J anterior en un archivo separado.

A continuación se visita esta dirección ejemplo http: // localhost: 8080 / TomcatTest / DisplayHeader, a continuación, busque en la salida de la consola, de la siguiente manera:

El uso de una pluralidad de filtros

Las aplicaciones web pueden ser de varios filtros diferentes en función de la finalidad específica definida. Supongamos que usted ha definido dos filtrosAuthenFilteryLogFilter.Es necesario crear un mapeo diferente descrita más adelante, y por encima del resto del proceso es sustancialmente la misma explicación:

<Filtro>
   <Filter-name> LogFilter </ filter-name>
   <Clase Filtro> com.w3big.test.LogFilter </ filtro de clase>
   <Init-param>
	  <Param-name> test-param </ param-name>
	  <Param-value> de inicialización Parámetro </ param-value>
   </ Init-param>
</ Filtro>

<Filtro>
   <Filter-name> AuthenFilter </ filter-name>
   <Clase Filtro> com.w3big.test.AuthenFilter </ filtro de clase>
   <Init-param>
	  <Param-name> test-param </ param-name>
	  <Param-value> de inicialización Parámetro </ param-value>
   </ Init-param>
</ Filtro>

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

Los filtros se aplican de forma secuencial

Orden en web.xml elemento filter-mapping determina el contenedor Web para aplicar filtros a la orden del servlet. Para invertir el orden del filtro, sólo es necesario para revertir el elemento filter-mapping en el archivo web.xml.

Por ejemplo, el ejemplo anterior será la primera LogFilter aplicación, a continuación, aplicar AuthenFilter, pero los siguientes ejemplos invertir este orden:

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

instrucciones de configuración web.xml para cada nodo

  • <filter> Especifica un filtro.
    • <filter-name> se utiliza para especificar un nombre para el filtro, el contenido del elemento no puede estar vacío.
    • <filter-class> elemento se utiliza para especificar el nombre de clase completo del filtro.
    • <init-param> elemento se utiliza para especificar los parámetros de inicialización para el filtro, sus elementos secundarios <param-name> especifica el nombre del parámetro, <param-value> parámetros de valor especificado.
    • En el filtro, puede utilizar FilterConfig objeto de interfaz para acceder a los parámetros de inicialización.
  • <filter-mapping> elemento se utiliza para establecer un recurso Filtro responsable interceptado. Filtro de intercepción un recurso se puede especificar de dos maneras: el nombre de petición de ruta Servlets y acceso a los recursos
    • <filter-name> elemento secundario se utiliza para establecer el nombre registrado del filtro. El valor debe estar en los <filter> declaraciones de elementos en el nombre del filtro a través
    • <url-pattern> conjunto de filtros interceptado ruta de solicitud (filtro de estilo URL asociada)
  • <servlet-name> Especifica el filtro bloqueado nombre de servlet.
  • <dispatcher> especificar el filtro de recursos interceptados se denominan contenedores de Servlets, que puede ser REQUEST , INCLUDE , FORWARD y ERROR uno por defecto REQUEST . Los usuarios pueden configurar múltiples <dispatcher> sub-elemento se utiliza para especificar el filtro de recursos múltiples maneras para interceptar llamadas.
  • <dispatcher> valor y la importancia de subelementos que se puede establecer
    • REQUEST : Cuando el usuario acceso directo a las páginas, contenedor Web llamará al filtro. Si el destino es un método para acceder al recurso, entonces el filtro no será anunciado por include () o el avance de la RequestDispatcher ().
    • INCLUDE : Si se accede al recurso de destino a través de la RequestDispatcher include (), entonces el filtro será llamado. Además, no serán llamados los filtros.
    • FORWARD : Si se accede al recurso de destino a través de una RequestDispatcher método forward (), entonces el filtro se llama, además, el filtro no será anunciado.
    • ERROR : Si el recurso se encuentra a través del mecanismo de manejo de excepciones declarativa llamada, entonces el filtro será llamado. Además, no se llamará el filtro.