过滤器和监听器及应用
2023-12-16 12:12:20
Filter有什么用?
Filter:过滤器,可以用来过滤网站的数据。
比如处理中文乱码,每次写servlet,req和resp都需要重新设置编码,要是有一个机制能够在调用servlet之前就把中文乱码处理好。Filter就可以做到。
一、Filter处理中文乱码
- Filter导包不要导错:
- 过滤器Filter:
public class CharacterEncodingFilter implements Filter {
//初始化,web服务器启动的时候,就已经初始化了,随时等待过滤对象出现
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException {
req.setCharacterEncoding("UTF-8");
resp.setCharacterEncoding("UTF-8");
resp.setContentType("text/html");
System.out.println("CharacterEncodingFilter执行前....");
// chain:链,起一个放行的作用,不写这个,代码到这里就停住了。
chain.doFilter(req,resp);
System.out.println("CharacterEncodingFilter执行后.....");
}
//销毁,web服务器关闭时,过滤器会销毁。
@Override
public void destroy() {
//System.gc():通知垃圾回收站清理东西。
System.gc();
System.out.println("CharacterEncodingFilter销毁");
}
}
3.对应的Servlet:
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.getWriter().write("你好,世界!");
}
4.配置web.xml文件:
处理前:
处理后:
二、监听器,统计网站在线人数
1.监听器引入
浏览器是一个客户端软件,为什么点击错号就能关闭?
2.统计网站在线人数
2.1建立监听器:
//统计网站在线人数,统计session
public class OnLineCountListener implements HttpSessionListener {
// 创建session监听:监视你的一举一动。
// 一旦创建session就会触发一次这个事件。不管是哪个session
@Override
public void sessionCreated(HttpSessionEvent httpSessionEvent) {
ServletContext sc = httpSessionEvent.getSession().getServletContext();
Integer onLineCount = (Integer) sc.getAttribute("OnLineCount");
if (onLineCount == null){
onLineCount=new Integer(1);
}else {
int value = onLineCount.intValue();
onLineCount=new Integer(value+1);
}
sc.setAttribute("OnLineCount",onLineCount);
}
@Override
public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
System.out.println("已销毁1个");
ServletContext sc = httpSessionEvent.getSession().getServletContext();
Integer onLineCount = (Integer) sc.getAttribute("OnLineCount");
if (onLineCount == null){
onLineCount=new Integer(0);
}else {
int value = onLineCount.intValue();
onLineCount=new Integer(value-1);
}
sc.setAttribute("OnLineCount",onLineCount);
}
}
2.2 注册监听器:
<!-- 注册监听器 -->
<listener>
<listener-class>com.kuang.listener.OnLineCountListener</listener-class>
</listener>
2.3获取网站在线人数:
<h1>当前有 <span> <%= this.getServletConfig().getServletContext().getAttribute("OnLineCount")%> </span> 人在线!</h1>
2.4session的销毁:
session.invalidate();//手动注销
<session-config>
<!-- 自动销毁: 1分钟后,session失效,以分钟为单位。-->
<session-timeout>1</session-timeout>
</session-config>
设置销毁之后,才会触发销毁的方法,减少网站的人数。
一个浏览器是一个session:
刚开始有3个人在线,网站默认开始就有3个session,重新发布项目Redeploy就没了。
后面SpringMVC,SpringBoot里面的东西都是用过滤器去实现的。
文章来源:https://blog.csdn.net/weixin_51646336/article/details/135024292
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!