过滤器
filter:过滤器,过滤网站数据,
- 处理中文乱码
- 登录验证
开发步骤:
1、导包
2、编写过滤器 - 导包不要错(servlet)
- 实现filter接口,重写对应的方法即可
import javax.servlet.*;
import java.io.IOException;
public class CharacterEncodingFilter implements Filter {
//初始化 服务器开启
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("CharacterEncodingFilter初始化");
}
//chain 链
/*
1、过滤中所有代码在过滤器特定请求的时候都会执行
2、必须要让过滤器继续转交 filterChain.doFilter(servletRequest,servletResponse);
*/
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放行后");
}
//销毁 服务器关闭
public void destroy() {
System.gc();
System.out.println("CharacterEncodingFilter销毁");
}
}
- web.xml中配置filter过滤器
<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>com.prj.filter.CharacterEncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/servlet/*</url-pattern><!--servlet的任何请求都会走过滤器-->
</filter-mapping>
监听器
实现监听器的接口
1、编写一个监听器:实现监听器的接口,重写里面的方法。
import javax.servlet.ServletContext;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
//统计网站在线人数
public class OnlineCountListener implements HttpSessionListener {
//创建session监听:看你的一举一动
//一旦创建session就会出发一次这个事件
public void sessionCreated(HttpSessionEvent se) {
ServletContext ctx = se.getSession().getServletContext();
System.out.println("session的id"+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销毁就会触发这个事件
public void sessionDestroyed(HttpSessionEvent se) {
ServletContext ctx = se.getSession().getServletContext();
//se.getSession().invalidate();
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);
}
/*
销毁情况:
1、手动销毁se.getSession().invalidate();
2、配置session过期时间
*/
}
2、配置监听器:
<listener>
<listener-class>com.prj.listener.OnlineCountListener</listener-class>
</listener>
3、看情况是否使用
常见应用
- 登录拦截
用户登录之后才能进入首页,用户注销之后不能进入首页