我们在上一章节已经介绍了 spring boot如何注入servlet,其中就涉及到过滤器(Filter)和监听器(Listener) ,其实spring boot使用过滤器和监听器的注册方法和 Servlet 一样,本文将直接使用@WebFilter和@WebListener的方式,完成一个Filter 和一个 Listener;
使用注解
1
|
@ServletComponentScan
//这个就是扫描相应的Servlet包;
|
过滤器(Filter)文件
com.kfit.filter.MyFilter.java
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
|
package
com.kfit.filter;
import
java.io.IOException;
import
javax.servlet.Filter;
import
javax.servlet.FilterChain;
import
javax.servlet.FilterConfig;
import
javax.servlet.ServletException;
import
javax.servlet.ServletRequest;
import
javax.servlet.ServletResponse;
import
javax.servlet.annotation.WebFilter;
/**
*
* 使用注解标注过滤器
* @WebFilter将一个实现了javax.servlet.Filter接口的类定义为过滤器
* 属性filterName声明过滤器的名称,可选
* 属性urlPatterns指定要过滤的URL模式,也可使用属性value来声明.(指定要过滤的URL模式是必选属性)
*
* @version v.0.1
*/
@WebFilter
(filterName=
"myFilter"
,urlPatterns=
"/*"
)
publicclass MyFilter
implements
Filter{
@Override
publicvoid init(FilterConfig config)
throws
ServletException {
System.out.println(
"过滤器初始化"
);
}
@Override
publicvoid doFilter(ServletRequest request, ServletResponse response,
FilterChain chain)
throws
IOException, ServletException {
System.out.println(
"执行过滤操作"
);
chain.doFilter(request, response);
}
@Override
publicvoid destroy() {
System.out.println(
"过滤器销毁"
);
}
}
|
ServletContext监听器(Listener)文件
com.kfit.listener.MyServletContextListener:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
package
com.kfit.listener;
import
javax.servlet.ServletContextEvent;
import
javax.servlet.ServletContextListener;
import
javax.servlet.annotation.WebListener;
/**
* 使用@WebListener注解,实现ServletContextListener接口
*
*
*/
@WebListener
public
class
MyServletContextListener
implements
ServletContextListener {
@Override
public
void
contextDestroyed(ServletContextEvent arg0) {
System.out.println(
"ServletContex销毁"
);
}
@Override
public
void
contextInitialized(ServletContextEvent arg0) {
System.out.println(
"ServletContex初始化"
);
}
}
|
ServletContext监听器(Listener)文件(HttpSessionListener)
MyHttpSessionListener.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
package
com.kfit.listener;
import
javax.servlet.annotation.WebListener;
import
javax.servlet.http.HttpSessionEvent;
import
javax.servlet.http.HttpSessionListener;
/**
* 监听Session的创建与销毁
*
*/
@WebListener
publicclassMyHttpSessionListenerimplementsHttpSessionListener {
@Override
publicvoid sessionCreated(HttpSessionEvent se) {
System.out.println(
"Session 被创建"
);
}
@Override
publicvoid sessionDestroyed(HttpSessionEvent se) {
System.out.println(
"ServletContex初始化"
);
}
}
|
注意不要忘记在 SpringBootSampleApplication.java 上添加 @ServletComponentScan 注解。
启动的过程中我们会看到输出:
1
2
3
4
5
6
|
ServletContex初始化
过滤器初始化
服务启动后,随便访问一个页面,会看到输出:
执行过滤操作
Session 被创建
|
至于如何使用代码的方式注册Filter和Listener,请参考上一篇文章关键Servlet的介绍。不同的是需要使用 FilterRegistrationBean 和 ServletListenerRegistrationBean 这两个类。