กรอง JSP
JSP และ Servlet กรองในทุกชั้นเรียน Java
ฟิลเตอร์แบบไดนามิกสามารถขัดขวางการร้องขอและการตอบสนองในการสั่งซื้อที่จะเปลี่ยนหรือใช้ข้อมูลที่มีอยู่ในการร้องขอหรือการตอบสนอง
หนึ่งหรือมากกว่าหนึ่งตัวกรองสามารถแนบมากับ Servlet หรือเซิร์ฟเล็ต ฟิลเตอร์นอกจากนี้ยังสามารถแนบมากับเจเอสพี (JSP) ไฟล์และหน้าเว็บ HTML
ฟิลเตอร์ที่มีอยู่สำหรับการเขียนโปรแกรม 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 กำหนดสามวิธี:
序号 | 方法 & 描述 |
---|---|
1 | public void doFilter (ServletRequest, ServletResponse, FilterChain) 该方法完成实际的过滤操作,当客户端请求方法与过滤器设置匹配的URL时,Servlet容器将先调用过滤器的doFilter方法。FilterChain用户访问后续过滤器。 |
2 | public void init(FilterConfig filterConfig) web 应用程序启动时,web 服务器将创建Filter 的实例对象,并调用其init方法,读取web.xml配置,完成对象的初始化功能,从而为后续的用户请求作好拦截的准备工作(filter对象只会创建一次,init方法也只会执行一次)。开发人员通过init方法的参数,可获得代表当前filter配置信息的FilterConfig对象。 |
3 | public 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); }
เช่นกรอง JSP
ตัวอย่างต่อไปนี้ของตัวกรอง Servlet ชื่อส่งออกและที่อยู่ของเว็บไซต์ ตัวอย่าง Servlet เพื่อให้คุณมีความเข้าใจพื้นฐานของตัวกรองคุณสามารถใช้แนวคิดเดียวกันในการเขียนโปรแกรมกรองที่ซับซ้อนมากขึ้น:
//导入必需的 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.w3write.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
: ถ้าทรัพยากรเป้าหมายคือผ่านกลไกการจัดการข้อยกเว้นเรียกว่าเปิดเผยแล้วกรองจะถูกเรียกว่า นอกจากนี้ตัวกรองจะไม่ถูกเรียก
-