我是靠谱客的博主 小巧柜子,最近开发中收集的这篇文章主要介绍学习笔记——Filter和Listener详解,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1.Filter

1、Filter:过滤器,用来过滤网站的数据,可以用来处理中文乱码,登录验证…

2、Filter开发过程:

  1. 导包
  2. 编写过滤器

实现Filter接口,重写对应的方法即可

package 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

<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、编写一个监听器,实现监听器的接口:

package 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中注册监听器

<!--
注册监听器
-->
<listener>
<listenerclass>com.kuang.listener.OnlineCountListener</listener-class>
</listener>

3.过滤器常见应用

1、用户登录之后才能进入主页!用户注销之后就不能进入主页了!
2、进入主页的时候要判断用户是否已经登录(在过滤器中实现)

部分代码:

HttpServletRequest 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详解所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(35)

评论列表共有 0 条评论

立即
投稿
返回
顶部