Latest web development tutorials

مرشحات بريمج الكتابة

يمكن المرشحات بريمج يكون ديناميكيا تعترض الطلب والاستجابة من أجل تحويل أو استخدام المعلومات الواردة في الطلب أو استجابة.

واحد أو أكثر من المرشحات بريمج يمكن تركيبها على بريمج أو بريمج. ويمكن أيضا أن المرشحات بريمج أن تعلق على صفحات خادم جافا (JSP) ملفات وصفحات HTML. داعيا جميع المرشحات بريمج إضافية قبل استدعاء بريمج.

والمرشحات بريمج المتاحة لفئة البرمجة بريمج جافا، يمكنك تحقيق الأهداف التالية:

  • قبل طلب الحصول على الخلفية موارد، العميل اعتراض هذه الطلبات.
  • قبل خادم يرسل استجابة إلى العميل للتعامل مع هذه الردود.

وفقا للمواصفات التي أوصت بها أنواع مختلفة من المرشحات:

  • مرشح المصادقة (شروط التوثيق).
  • مرشح ضغط البيانات (ضغط البيانات مرشحات).
  • مرشحات التشفير (التشفير مرشحات).
  • الزناد وصول الموارد مرشح الحدث.
  • مرشحات تحويل صورة (شروط التحويل صورة).
  • تسجيل وتدقيق المرشحات (تسجيل والمراجعة مرشحات).
  • مرشح سلسلة MIME-TYPE (MIME-TYPE سلسلة مرشحات).
  • مرشح المسمى (Tokenizing مرشحات).
  • XSL / T مرشح (XSL / T مرشحات)، وتحويل محتوى XML.

تصفية اصف النشر (web.xml) في علامات XML عبر بيان نشر على الانترنت، ومن ثم تعيينها إلى نشر واصف اسم بريمج أو URL نمط التطبيق الخاص بك.

عندما الحاوية الويب لبدء تطبيق ويب، وسوف يكون لك في إعلان نشر اصف لكل مرشح لإنشاء مثيل.

أمر الإعدام مرشح يتوافق مع ترتيب ترتيب في ملف التكوين web.xml، عادة تكوين تصفية قبل كل بريمج.

الطريقة بريمج تصفية

المرشح هو فئة 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

يوفر طريقة الحرف الأول مرشح لكائن 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 للحصول على المعلمات في طريقة الحرف الأول:

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

مرشح المثال بريمج

فيما يلي أمثلة من المرشحات بريمج، اسم الانتاج وعنوان الموقع التالي. الأمثلة بريمج لتعطيك فهم أساسي من مرشح، يمكنك استخدام نفس المفهوم لكتابة التطبيقات فلتر أكثر تعقيدا:

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 تعيين مرشح بريمج (رسم الخرائط تصفية بريمج)

تحديد المرشحات، ثم تعيينها إلى URL أو بريمج، التي تحدد بريمج، ثم تعيينها إلى نمط 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>  

ينطبق على مرشح لكل بريمج، لأننا المحدد في تكوين/ *.إذا كنت ترغب في تطبيق عامل تصفية على عدد قليل من بريمج، يمكنك تحديد مسار بريمج محددة.

الآن محاولة بالطريقة المعتادة لاستدعاء أي بريمج، سترى سجلات ملقم ويب الذي تم إنشاؤه. يمكنك أيضا استخدام مسجل للتسجيل Log4J أعلاه إلى ملف منفصل.

بعد ذلك قمنا بزيارة هذا المثال عنوان HTTP: // المضيف المحلي: 8080 / TomcatTest / DisplayHeader، ثم ننظر في الانتاج في وحدة التحكم، على النحو التالي:

باستخدام عدد وافر من المرشحات

يمكن لتطبيقات الويب أن يكون عدة مرشحات مختلفة استنادا إلى غرض محدد محددة. افترض أنك قد حددت اثنين من المرشحاتAuthenFilterوLogFilter. تحتاج إلى إنشاء خرائط مختلفة موضح أدناه، وفوق ما تبقى من العملية هو الى حد كبير نفس التفسير:

<مرشح>
   <تصفية اسم> LogFilter </ فلتر اسم>
   <من الدرجة مرشح> com.w3big.test.LogFilter </ مرشح من الدرجة>
   <التهيئة-المعلمة>
	  <بارام اسم> اختبار المعلمة </ المعلمة اسم>
	  <بارام القيمة> تهيئة المعلمتين </ المعلمة القيمة>
   </ التهيئة-المعلمة>
</ مرشح>

<مرشح>
   <تصفية اسم> AuthenFilter </ فلتر اسم>
   <من الدرجة مرشح> com.w3big.test.AuthenFilter </ مرشح من الدرجة>
   <التهيئة-المعلمة>
	  <بارام اسم> اختبار المعلمة </ المعلمة اسم>
	  <بارام القيمة> تهيئة المعلمتين </ المعلمة القيمة>
   </ التهيئة-المعلمة>
</ مرشح>

<تصفية رسم الخرائط>
   <تصفية اسم> LogFilter </ فلتر اسم>
   <رابط نمط> / * </ رابط نمط>
</ تصفية رسم الخرائط>

<تصفية رسم الخرائط>
   <تصفية اسم> AuthenFilter </ فلتر اسم>
   <رابط نمط> / * </ رابط نمط>
</ تصفية رسم الخرائط>

يتم تطبيق فلاتر بالتتابع

النظام في عنصر web.xml مرشح رسم خرائط يحدد الحاوية ويب لتطبيق المرشحات لترتيب بريمج. لعكس ترتيب التصفية، تحتاج فقط إلى عكس عنصر المرشح رسم الخرائط في ملف 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> عنصر يستخدم لتحديد الموارد تصفية المسؤولين اعتراضها. مرشح اعتراض مورد يمكن تحديد بطريقتين: اسم طلب مسار بريمج والوصول إلى الموارد
    • <filter-name> يستخدم عنصر تابع لتعيين اسم المسجل للمرشح. يجب أن تكون قيمة في <filter> الإعلانات عنصر في اسم مرشح من خلال
    • <url-pattern> تصفية مجموعة اعتراضها طلب مسار (فلتر المرتبطة أسلوب URL)
  • <servlet-name> يحدد مرشح منعت اسم بريمج.
  • <dispatcher> تحديد مرشح وتسمى الموارد اعترضت الحاويات بريمج، التي يمكن أن تكون REQUEST ، INCLUDE ، FORWARD و ERROR واحد الافتراضي REQUEST . يمكن للمستخدمين إنشاء متعددة <dispatcher> يستخدم شبه عنصر لتحديد تصفية الموارد بطرق متعددة لاعتراض المكالمات.
  • <dispatcher> قيمة وأهمية العناصر الفرعية التي يمكن تعيينها
    • REQUEST : عند وصول المستخدم مباشرة إلى صفحات، والحاويات الويب استدعاء مرشح. إذا كان الهدف هو طريقة للوصول إلى الموارد، ثم سوف لا يتم استدعاء مرشح من قبل RequestDispatcher وتشمل () أو إلى الأمام ().
    • INCLUDE : إذا تم الوصول إلى الموارد المستهدفة عبر وتشمل ()، ثم سوف يطلق على RequestDispatcher هو تنقية وتصفية. وبالإضافة إلى ذلك، لن دعا المرشحات.
    • FORWARD : إذا تم الوصول إلى الموارد المستهدفة من خلال RequestDispatcher إلى الأمام () الأسلوب، ثم سيتم دعا مرشح، بالإضافة إلى ذلك، سوف لا يتم استدعاء عامل التصفية.
    • ERROR : إذا كان المورد الهدف من خلال التعريفي آلية التعامل مع استثناء ودعا، ثم سيتم دعا مرشح. وبالإضافة إلى ذلك، لن دعا مرشح.