Latest web development tutorials

filtro JSP

filtros JSP e servlet em todas as classes Java.

Os filtros podem intercepta dinamicamente a solicitação e resposta, a fim de transformar ou utilizar as informações contidas no pedido ou resposta.

Um ou mais filtros podem ser ligados a um servlet ou um servlet. Os filtros também podem ser anexados aos JavaServer Pages (JSP) arquivos e páginas HTML.

Filtros estão disponíveis para a classe de programação Java Servlet, você pode atingir os seguintes objectivos:

  • Antes de solicitar o acesso ao back-end recursos, cliente interceptar essas solicitações.
  • Antes que o servidor envia a resposta de volta ao cliente para lidar com essas respostas.

De acordo com a especificação recomendada pelos diversos tipos de filtros:

  • filtro de autenticação (Filtros de autenticação).
  • Filtro de compressão de dados (compressão de dados Filtros).
  • Filtros de criptografia (criptografia Filtros).
  • Resource gatilho Acesso filtro de eventos.
  • filtros de conversão de imagem (filtros de conversão de imagem).
  • filtros de registro e auditoria (registro e auditoria Filtros).
  • Filtro cadeia MIME-TYPE (MIME cadeia tipo de Filtros).
  • Filtro marcado (tokenizing Filtros).
  • XSL filtro / T (XSL / T Filtros), transformando o conteúdo XML.

Filtrar descritor de implementação (web.xml) em tags XML através da declaração da Web, e depois mapeada para descritor de implementação nome Servlet ou URL padrão do aplicativo.

Quando o recipiente Web para iniciar um aplicativo Web, será para você na declaração descritor de implementação para cada filtro para criar uma instância.

ordem de execução do filtro é consistente com a ordem de arranjo no arquivo de configuração web.xml, geralmente a configuração do filtro antes de tudo Servlet.

Método Servlet Filtro

O filtro é uma classe Java que implementa a interface javax.servlet.Filter. interface de javax.servlet.Filter define três 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

método init do filtro fornece um objeto FilterConfig.

configuração de arquivo web.xml da seguinte forma:

<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 FilterConfig objeto para obter os parâmetros do método init:

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

instância de filtro JSP

Os seguintes são exemplos de filtros servlet, nome de saída e endereço do site. Os exemplos servlet para dar-lhe uma compreensão básica do filtro, você pode usar o mesmo conceito para escrever aplicações de filtros mais complexos:

//导入必需的 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 arquivo é o seguinte:

//导入必需的 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 o mapeamento do filtro Servlet (mapeamento do filtro Servlet)

Definir filtros, então mapeados para um URL ou Servlet, que definem o Servlet, e depois mapeados para um padrão de URL da mesma maneira. Crie a seguinte entrada para a marca de filtro noweb.xml arquivo descritor de implementação:

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

O filtro se aplica a todos Servlet, porque nós especificado na configuração/ *.Se você deseja aplicar um filtro em um pequeno número de Servlet, você pode especificar um caminho Servlet específico.

Agora tente da maneira usual para chamar qualquer Servlet, você vai ver os logs do servidor Web gerados. Você também pode usar o gravador para o log Log4J acima para um arquivo separado.

Em seguida, visite este endereço http exemplo: // localhost: 8080 / TomcatTest / DisplayHeader, em seguida, olhar para a saída no console, como segue:

Usando uma pluralidade de filtros

aplicações web pode ser de vários filtros diferentes com base no objectivo específico definido. Suponha que você tenha definido dois filtrosAuthenFiltereLogFilter.É necessário criar um mapeamento diferente, descrita abaixo, e por cima do resto do processo é substancialmente o mesmo explicação:

<Filter>
   <Filter-name> LogFilter </ filter-name>
   <Filter-class> com.w3big.test.LogFilter </ filter-class>
   <Init-param>
	  <Param-name> test-param </ param-name>
	  <Param-value> Inicialização paramter </ param-value>
   </ Init-param>
</ Filter>

<Filter>
   <Filter-name> AuthenFilter </ filter-name>
   <Filter-class> com.w3big.test.AuthenFilter </ filter-class>
   <Init-param>
	  <Param-name> test-param </ param-name>
	  <Param-value> Inicialização 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>

Os filtros são aplicados sequencialmente

Ordem no elemento web.xml filter-mapping determina o contêiner da Web para aplicar filtros para a ordem do Servlet. Para inverter a ordem do filtro, você só precisa inverter o elemento do filtro de mapeamento no arquivo web.xml.

Por exemplo, o exemplo acima será a primeira LogFilter aplicação, em seguida, aplicar AuthenFilter, mas os exemplos seguintes irão reverter esta ordem:

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

instruções de configuração web.xml para cada nó

  • <filter> Especifica um filtro.
    • <filter-name> é usado para especificar um nome para o filtro, o teor do elemento não pode estar vazio.
    • <filter-class> elemento é usado para especificar o nome completo da classe do filtro.
    • <init-param> elemento é usado para especificar parâmetros de inicialização para o filtro, seus elementos filho de <param-name> especifica o nome do parâmetro, <param-value> parâmetros de valor especificado.
    • No filtro, você pode usar FilterConfig objeto de interface para acessar os parâmetros de inicialização.
  • <filter-mapping> elemento é usado para definir um recurso Filtro responsável interceptado. Filtro interceptar um recurso pode ser especificado de duas maneiras: o nome Servlet solicitação de caminho e de acesso a recursos
    • <filter-name> elemento filho é usado para definir o nome registrado do filtro. O valor deve estar no <filter> declarações de elementos no nome do filtro através
    • <url-pattern> conjunto de filtros interceptado caminho pedido (filtro de estilo URL associado)
  • <servlet-name> Especifica o filtro bloqueado nome Servlet.
  • <dispatcher> especificar o filtro de recursos interceptadas são chamados recipientes Servlet, que pode ser REQUEST , INCLUDE , FORWARD e ERROR um padrão REQUEST . Os usuários podem configurar múltiplas <dispatcher> sub-elemento é usado para especificar o filtro de recursos várias maneiras de interceptar chamadas.
  • <dispatcher> valor e significado de sub-elementos que podem ser definidas
    • REQUEST : Quando o usuário acesso direto às páginas, recipiente Web irá chamar o filtro. Se o alvo é um método para acessar o recurso, em seguida, o filtro não será chamado pelo de RequestDispatcher include () ou para frente ().
    • INCLUDE : Se o recurso de destino é acessado através do RequestDispatcher include (), então o filtro deve ser chamado. Além disso, os filtros não será chamado.
    • FORWARD : Se o recurso de destino é acessado através de um RequestDispatcher forward () método, então o filtro deve ser chamado, além disso, o filtro não será chamado.
    • ERROR : Se o recurso de destino é através do mecanismo de tratamento de exceção declarativa chamado, então o filtro deve ser chamado. Além disso, o filtro não será chamado.