Latest web development tutorials

JSP penyaring

JSP dan Servlet filter di semua kelas Java.

Filter secara dinamis dapat memotong permintaan dan respon untuk mengubah atau menggunakan informasi yang terdapat dalam permintaan atau respon.

Satu atau lebih filter dapat dilampirkan ke Servlet atau Servlet. Filter juga dapat melekat pada Pages JavaServer (JSP) file dan halaman HTML.

Filter yang tersedia untuk kelas pemrograman Java Servlet, Anda dapat mencapai tujuan sebagai berikut:

  • Sebelum meminta akses ke back-end sumber, klien mencegat permintaan ini.
  • Sebelum server akan mengirimkan respon kembali ke klien untuk menangani tanggapan ini.

Sesuai dengan spesifikasi yang direkomendasikan oleh berbagai jenis filter:

  • Otentikasi Filter (otentikasi Filter).
  • Filter kompresi data (Filter kompresi data).
  • Filter enkripsi (Encryption Filter).
  • Sumber daya Access memicu event filter.
  • filter gambar konversi (Conversion gambar Filter).
  • Logging dan audit filter (Logging dan Audit Filter).
  • rantai filter MIME-TYPE (MIME-TYPE Rantai Filter).
  • Berlabel Filter (tokenizing Filter).
  • XSL / T Filter (XSL / Filter T), mengubah konten XML.

Filter descriptor deployment (web.xml) dalam tag XML melalui pernyataan Web, dan kemudian dipetakan ke deployment descriptor nama Servlet atau URL pola aplikasi Anda.

Ketika wadah Web untuk memulai aplikasi Web, itu akan untuk Anda dalam deklarasi deployment descriptor untuk setiap filter untuk membuat sebuah contoh.

perintah eksekusi Filter konsisten dengan urutan dari pengaturan dalam file konfigurasi web.xml, biasanya konfigurasi Filter sebelumnya Servlet.

Servlet Filter Metode

filter adalah kelas Java yang mengimplementasikan javax.servlet.Filter antarmuka. javax.servlet.Filter antarmuka mendefinisikan tiga metode:

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

penggunaan FilterConfig

Metode init Filter menyediakan objek FilterConfig.

konfigurasi file web.xml sebagai berikut:

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

Gunakan FilterConfig objek untuk mendapatkan parameter dalam metode init:

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

JSP Filter contoh

Berikut ini adalah contoh dari filter Servlet, nama output dan alamat website. Contoh Servlet untuk memberikan pemahaman dasar dari filter, Anda dapat menggunakan konsep yang sama untuk menulis aplikasi filter yang lebih kompleks:

//导入必需的 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 file kode adalah sebagai berikut:

//导入必需的 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 pemetaan Servlet Filter (Servlet Filter Mapping)

Tentukan filter, kemudian dipetakan ke URL atau Servlet, yang menentukan Servlet, dan kemudian dipetakan ke pola URL dengan cara yang sama. Buat entri berikut untuk tag filter dalamweb.xml penyebaran file descriptor:

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

filter berlaku untuk semua Servlet, karena kita ditentukan dalam konfigurasi/ *.Jika Anda ingin menerapkan filter pada sejumlah kecil Servlet, Anda dapat menentukan path Servlet tertentu.

Sekarang coba dengan cara biasa untuk memanggil Servlet, Anda akan melihat log server Web yang dihasilkan. Anda juga dapat menggunakan perekam untuk Log4J penebangan di atas untuk file terpisah.

Kita mengunjungi contoh ini alamat http: // localhost: 8080 / TomcatTest / DisplayHeader, kemudian melihat output di konsol, sebagai berikut:

Menggunakan sejumlah saringan

aplikasi web dapat beberapa filter yang berbeda berdasarkan pada tujuan tertentu yang ditetapkan. Misalkan Anda telah menetapkan dua filterAuthenFilterdanLogFilter.Anda perlu membuat pemetaan yang berbeda dijelaskan di bawah, dan atas sisa proses secara substansial penjelasan yang sama:

<Filter>
   <Filter-nama> LogFilter </ filter-name>
   <Filter kelas> com.w3big.test.LogFilter </ filter-kelas>
   <Init-param>
	  <Param-nama> test-param </ param-name>
	  <Param-value> Inisialisasi Penyempitan </ param-value>
   </ Init-param>
</ Filter>

<Filter>
   <Filter-nama> AuthenFilter </ filter-name>
   <Filter kelas> com.w3big.test.AuthenFilter </ filter-kelas>
   <Init-param>
	  <Param-nama> test-param </ param-name>
	  <Param-value> Inisialisasi Penyempitan </ param-value>
   </ Init-param>
</ Filter>

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

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

Filter diterapkan secara berurutan

Urutan elemen web.xml filter-mapping menentukan wadah Web untuk menerapkan filter untuk urutan Servlet. Untuk membalik urutan filter, Anda hanya perlu untuk membalikkan elemen filter-mapping dalam file web.xml.

Misalnya, contoh di atas akan menjadi LogFilter aplikasi pertama, kemudian menerapkan AuthenFilter, tapi contoh berikut akan membalikkan urutan ini:

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

petunjuk konfigurasi web.xml untuk setiap node

  • <filter> Menentukan filter.
    • <filter-name> digunakan untuk menentukan nama untuk filter, isi dari elemen tidak boleh kosong.
    • <filter-class> elemen digunakan untuk menentukan nama kelas yang memenuhi syarat dari filter.
    • <init-param> elemen digunakan untuk menentukan parameter inisialisasi untuk filter, elemen anaknya <param-name> menentukan nama parameter, <param-value> nilai yang ditentukan parameter.
    • Dalam filter, Anda dapat menggunakan FilterConfig objek antarmuka untuk mengakses parameter inisialisasi.
  • <filter-mapping> elemen digunakan untuk mengatur sumber daya Filter bertanggung jawab dicegat. Filter mencegat sumber daya dapat ditentukan dengan dua cara: nama permintaan path Servlet dan akses sumber daya
    • <filter-name> elemen anak digunakan untuk menetapkan nama terdaftar dari filter. Nilai harus di <filter> deklarasi elemen dalam nama filter melalui
    • <url-pattern> mengatur filter dicegat permintaan path (filter terkait gaya URL)
  • <servlet-name> Menentukan filter diblokir nama Servlet.
  • <dispatcher> tentukan filter sumber dicegat disebut kontainer Servlet, yang dapat REQUEST , INCLUDE , FORWARD dan ERROR satu bawaan REQUEST . Pengguna dapat mengatur beberapa <dispatcher> sub-elemen yang digunakan untuk menentukan sumber daya Filter beberapa cara untuk mencegat panggilan.
  • <dispatcher> nilai dan pentingnya sub-elemen yang dapat diatur
    • REQUEST : Ketika pengguna akses langsung ke halaman, kontainer Web akan memanggil filter. Jika target adalah metode untuk mengakses sumber daya, maka filter tidak akan dipanggil oleh RequestDispatcher termasuk () atau maju ().
    • INCLUDE : Jika sumber daya target diakses melalui RequestDispatcher ini termasuk (), maka filter akan dipanggil. Selain itu, filter tidak akan dipanggil.
    • FORWARD : Jika sumber daya target diakses melalui RequestDispatcher maju () metode, maka filter akan disebut, di samping itu, filter tidak akan disebut.
    • ERROR : Jika sumber daya sasaran adalah melalui mekanisme penanganan eksepsi deklaratif disebut, maka filter akan dipanggil. Selain itu, filter tidak akan dipanggil.