Latest web development tutorials

Filtr JSP

Filtry Servlet JSP i we wszystkich klasach Javy.

Filtry mogą dynamicznie przechwytuje żądania i odpowiedzi w celu przekształcenia lub wykorzystania informacji zawartych we wniosku lub odpowiedzi.

Jeden lub więcej filtrów może być dołączony do serwletu lub serwletu. Filtry mogą być również przypisane do stron JavaServer (JSP) plików i stron HTML.

Filtry są dostępne dla klasy programowania Java Servlet, można osiągnąć następujące cele:

  • Przed żądające dostępu do zasobów back-end, klient osią tych żądań.
  • Przed serwer wysyła odpowiedź z powrotem do klienta, aby radzić sobie z tymi odpowiedziami.

Według opisu zalecanego przez różne rodzaje filtrów:

  • Filtr Authentication (Uwierzytelnianie Filtry).
  • Filtr kompresji danych (Filtry kompresji danych).
  • Filtry Encryption (szyfrowanie) Filters.
  • Dostęp do zasobów filtr zdarzeń spust.
  • Filtry konwersji obrazu (Filtry konwersji obrazu).
  • Filtry pozyskujących i audytu (pozyskiwanie i audytu filtrów).
  • Filtr łańcuchowy typu MIME (Filtry typu MIME łańcuchowe).
  • Oznaczone filtra (tokenizing Filtry).
  • XSL / filtr T (XSL / T Filtry), przekształcając zawartość XML.

Filtr deskryptora wdrażania (web.xml) w znaczników XML za pośrednictwem rachunku internetowego, a następnie przyporządkowuje się do danej aplikacji deskryptor rozmieszczenia nazwa Servlet lub URL wzorzec.

Gdy pojemnik Web, aby rozpocząć aplikację internetową, to będzie dla Ciebie w deklaracji deskryptora wdrożenia dla każdego filtra do utworzenia instancji.

kolejność wykonywania Filtr jest zgodny z porządkiem układu w pliku konfiguracyjnym web.xml, zwykle konfiguracji filtr przed wszystkimi Servlet.

Metoda Servlet Filter

Filtr jest klasa Java, która implementuje interfejs javax.servlet.Filter. Interfejs javax.servlet.Filter definiuje trzy sposoby:

序号方法 & 描述
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过滤器占用的资源。

FilterConfig wykorzystanie

Metoda startowych filtra stanowi przedmiot FilterConfig.

Plik konfiguracyjny web.xml w następujący sposób:

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

Użyj obiektu FilterConfig uzyskać parametry w metodzie inicjującego:

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

JSP instancja filtra

Poniżej przedstawiono przykłady filtrów Servlet, nazwy wyjścia i adres strony internetowej. Przykłady Servlet daje podstawową wiedzę na temat filtra, można użyć tego samego pojęcia pisać bardziej złożonych aplikacji filtrujących:

//导入必需的 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 kod pliku jest następująca:

//导入必需的 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 odwzorowanie filtrów serwletów (Servlet Filter Mapowanie)

Definiowanie filtrów, a następnie mapowane do adresu URL lub serwletu, które definiują serwletu, a następnie przyporządkowuje się do wzorca URL podobny sposób. Utwórz następujący wpis dla tagu filtru w pliku deskryptoraweb.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>  

Filtr ma zastosowanie do wszystkich Servlet, ponieważ określony w konfiguracji/ *.Jeśli chcesz zastosować filtr na małej liczbie Servlet, można określić konkretną ścieżkę serwletu.

Teraz spróbuj zwykły sposób, aby wywołać dowolną serwletu, widać wygenerowane logi serwera WWW. Można również skorzystać z nagrywarki do powyższej rejestrowania log4j do osobnego pliku.

Następnie odwiedzić ten adres instancji http: // localhost: 8080 / TomcatTest / DisplayHeader, a następnie spójrz na wyjściu w konsoli w następujący sposób:

Za pomocą wielu filtrów

Aplikacje internetowe może być kilka różnych filtrów opartych na konkretny cel zdefiniowany. Załóżmy, że zostały zdefiniowane dwa filtryAuthenFilteriLogFilter.Trzeba tworzyć różne mapowania opisanym poniżej i powyżej pozostałej części procesu jest w zasadzie takie samo wyjaśnienie:

<Filtr>
   <Filtr-name> LogFilter </ filter-name>
   <Filtr-class> com.w3big.test.LogFilter </ filter-class>
   <Init-param>
	  <Param name> test-param </ param-name>
	  <Param-value> Inicjalizacja Paramter </ param-value>
   </ Init-param>
</ Filtr>

<Filtr>
   <Filtr-name> AuthenFilter </ filter-name>
   <Filtr-class> com.w3big.test.AuthenFilter </ filter-class>
   <Init-param>
	  <Param name> test-param </ param-name>
	  <Param-value> Inicjalizacja Paramter </ param-value>
   </ Init-param>
</ Filtr>

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

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

Filtry są stosowane kolejno

Zamówienie w elemencie web.xml filter-mapping określa pojemnik internetowej, aby zastosować filtry do porządku Servlet. Aby odwrócić kolejność filtra, wystarczy odwrócić element filtra odwzorowania w pliku web.xml.

Na przykład, w powyższym przykładzie jest pierwszym LogFilter aplikacji, a następnie stosuje się AuthenFilter, ale następujące przykłady odwrotnej kolejności:

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

web.xml instrukcje konfiguracyjne dla każdego węzła

  • <filter> Określa filtr.
    • <filter-name> jest używany do określenia nazwę filtru, zawartość elementu nie może być pusta.
    • <filter-class> element jest używany do określenia pełną nazwę klasy filtra.
    • <init-param> element jest używany do określenia parametrów inicjalizacji filtru, jego elementy podrzędne <param-name> określa nazwę parametru, <param-value> parametrów wartość określona.
    • W filtrze można użyć FilterConfig interfejsu obiekt aby uzyskać dostęp do parametrów inicjalizacji.
  • <filter-mapping> element jest używany do ustawiania zasobem Filtr odpowiedzialna przechwycone. Filtr przechwytywać zasobu można określić na dwa sposoby: nazwy serwletu żądanie trasy oraz dostęp do zasobów
    • <filter-name> Element podrzędny służy do ustawiania zarejestrowaną nazwę filtra. Wartość musi być w <filter> deklaracji elementem nazwą filtra poprzez
    • <url-pattern> ustawić filtr przechwycone ścieżka wniosek (filtr URL związany style)
  • <servlet-name> Określa filtr zablokowane nazwę serwletu.
  • <dispatcher> określić filtr przechwycone zasoby nazywane są pojemniki Servlet, który może być REQUEST , INCLUDE , FORWARD i ERROR Uchybienia REQUEST . Użytkownicy mogą skonfigurować wielokrotność <dispatcher> sub-element jest używany do określenia filtra zasobem wielu sposobów na przechwytywanie połączeń.
  • <dispatcher> wartość i znaczenie elementów podrzędnych, które mogą być ustawione
    • REQUEST : Przy bezpośrednim dostępem użytkowników do stron, kontener WWW wezwie filtr. Jeśli cel jest metoda, aby uzyskać dostęp do zasobu, a filtr nie zostanie zwołane przez RequestDispatcher należą () lub do przodu ().
    • INCLUDE : Jeśli zasób docelowy jest dostępny poprzez RequestDispatcher należą (), a następnie filtr zostanie wywołana. Ponadto filtry nie zostanie wywołana.
    • FORWARD : jeżeli zasób docelowy jest dostępny poprzez RequestDispatcher przodu () metoda, filtr będzie nazywany ponadto filtr nie będzie wywoływana.
    • ERROR : Jeśli zasób docelowy jest za pośrednictwem mechanizmu obsługi wyjątków deklaratywnej nazwie, a następnie filtr zostanie wywołana. Dodatkowo filtr nie zostanie wywołana.