当前位置: 首页 > wzjs >正文

最新网站开发语言高端网站开放

最新网站开发语言,高端网站开放,济南市建设监理有限公司网站,哪个网站可以领手工回家做在 Java Web 开发中,过滤器(Filter)是 Servlet 规范中的一个重要组件,用于在请求到达 Servlet 之前或者响应返回客户端之前对请求和响应进行预处理或后处理。 过滤器的工作原理 过滤器的工作原理基于责任链模式。当客户端向服务…

在 Java Web 开发中,过滤器(Filter)是 Servlet 规范中的一个重要组件,用于在请求到达 Servlet 之前或者响应返回客户端之前对请求和响应进行预处理或后处理。

过滤器的工作原理

过滤器的工作原理基于责任链模式。当客户端向服务器发送请求时,请求会先经过一系列过滤器,每个过滤器可以对请求进行修改、验证或拦截。请求依次通过过滤器链,最终到达目标 Servlet。当 Servlet 处理完请求并返回响应时,响应会按照相反的顺序再次经过这些过滤器,每个过滤器可以对响应进行修改或处理

过滤器的应用场景

  • 权限验证:检查用户是否有访问特定资源的权限。
  • 字符编码处理:统一设置请求和响应的字符编码,防止乱码问题。
  • 日志记录:记录请求的信息,如请求的 URL、参数等。
  • 敏感信息过滤:过滤请求中包含的敏感词汇。

过滤器的实现步骤

1. 实现 javax.servlet.Filter 接口

Filter 接口定义了三个方法:

  • init(FilterConfig filterConfig):在过滤器被创建时调用,用于初始化过滤器。
  • doFilter(ServletRequest request, ServletResponse response, FilterChain chain):对请求和响应进行处理的核心方法。
  • destroy():在过滤器被销毁时调用,用于释放资源。
import javax.servlet.*;
import java.io.IOException;public class CharacterEncodingFilter implements Filter {private String encoding;@Overridepublic void init(FilterConfig filterConfig) throws ServletException {// 从过滤器配置中获取字符编码encoding = filterConfig.getInitParameter("encoding");if (encoding == null) {encoding = "UTF-8";}}@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)throws IOException, ServletException {// 设置请求的字符编码request.setCharacterEncoding(encoding);// 设置响应的字符编码response.setCharacterEncoding(encoding);// 将请求和响应传递给下一个过滤器或目标 Servletchain.doFilter(request, response);}@Overridepublic void destroy() {// 可以在这里释放资源}
}

2. 配置过滤器

可以通过 web.xml 或注解的方式配置过滤器。

使用 web.xml 配置

<filter><filter-name>CharacterEncodingFilter</filter-name><filter-class>com.example.CharacterEncodingFilter</filter-class><init-param><param-name>encoding</param-name><param-value>UTF-8</param-value></init-param>
</filter>
<filter-mapping><filter-name>CharacterEncodingFilter</filter-name><url-pattern>/*</url-pattern>
</filter-mapping>

使用注解配置(Servlet 3.0 及以上)

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;@WebFilter(filterName = "CharacterEncodingFilter", urlPatterns = "/*", initParams = {@WebInitParam(name = "encoding", value = "UTF-8")
})
public class CharacterEncodingFilter implements Filter {private String encoding;@Overridepublic void init(FilterConfig filterConfig) throws ServletException {encoding = filterConfig.getInitParameter("encoding");if (encoding == null) {encoding = "UTF-8";}}@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)throws IOException, ServletException {request.setCharacterEncoding(encoding);response.setCharacterEncoding(encoding);chain.doFilter(request, response);}@Overridepublic void destroy() {// 可以在这里释放资源}
}

过滤器链

在一个 Web 应用中可以配置多个过滤器,这些过滤器会按照配置的顺序形成一个过滤器链。请求会依次通过过滤器链中的每个过滤器,响应则会按照相反的顺序返回。例如,有两个过滤器 FilterA 和 FilterB,配置顺序为 FilterA 在前,FilterB 在后,那么请求的处理顺序为:FilterA -> FilterB -> Servlet,响应的处理顺序为:Servlet -> FilterB -> FilterA

注意事项

  • 过滤器是单例的,在整个 Web 应用的生命周期中只会创建一个实例。
  • 过滤器的 doFilter 方法中必须调用 FilterChain 的 doFilter 方法,否则请求将无法到达目标 Servlet。
  • 在 init 方法中可以通过 FilterConfig 获取过滤器的初始化参数。
  • 在 destroy 方法中可以释放过滤器占用的资源,如关闭数据库连接等。

实例:

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;// 使用 @WebFilter 注解配置过滤器,拦截所有请求
@WebFilter(filterName = "RequestLoggingFilter", urlPatterns = "/*")
public class RequestLoggingFilter implements Filter {@Overridepublic void init(FilterConfig filterConfig) throws ServletException {// 过滤器初始化方法,这里可以进行一些初始化操作,例如读取配置文件System.out.println("RequestLoggingFilter 初始化");}@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)throws IOException, ServletException {// 记录请求开始时间long startTime = System.currentTimeMillis();// 获取 HttpServletRequest 对象,以便获取请求的详细信息javax.servlet.http.HttpServletRequest httpRequest = (javax.servlet.http.HttpServletRequest) request;// 获取请求的 URLString requestUrl = httpRequest.getRequestURL().toString();// 获取请求的方法(如 GET、POST 等)String requestMethod = httpRequest.getMethod();System.out.println("开始处理请求: " + requestMethod + " " + requestUrl);try {// 将请求传递给下一个过滤器或目标 Servletchain.doFilter(request, response);} finally {// 记录请求结束时间long endTime = System.currentTimeMillis();// 计算请求处理所花费的时间long processingTime = endTime - startTime;System.out.println("请求处理完成: " + requestMethod + " " + requestUrl + ",耗时: " + processingTime + " 毫秒");}}@Overridepublic void destroy() {// 过滤器销毁方法,这里可以进行一些资源释放操作System.out.println("RequestLoggingFilter 销毁");}
}    
  1. 注解配置@WebFilter(filterName = "RequestLoggingFilter", urlPatterns = "/*") 此注解将该类配置为过滤器,filterName 是过滤器的名称,urlPatterns = "/*" 表示该过滤器会拦截所有的请求。
  2. init 方法:在过滤器初始化时被调用,可用于执行一些初始化操作,例如读取配置文件。
  3. doFilter 方法:这是过滤器的核心方法,其主要工作如下:
    • 记录请求开始时间。
    • 把 ServletRequest 转换为 HttpServletRequest,从而获取请求的详细信息。
    • 输出请求的 URL 和请求方法。
    • 调用 chain.doFilter(request, response) 把请求传递给下一个过滤器或者目标 Servlet。
    • 计算请求处理所花费的时间并输出。
  4. destroy 方法:在过滤器销毁时被调用,可用于释放资源。

文章转载自:

http://GNMHAEQL.rtkgc.cn
http://Kl81oYCv.rtkgc.cn
http://lcJ5CNEw.rtkgc.cn
http://6KCMBJWs.rtkgc.cn
http://gIRV0J27.rtkgc.cn
http://ae61NhEb.rtkgc.cn
http://16k2ruaw.rtkgc.cn
http://rwCyZQF8.rtkgc.cn
http://rtxMW0dp.rtkgc.cn
http://1g4dipck.rtkgc.cn
http://YuIy4X20.rtkgc.cn
http://6zi1VNWB.rtkgc.cn
http://vguHFEfd.rtkgc.cn
http://f85qcgrK.rtkgc.cn
http://NseLM9v1.rtkgc.cn
http://SbOErdjP.rtkgc.cn
http://Qe7Lssqg.rtkgc.cn
http://9fYj3u8u.rtkgc.cn
http://nrAiN5Uk.rtkgc.cn
http://cf9AY2mf.rtkgc.cn
http://tyulZj9D.rtkgc.cn
http://S7LuxUIv.rtkgc.cn
http://bb4ScV92.rtkgc.cn
http://jHLZ2gmY.rtkgc.cn
http://jHtbZUd6.rtkgc.cn
http://1zavpyy5.rtkgc.cn
http://tfA6rLwP.rtkgc.cn
http://R1Csiapv.rtkgc.cn
http://7qI9hv6q.rtkgc.cn
http://mdM7Bm8T.rtkgc.cn
http://www.dtcms.com/wzjs/619231.html

相关文章:

  • 社交网站 源码广州seo技术培训
  • 青岛做网站建设多少钱网站生成系统
  • 网站建设的方法有哪些内容知名企业网站截图
  • 凡科建站官网需要什么网站编辑做的准备
  • 企业站手机网站好网站建设公司开发方案
  • 网站两边广告代码wordpress注册不成功
  • html网站地图在线生成外贸订单一般在哪个平台接?
  • 从零做网站模板网件路由器重置
  • 辽宁网站建设fengyan十大社交电商购物平台
  • 这样建立自己的网站怎么自己制作图片
  • 沧州网站设计师招聘用什么做网站后台的
  • 陕西省城乡建设厅官方网站物流网站免费源码
  • 网站组成河北省城乡住房和建设厅网站
  • 网站主机英文有自己的域名怎么建设网站
  • 邯郸网站设计培训班wordpress移动底部菜单插件
  • 深圳全网营销型网站做宴会网站
  • 前端角度实现网站首页加载慢优化儿童网站欣赏
  • wordpress分类目录网站主题平台推广员是干嘛的
  • 西宁网站搭建企业wordpress喜欢_赏_分享
  • 培训网站建设方案模板下载电子商务平台官网入口
  • 网站制作多少钱新闻做网站可能遇到的问题
  • 哈尔滨市工程建设信息网windows优化大师使用方法
  • 深圳场站建设发展有限公司铜川网站建设公司电话
  • 现在哪个网站还做白拿运城做网站费用高吗
  • 孝感网站开发公司门户网站建设主要内容
  • 专业网站定制设计公司南昌网站建设招聘
  • 网站建设属什么资产桥头东莞网站建设
  • 上海市建设执业注册中心网站淮北建设机械网站
  • 桂林论坛网站有哪些手机网站微信分享代码
  • 重庆巨能建设集团网站不用付费不用登录的网站