您的位置:首页 > 教育 > 锐评 > 淄博网站制作定制升级_微信小程序开通要钱吗_游戏代理平台哪个好_能让网络非常流畅的软件

淄博网站制作定制升级_微信小程序开通要钱吗_游戏代理平台哪个好_能让网络非常流畅的软件

2025/11/10 2:35:45 来源:https://blog.csdn.net/qq_36268452/article/details/146139838  浏览:    关键词:淄博网站制作定制升级_微信小程序开通要钱吗_游戏代理平台哪个好_能让网络非常流畅的软件
淄博网站制作定制升级_微信小程序开通要钱吗_游戏代理平台哪个好_能让网络非常流畅的软件

Servlet 过滤器

Servlet 过滤器(Filter)与 Servlet 十分相似,但 Filter 具有拦截客户端请求的功能, Filter 可以改变请求中的内容,以便满足实际开发中的需要。对于程序开发人员而言, Filter 实质上就是 Web 服务器上的一个应用组件,用于拦截客户端与目标资源的请求,并对这些请求进行一定过滤处理再发送给目标资源。如图所示:
在这里插入图片描述
如果一个 Web 应用中使用一个 Filter 不能解决史记中的业务需要,那么可以部署多个过滤器对业务请求进行多次处理,这样就组成了一个过滤器链。Web 容器在处理过滤器链时,将按照过滤器的先后顺序对请求进行处理,如图所示:
在这里插入图片描述

Filter创建过程:

要编写一个过滤器必须实现Filter接口。实现其接口规定的方法。
1、实现jakarta.servlet.Filter接口
2、实现init方法,读取过滤器的初始化参数
3、实现doFilter方法,完成对请求或响应的过滤
4、调用FilterChain接口对象的doFilter方法,向后续的过滤器传递请求或响应

创建Filter有两种方式:基于web.xml配置文件、基于@WebFilter注解

基于web.xml
<filter><filter-name>MyFilter</filter-name><filter-class>com.iss.filter.MyFilter</filter-class><init-param><param-name>userName</param-name><param-value>admin</param-value></init-param></filter><filter-mapping><filter-name>MyFilter</filter-name><!-- 配置过滤器 url 映射 --><url-pattern>/*</url-pattern><dispatcher>REQUEST</dispatcher></filter-mapping>
创建filter
public class MyFilter implements Filter {@Overridepublic void init(FilterConfig filterConfig) throws ServletException {System.out.println("初始化过滤器");System.out.println(filterConfig.getInitParameter("userName"));}@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {System.out.println("执行url,进入此方法");chain.doFilter(request,response);//进入下一个过滤器或url}@Overridepublic void destroy() {System.out.println("关闭服务器时执行");}
}
基于@WebFilter注解
@WebFilter(filterName = "myFilter",urlPatterns = "/*",initParams = {@WebInitParam(name="userName",value = "admin")},dispatcherTypes = DispatcherType.REQUEST)public class MyFilter implements Filter {@Overridepublic void init(FilterConfig filterConfig) throws ServletException {System.out.println("初始化过滤器");System.out.println(filterConfig.getInitParameter("userName"));}@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {System.out.println("执行url,进入此方法");chain.doFilter(request,response);//进入下一个过滤器或url}@Overridepublic void destroy() {System.out.println("关闭服务器时执行");}
}
Filter应用示例 解决乱码问题fitler
@WebFilter(filterName = "charactorFilter", urlPatterns = "/*", initParams = {@WebInitParam(name = "encoding", value = "UTF-8") })
public class CharactorFilter implements Filter {private String encoding;public void init(FilterConfig fConfig) throws ServletException {encoding = fConfig.getInitParameter("encoding");}public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)throws IOException, ServletException {if (encoding != null) {request.setCharacterEncoding(encoding);response.setContentType("text/html;charset=" + encoding);}chain.doFilter(request, response);}public void destroy() {}
}

Listener介绍

servlet监听器也叫web监听器。是servlet中一种特殊类。能够帮助开发者监听web应用中的特定事件。比如ServletContext,ServletSession,ServletRequest的创建和销毁,变量的创建和销毁等。
监听器常用的用途:
  统计在线人数,利用HttpSessionListener
  加载初始化信息:利用ServletContextListener
  统计网站访问量:利用ServletRequestListener
  实现访问监控:利用ServletRequestListener

Listener分类

在 Servlet 规范中定义了多种类型的监听器,它们用于监听的事件源分别为 ServletContext、HttpSession和 ServletRequest这三个域对象。

Servlet 规范针对这三个对象上的操作,又把多种类型的监听器划分为三种类型:

  1. 监听域对象自身的创建和销毁的事件监听器。
  2. 监听域对象中的属性的增加和删除的事件监听器。
  3. 监听绑定到HttpSession域中的某个对象的状态的事件监听器。
listener应用

ServletContextListener 接口用于监听 ServletContext 对象的创建和销毁事件。
ServletContext 域对象创建和销毁时机:
创建:服务器启动针对每一个Web应用创建 ServletContext;
销毁:服务器关闭前先关闭代表每一个 web 应用的 ServletContext;

@WebListener
public class MyServletContextListener implements ServletContextListener {@Overridepublic void contextInitialized(ServletContextEvent sce) {System.out.println("ServletContext has create ...");}@Overridepublic void contextDestroyed(ServletContextEvent sce) {System.out.println("ServletContext has destroyed ...");}
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com