2023-01-06
一、過濾器的匹配規則
主要研究的就是“filter-mapping”中“url-pattern”的值的撰寫方式的個數,
(1)在創建的模塊中的src檔案夾下的Servlet檔案夾下創建“AServlet”、“BServlet”,去掉注解,之后設定訪問路徑,
<servlet-mapping>
<servlet-name>AServlet</servlet-name>
<url-pattern>/a</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>BServlet</servlet-name>
<url-pattern>/b</url-pattern>
</servlet-mapping>
(2)設定“AServlet”和“BServlet”中的函式
public class AServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request,response); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("訪問到了AServlet..."); }
public class BServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request,response); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("訪問到了BServlet"); } }
(3)在web檔案夾下創建一個“index.html”頁面,設定兩個超鏈接
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <a href="a">點擊訪問AServlet</a> <a href="b">點擊訪問BServlet</a> </body> </html>
(4)在src檔案夾下的com.hh.filter檔案夾下創建“AFilter”、“BFilter”類,實作“Filter”(包是javax.servlet),
(5)在web.xml中設定訪問路徑
<filter> <filter-name>AFilter</filter-name> <filter-class>com.hh.filter.AFilter</filter-class> </filter> <filter-mapping> <filter-name>AFilter</filter-name> <url-pattern>/a</url-pattern> </filter-mapping> <filter> <filter-name>BFilter</filter-name> <filter-class>com.hh.filter.BFilter</filter-class> </filter> <filter-mapping> <filter-name>BFilter</filter-name> <url-pattern>/b</url-pattern> </filter-mapping>
二、匹配型別
1、精確匹配
<url-pattern>/a</url-pattern> <url-pattern>/b</url-pattern>
作用:過濾專案下的a/b請求
2、目錄匹配
<url-pattern>/user/*</url-pattern>
作用:過濾專案下user請求下的所有
這個使用時,可以將超鏈接中的href設定為:“user/a”、“user/b”,此時只使用一個過濾器就行,可將AServlet、BServlet的訪問路徑也改為“user/a”、“user/b”(在web.xml中)
如果此時只使用“BFilter”過濾器,那么在此類中的“doFilter”添加代碼
@Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { System.out.println("訪問到user/的過濾器"); //過濾器放行 filterChain.doFilter(servletRequest,servletResponse); System.out.println("過濾器放行后的代碼"); }
運行結果:

3、后綴匹配
如:此時將AServlet、BServlet的訪問路徑(在web.xml中)設定為:
<servlet> <servlet-name>AServlet</servlet-name> <servlet-class>com.hh.Servlet.AServlet</servlet-class> </servlet> <servlet> <servlet-name>BServlet</servlet-name> <servlet-class>com.hh.Servlet.BServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>AServlet</servlet-name> <url-pattern>/a.action</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>BServlet</servlet-name> <url-pattern>/b.action</url-pattern> </servlet-mapping>
之后將“index.html”中的“href”也改變:
<a href="a.action">點擊訪問AServlet</a> <a href="b.action">點擊訪問BServlet</a>
這樣也可以訪問到,
注意:“<url-pattern>”標簽中間中如果是“后綴匹配”,不需要加“/”,其他兩種匹配,一般請求下需要加“/”,如果忘加的話,服務器會啟動不起來,
總結:如果過濾器只過濾一個請求,就是用精確匹配;如果過濾器過濾過個請求,就使用目錄匹配或者后綴匹配,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/541333.html
標籤:其他
上一篇:C++ 檔案讀入速度測驗
