Latest web development tutorials

ตัวกรองการเขียน Servlet

ฟิลเตอร์ Servlet สามารถแบบไดนามิกดักคำขอและการตอบสนองในการสั่งซื้อที่จะเปลี่ยนหรือใช้ข้อมูลที่มีอยู่ในการร้องขอหรือการตอบสนอง

หนึ่งหรือมากกว่าฟิลเตอร์ Servlet สามารถแนบมากับ Servlet หรือเซิร์ฟเล็ต ฟิลเตอร์ Servlet ยังสามารถแนบมากับเจเอสพี (JSP) ไฟล์และหน้าเว็บ HTML โทรฟิลเตอร์ Servlet เพิ่มเติมทั้งหมดก่อนที่จะเรียก Servlet

ฟิลเตอร์ Servlet ที่ใช้ได้สำหรับการเขียนโปรแกรม Java Servlet ระดับคุณสามารถบรรลุวัตถุประสงค์ดังต่อไปนี้:

  • ก่อนที่จะขอการเข้าถึงสิ้นกลับทรัพยากรตัดลูกค้าร้องขอเหล่านี้
  • ก่อนเซิร์ฟเวอร์จะส่งการตอบสนองกลับไปยังลูกค้าในการจัดการกับคำตอบเหล่านี้

ตามข้อกำหนดที่แนะนำโดยประเภทต่างๆของฟิลเตอร์:

  • รับรองความถูกต้องกรอง (ตัวกรองการตรวจสอบ)
  • ตัวกรองการบีบอัดข้อมูล (ข้อมูลกรองบีบอัด)
  • ตัวกรองการเข้ารหัส (ตัวกรองการเข้ารหัส)
  • ทรัพยากรทริกเกอร์การเข้าถึงตัวกรองเหตุการณ์
  • ฟิลเตอร์แปลงไฟล์ภาพ (ตัวกรองการแปลงภาพ)
  • การเข้าสู่ระบบและการตรวจสอบฟิลเตอร์ (เข้าสู่ระบบและการตรวจสอบตัวกรอง)
  • ประเภท Mime กรองโซ่ (ประเภท Mime กรองโซ่)
  • ติดป้ายชื่อตัวกรอง (กรอง tokenizing)
  • XSL / T กรอง (XSL / T กรอง) เปลี่ยนเนื้อหา XML

กรองคำอธิบายถึงการนำ (web.xml) ในแท็ก XML ผ่านทางคำสั่งเว็บและแมปไปปรับใช้ชื่อบ่ง Servlet หรือ URL โปรแกรมประยุกต์ของคุณรูปแบบแล้ว

เมื่อเว็บคอนเทนเนอร์เพื่อเริ่มต้นโปรแกรมประยุกต์บนเว็บก็จะให้คุณในการประกาศการใช้งานบ่งชี้สำหรับแต่ละตัวกรองเพื่อสร้างอินสแตนซ์

เพื่อดำเนินการกรองมีความสอดคล้องกับคำสั่งของการจัดในแฟ้มการกำหนด web.xml ปกติการตั้งค่าตัวกรองก่อน Servlet ทั้งหมด

วิธี Servlet กรอง

ตัวกรองเป็นชั้น Java ที่ดำเนินการติดต่อ javax.servlet.Filter อินเตอร์เฟซ javax.servlet.Filter กำหนดสามวิธี:

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

วิธี init กรองให้วัตถุ FilterConfig

การตั้งค่าไฟล์ web.xml ดังนี้

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

ใช้วัตถุ FilterConfig ที่จะได้รับพารามิเตอร์ในวิธี init นี้:

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

เช่นกรอง Servlet

ตัวอย่างต่อไปนี้ของตัวกรอง Servlet ชื่อส่งออกและที่อยู่ของเว็บไซต์ ตัวอย่าง Servlet เพื่อให้คุณมีความเข้าใจพื้นฐานของตัวกรองคุณสามารถใช้แนวคิดเดียวกันในการเขียนโปรแกรมกรองที่ซับซ้อนมากขึ้น:

package com.w3big.test;

//导入必需的 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 เป็นตัวอย่าง:

//导入必需的 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 ทำแผนที่กรองเซิร์ฟเล็ต (กรองแมป Servlet)

กำหนดตัวกรองแมปแล้ว URL หรือ Servlet ซึ่งกำหนด Servlet และแมปไปยังรูปแบบ URL ที่ทางเดียวกันมากแล้ว สร้างรายการต่อไปนี้สำหรับแท็กตัวกรองในการใช้งานweb.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>  

ตัวกรองนำไปใช้กับ Servlet ทั้งหมดเพราะเราระบุในการกำหนดค่า/ *หากคุณต้องการใช้ตัวกรองในจำนวนเล็ก ๆ ของ Servlet คุณสามารถระบุเส้นทาง Servlet ที่เฉพาะเจาะจง

ตอนนี้พยายามลักษณะปกติจะเรียก Servlet ใด ๆ คุณจะเห็นที่สร้างเว็บเซิร์ฟเวอร์ล็อก นอกจากนี้คุณยังสามารถใช้บันทึกการเข้าสู่ระบบ Log4J ด้านบนเพื่อแยกไฟล์

ต่อไปเราเยี่ยมชม http อยู่เช่น: // localhost: 8080 / TomcatTest / DisplayHeader, แล้วมองไปที่การส่งออกในคอนโซลดังต่อไปนี้:

ส่วนใหญ่ของการใช้ตัวกรอง

การใช้งานเว็บสามารถเป็นฟิลเตอร์ที่แตกต่างกันขึ้นอยู่กับวัตถุประสงค์เฉพาะที่กำหนดไว้ สมมติว่าคุณได้กำหนดไว้สองตัวกรองAuthenFilterและLogFilterคุณจำเป็นต้องสร้างการทำแผนที่ที่แตกต่างกันอธิบายไว้ด้านล่างและด้านบนส่วนที่เหลือของกระบวนการเป็นอย่างมากคำอธิบายที่เดียวกัน

<กรอง>
   <กรองชื่อ> LogFilter </ กรองชื่อ>
   <กรองชั้น> com.w3big.test.LogFilter </ กรองชั้น>
   <Init-พระราม>
	  <พารามิเตอร์ชื่อ> ทดสอบพระราม </ พระรามชื่อ>
	  <พารามิเตอร์ค่า> การเริ่มต้นพารามิเตอร์ </ พระราม-value>
   </ Init-พระราม>
</ กรอง>

<กรอง>
   <กรองชื่อ> AuthenFilter </ กรองชื่อ>
   <กรองชั้น> com.w3big.test.AuthenFilter </ กรองชั้น>
   <Init-พระราม>
	  <พารามิเตอร์ชื่อ> ทดสอบพระราม </ พระรามชื่อ>
	  <พารามิเตอร์ค่า> การเริ่มต้นพารามิเตอร์ </ พระราม-value>
   </ Init-พระราม>
</ กรอง>

<กรองการทำแผนที่>
   <กรองชื่อ> LogFilter </ กรองชื่อ>
   <url รูปแบบ> / * </ url รูปแบบ>
</ กรองการทำแผนที่>

<กรองการทำแผนที่>
   <กรองชื่อ> AuthenFilter </ กรองชื่อ>
   <url รูปแบบ> / * </ url รูปแบบ>
</ กรองการทำแผนที่>

ฟิลเตอร์ถูกนำมาใช้ตามลำดับ

การสั่งซื้อสินค้าในองค์ประกอบของ web.xml กรองการทำแผนที่กำหนดภาชนะเว็บเพื่อใช้ตัวกรองคำสั่งของ Servlet ที่ ที่จะกลับคำสั่งของตัวกรองที่คุณจะต้องย้อนกลับไส้กรองทำแผนที่ในไฟล์ web.xml

ยกตัวอย่างเช่นตัวอย่างข้างต้นจะเป็น LogFilter โปรแกรมแรกแล้วใช้ AuthenFilter แต่ตัวอย่างต่อไปนี้จะกลับคำสั่งนี้:

<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 สำหรับแต่ละโหนด

  • <filter> ระบุตัวกรอง
    • <filter-name> จะใช้ในการระบุชื่อสำหรับตัวกรองเนื้อหาขององค์ประกอบต้องไม่ว่างเปล่า
    • <filter-class> องค์ประกอบที่จะใช้ในการระบุชื่อชั้นที่มีคุณสมบัติครบถ้วนของตัวกรอง
    • <init-param> องค์ประกอบที่จะใช้ในการระบุค่าเริ่มต้นสำหรับตัวกรอง, องค์ประกอบของเด็ก <param-name> ระบุชื่อของพารามิเตอร์ที่ <param-value> ค่าที่ระบุพารามิเตอร์
    • ในตัวกรองคุณสามารถใช้ FilterConfig วัตถุอินเตอร์เฟซในการเข้าถึงค่าเริ่มต้น
  • <filter-mapping> องค์ประกอบที่จะใช้ในการกำหนดทรัพยากรกรองรับผิดชอบดัก กรองตัดทรัพยากรสามารถระบุได้ในสองวิธี: ชื่อเส้นทางคำขอ Servlet และการเข้าถึงทรัพยากร
    • <filter-name> องค์ประกอบของเด็กใช้ในการตั้งชื่อจดทะเบียนของตัวกรอง ค่าที่จะต้องอยู่ใน <filter> องค์ประกอบ declarations ในชื่อของตัวกรองผ่าน
    • <url-pattern> ตั้งค่าตัวกรองดักเส้นทางคำขอ (กรองสไตล์ URL ที่เกี่ยวข้อง)
  • <servlet-name> ระบุตัวกรองที่ถูกบล็อกชื่อ Servlet
  • <dispatcher> ระบุตัวกรองทรัพยากรดักจะเรียกว่าภาชนะ Servlet ซึ่งสามารถ REQUEST , INCLUDE , FORWARD และ ERROR อย่างใดอย่างหนึ่งเริ่มต้น REQUEST ผู้ใช้สามารถตั้งค่าหลาย <dispatcher> องค์ประกอบย่อยจะใช้ในการระบุตัวกรองทรัพยากรหลายวิธีในการตัดสาย
  • <dispatcher> คุณค่าและความสำคัญขององค์ประกอบย่อยที่สามารถตั้งค่า
    • REQUEST : เมื่อผู้ใช้เข้าถึงโดยตรงไปยังหน้าเว็บคอนเทนเนอร์จะเรียกตัวกรอง ถ้าเป้าหมายคือวิธีการในการเข้าถึงทรัพยากรแล้วตัวกรองจะไม่ถูกเรียกโดย RequestDispatcher รวม () หรือไปข้างหน้า ()
    • INCLUDE : ถ้าทรัพยากรเป้าหมายจะเข้าถึงได้ผ่านทางรวม () แล้วกรองจะถูกเรียกว่าของ RequestDispatcher นอกจากนี้ฟิลเตอร์จะไม่ถูกเรียก
    • FORWARD : ถ้าทรัพยากรเป้าหมายการเข้าถึงผ่าน RequestDispatcher ไปข้างหน้า () วิธีแล้วกรองจะถูกเรียกในนอกจากนี้ตัวกรองจะไม่ถูกเรียก
    • ERROR : ถ้าทรัพยากรเป้าหมายคือผ่านกลไกการจัดการข้อยกเว้นเรียกว่าเปิดเผยแล้วกรองจะถูกเรียกว่า นอกจากนี้ตัวกรองจะไม่ถูกเรียก