javaweb过滤器
实现对web资源请求的拦截,完成特殊的操作,尤其是对请求的预处理。
1、过滤器的实现步骤#
编写java类实现Filter接口,并实现其doFilter方法。#
自动生成以下代码
package Filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class characterFilter implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)throws IOException, ServletException {
// TODO Auto-generated method stub
}
}
doFilter过滤器的功能实现方法
init初始化时运行的方法
destroy过滤器销毁时的后期处理
doFilter方法中最后应该有 chain.doFilter(request, response);
chain为过滤器链,在doFilter结束后执行此话,代表本过滤结束进入下一个过滤器或执行操作。
2在web.xml文件中对filter类进行注册,并设置所拦截的资源。#
1、注册过滤器
2、拦截映射配置
在web-app中配置
<filter>
<filter-name>characterFilter</filter-name> <!-- 过滤器名称 -->
<filter-class>Filter.characterFilter</filter-class> <!-- 过滤器地址 -->
</filter>
<filter-mapping>
<filter-name>characterFilter</filter-name> <!-- 哪个过滤器起作用 -->
<url-pattern>/*</url-pattern> <!-- 对什么请求进行过滤,,/*代表所有的请求 -->
</filter-mapping>
3、配置并获取过滤器的初始化参数#
1、设置初始化参数
在web.xml中的web-app中filter中配置
<init-param>
<param-name>systemName</param-name>
<param-value>character Encoding</param-value>
</init-param>
<init-param>
<param-name>version</param-name>
<param-value>1.0</param-value>
</init-param>
param-name:参数名
param-value:参数值
2、获取初始化参数
在Filter类中添加FilterConfig属性的变量
private FilterConfig filterConfig;
得到filterConfig的set和get方法
public FilterConfig getFilterConfig() {
return filterConfig;
}
public void setFilterConfig(FilterConfig filterConfig) {
this.filterConfig = filterConfig;
}
在init方法中获得传进来的FilterConfig并传给类属性
this.filterConfig=filterConfig;
3、使用初始化参数
在doFilter中
String systemName = filterConfig.getInitParameter("systemName");
获取参数值
3、doFilter代码编写 功能:字符编码的过滤#
在web.xml中的web-app中filter中配置
<init-param>
<param-name>charset</param-name>
<param-value>UTF-8</param-value>
</init-param>
doFilter中加入
request.setCharacterEncoding(filterConfig.getInitParameter("charset"));
如此在初始化时获得参数,执行时执行doFilter就完成了字符编码的过滤。
其他注意事项,很多情况下需要将request转换成HttpServletRequest类型#
HttpServletRequest hrequest = (HttpServletRequest)request;
HttpServletResponse hresponse = (HttpServletResponse)response;
filter-mapping配置的子元素dispatcher#
当过滤器被调用前还要考虑资源被调用的方式
直接访问页面request方式 不修改dispatcher过滤器默认是request
include jsp中
forword 页面转换
error 错误信息
可以配置多个dispatcher
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY