10.过滤器(Filter)重点
Filter开发步骤
- 导包
<!-- mysql驱动8.0-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.27</version>
</dependency>
- 实现Filter接口,重写对应的方法即可
package com.github.filter;
import javax.servlet.*;
import java.io.IOException;
public class CharacterEncodingFilter implements Filter {
/**
* 初始化:web服务器启动,就以及初始化了,随时等待过滤对象出现!
*/
public void init(FilterConfig filterConfig) {
System.out.println("CharacterEncodingFilter初始化");
}
/**
* Chain : 链
*
* 1. 过滤中的所有代码,在过滤特定请求的时候都会执行
* 2. 必须要让过滤器继续同行
* chain.doFilter(request,response);
*/
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=UTF-8");
System.out.println("CharacterEncodingFilter执行前....");
// 让我们的请求继续走,如果不写,程序到这里就被拦截停止!
chain.doFilter(request,response);
System.out.println("CharacterEncodingFilter执行后....");
}
/**
* 销毁:web服务器关闭的时候,过滤会销毁
*/
public void destroy() {
System.out.println("CharacterEncodingFilter销毁");
}
}
- 在web.xml中配置Filter
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>com.github.filter.CharacterEncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<!--只要是 /servlet的任何请求,会经过这个过滤器-->
<url-pattern>/servlet/*</url-pattern>
<!--<url-pattern>/*</url-pattern>-->
</filter-mapping>
</web-app>
11.监听器
实现一个监听器的接口;(有N种)
- 编写一个监听器;
实现监听器的接口…
package com.github.listener;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
/**
* @author: subei
* @Description: 统计网站在线人数 : 统计session
*/
public class OnlineCountListener implements HttpSessionListener {
/**
* 创建session监听: 看你的一举一动
* 一旦创建Session就会触发一次这个事件!
* @param se
*/
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监听
* 一旦销毁Session就会触发一次这个事件!
* @param se
*/
public void sessionDestroyed(HttpSessionEvent se) {
ServletContext ctx = se.getSession().getServletContext();
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);
}
/**
* Session销毁:
* 1. 手动销毁 getSession().invalidate();
* 2. 自动销毁
*/
}
- web.xml中注册监听器;
<!--注册监听器-->
<listener>
<listener-class>com.github.listener.OnlineCountListener</listener-class>
</listener>
- 看情况是否使用!
495

被折叠的 条评论
为什么被折叠?



