1.Filter
1、Filter:过滤器,用来过滤网站的数据,可以用来处理中文乱码,登录验证…
2、Filter开发过程:
- 导包
- 编写过滤器
实现Filter接口,重写对应的方法即可
复制代码
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
29package com.kuang.filter; import javax.servlet.*; import java.io.IOException; public class CharacterEncodingFilter implements Filter { //初始化:web服务器启动,就已经初始化了,随时等待过滤对象出现! @Override public void init(FilterConfig filterConfig) throws ServletException { System.out.println("CharacterEncodingFilter初始化"); } //Chain:链 //1.过滤中的所有代码,在过滤特定请求的时候都会执行 //2.必须要让过滤器继续同行 filterChain.doFilter(servletRequest,servletResponse); @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { servletRequest.setCharacterEncoding("utf-8"); servletResponse.setCharacterEncoding("utf-8"); servletResponse.setContentType("text/html;charset=UTF-8"); System.out.println("CharacterEncodingFilter执行前..."); //让我们的请求继续走,如果不写,程序到这里就被拦截停止! filterChain.doFilter(servletRequest,servletResponse); System.out.println("CharacterEncodingFilter执行后..."); } //销毁:web服务器关闭的时候,过滤器会销毁 @Override public void destroy() { System.out.println("CharacterEncodingFilter销毁"); } }
3、在web.xml中配置Filter
复制代码
1
2
3
4
5
6
7
8
9
10<filter> <filter-name>CharacterEncodingFilter</filter-name> <filter-class>com.kuang.filter.CharacterEncodingFilter</filter-class> </filter> <filter-mapping> <filter-name>CharacterEncodingFilter</filter-name> <!--只要是 /servlet 的任何请求,会经过这个过滤器--> <url-pattern>/servlet/*</url-pattern> </filter-mapping>
2.Listener
实现一个监听器的接口
1、编写一个监听器,实现监听器的接口:
复制代码
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
36package com.kuang.listener; import javax.servlet.ServletContext; import javax.servlet.http.HttpSessionEvent; import javax.servlet.http.HttpSessionListener; //统计网站在线人数:统计Session public class OnlineCountListener implements HttpSessionListener{ //创建Session监听 @Override public void sessionCreated(HttpSessionEvent se) { ServletContext ctx = se.getSession().getServletContext(); System.out.println(se.getSession().getId()); Integer onLineCount = (Integer) ctx.getAttribute("onLineCount"); if (onLineCount==null){ onLineCount = new Integer(1); }else{ int count = onLineCount.intValue(); onLineCount = new Integer(count+1); } ctx.setAttribute("onLineCount",onLineCount); } //销毁Session监听 @Override public void sessionDestroyed(HttpSessionEvent se) { ServletContext ctx = se.getSession().getServletContext(); System.out.println(se.getSession().getId()); Integer onLineCount = (Integer) ctx.getAttribute("onLineCount"); if (onLineCount==null){ onLineCount = new Integer(0); }else{ int count = onLineCount.intValue(); onLineCount = new Integer(count-1); } ctx.setAttribute("onLineCount",onLineCount); } }
2、在web.xml中注册监听器
复制代码
1
2
3
4
5
6
7<!-- 注册监听器 --> <listener> <listenerclass>com.kuang.listener.OnlineCountListener</listener-class> </listener>
3.过滤器常见应用
1、用户登录之后才能进入主页!用户注销之后就不能进入主页了!
2、进入主页的时候要判断用户是否已经登录(在过滤器中实现)
部分代码:
复制代码
1
2
3
4
5
6
7HttpServletRequest request = (HttpServletRequest) req; HttpServletResponse response = (HttpServletResponse) resp; if (request.getSession().getAttribute("USER_SESSION") == null){ response.sendRedirect("/error.jsp"); } filterChain.doFilter(request,response);
最后
以上就是小巧柜子最近收集整理的关于学习笔记——Filter和Listener详解的全部内容,更多相关学习笔记——Filter和Listener详解内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复