2023-01-06
一 、过滤器的匹配规则
主要研究的就是“filter-mapping ”中“url-pattern ”的值的编写方式的个数 。
(1)在创建的模块中的src文件夹下的Servlet文件夹下创建“AServlet ” 、“BServlet ”,去掉注解 。之后设置访问路径 。
(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> ”标签中间中如果是“后缀匹配 ” ,不需要加“/ ” 。其他两种匹配 ,一般请求下需要加“/ ” ,如果忘加的话 ,服务器会启动不起来 。
总结:如果过滤器只过滤一个请求 ,就是用精确匹配;如果过滤器过滤过个请求 ,就使用目录匹配或者后缀匹配 。
声明:本站所有文章 ,如无特殊说明或标注,均为本站原创发布 。任何个人或组织 ,在未征得本站同意时 ,禁止复制 、盗用、采集 、发布本站内容到任何网站 、书籍等各类媒体平台 。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理 。