Servlet过滤器
首先,创建三个过滤器: 第一个:package com.xust.jia.filter;import java.io.IOException;import java.text.SimpleDateFormat;import java.util.Date;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;im_servlet的过滤器 csdn博客
文章信息
- 原文链接:https://jiayq.blog.csdn.net/article/details/76464659
- 发布时间:2017-07-31 19:30:19
- 阅读量:480
- 分类:java专栏收录该内容, 订阅专栏
- 标签:#servlet, #im
摘要
文章浏览阅读480次。首先,创建三个过滤器: 第一个:package com.xust.jia.filter;import java.io.IOException;import java.text.SimpleDateFormat;import java.util.Date;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;im_servlet的过滤器 csdn博客
首先,什么是过滤器?
过滤器有什么功能?
过滤器的执行流程:
方法说明:
首先,创建三个过滤器:
第一个:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
package com.xust.jia.filter;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
/**
*
* @author jia
*
*创建一个过滤器,用于记录访问的地址
*
*/
public class Filter implements javax.servlet.Filter{
@Override
public void destroy() {
// TODO Auto-generated method stub
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println();
System.out.println();
System.out.println(sdf.format(new Date())+"过滤器0将被销毁");
System.out.println();
System.out.println();
}
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
// TODO Auto-generated method stub
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println();
System.out.println();
System.out.println(sdf.format(new Date())+"filter0访问的地址:"+((HttpServletRequest)request).getServletPath());
System.out.println();
System.out.println();
chain.doFilter(request, response);
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
// TODO Auto-generated method stub
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println();
System.out.println();
System.out.println(sdf.format(new Date())+"过滤器0将被创建");
System.out.println();
System.out.println();
}
}
第二个:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
package com.xust.jia.filter;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class Filter1 implements Filter{
@Override
public void destroy() {
// TODO Auto-generated method stub
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println();
System.out.println();
System.out.println(sdf.format(new Date())+"过滤器1将被销毁");
System.out.println();
System.out.println();
}
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
// TODO Auto-generated method stub
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
if(request.getParameter("user") != null){
System.out.println();
System.out.println();
System.out.println(sdf.format(new Date())+"filter1参数:"+request.getParameter("user"));
}
if(request.getParameter("user") != null){
System.out.println(sdf.format(new Date())+"filter1参数:"+request.getParameter("password"));
System.out.println();
System.out.println();
}
chain.doFilter(request, response);
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
// TODO Auto-generated method stub
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println();
System.out.println();
System.out.println(sdf.format(new Date())+"过滤器1将被创建");
System.out.println();
System.out.println();
}
}
第三个:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
package com.xust.jia.filter;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class Filter2 implements Filter{
@Override
public void destroy() {
// TODO Auto-generated method stub
System.out.println();
System.out.println();
System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()) + "Filter2被销毁");
System.out.println();
System.out.println();
}
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
// TODO Auto-generated method stub
System.out.println();
System.out.println();
System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()) + "Filter2被使用");
System.out.println();
System.out.println();
chain.doFilter(request, response);
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
// TODO Auto-generated method stub
System.out.println();
System.out.println();
System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()) + "Filter2被创建");
System.out.println();
System.out.println();
}
}
然后在Web.xml中进行配置:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<filter>
<filter-name>filter</filter-name>
<filter-class>com.xust.jia.filter.Filter</filter-class>
</filter>
<filter>
<filter-name>filter1</filter-name>
<filter-class>com.xust.jia.filter.Filter1</filter-class>
</filter>
<filter>
<filter-name>filter2</filter-name>
<filter-class>com.xust.jia.filter.Filter2</filter-class>
</filter>
<filter-mapping>
<filter-name>filter2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>filter1</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
注意:
mapping的顺序就是过滤器链的顺序:
比如:filter1在mapping的第一个,那么,当过滤器开始工作的时候,最先进入的就是filter1的doFilter函数。所以需要注意。
然后,启动服务器,开始运行项目:
这就是服务器创建过滤器的顺序,这个顺序是不确定的,但是这一次是这个顺序,那么以后只要数量不发生变化,那么顺序就是一样的。
具体原因是因为服务器里的HashMap,但具体在那里,请各位百度。
这里的过滤链的先后顺序就是mapping的顺序了。
所以,总结如下:
过滤器在Web.xml中配置,mapping的顺序就是链的顺序。
如果需要拒绝这个请求,在最里层不加chain.doFilter().
最后一层如果添加了chain.doFilter()函数,那么服务器会在Web.xml中进行搜索,如果是最后一层的过滤器,那么就通过这个请求,否则就拒绝。
通过请求是通过默认调用servlet的doGet方法,将request,respones参数传入来进行实现。