Javaweb-过滤器和监听器
过滤器
过滤器就是在服务器请求servlet的过程中过滤掉不合理的请求
过滤器开发步骤
-
导包
-
导包千万不要导错
-
要对所有方法重写
*实现Filter接口,重写方法
package com.wang.fiter;
import javax.servlet.*;
import java.io.IOException;
public class chfiter implements Filter {
@Override
//在web服务器启动时初始化
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("生成");
}
@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");
filterChain.doFilter(servletRequest,servletResponse);//过滤器实现过滤
}
@Override
//在web服务器关闭时销毁
public void destroy() {
System.out.println("销毁");
}
}
- 我们在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">
<servlet>
<servlet-name>servlet</servlet-name>
<servlet-class>com.wang.servlet.showservlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>servlet</servlet-name>
<url-pattern>/servlet/show</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>servlet</servlet-name>
<url-pattern>/show</url-pattern>
</servlet-mapping>
<filter>
<filter-name>fiter</filter-name>
<filter-class>com.wang.fiter.chfiter</filter-class>
</filter>
<filter-mapping>
<filter-name>fiter</filter-name>
<url-pattern>/servlet/*</url-pattern>
</filter-mapping>
</web-app>
过滤器是一个在web服务器和servlet间的中间商
filterChain.doFilter(servletRequest,servletResponse);
这行代码使请求响应同步继续走下去
监听器
创建和销毁
package com.wang.listener;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
public class onlinelistener implements HttpSessionListener {
@Override
//创建session的监听
//一旦有一个session创建就会发生这个事情
public void sessionCreated(HttpSessionEvent se) {
ServletContext context = se.getSession().getServletContext();
Integer oline =(Integer) context.getAttribute("olinecount");
if(oline==null)
{
oline = new Integer(1);
}
else
{
int count=oline.intValue();
oline= new Integer(count+1);
}
context.setAttribute("olinecount",oline);
}
@Override
//销毁
public void sessionDestroyed(HttpSessionEvent se) {
ServletContext context = se.getSession().getServletContext();
Integer oline =(Integer) context.getAttribute("olinecount");
if(oline==null)
{
oline = new Integer(1);
}
else
{
int count=oline.intValue();
oline= new Integer(count-1);
}
context.setAttribute("olinecount",oline);
}
}
在web.xml中配置
<listener>
<listener-class>com.wang.listener.onlinelistener</listener-class>
</listener>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?