千家信息网

Tomcat中怎么设置编码Filter

发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,本篇文章给大家分享的是有关Tomcat中怎么设置编码Filter,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。1. SetCharact
千家信息网最后更新 2025年12月02日Tomcat中怎么设置编码Filter

本篇文章给大家分享的是有关Tomcat中怎么设置编码Filter,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

1. SetCharacterEncodingFilter

public void doFilter(ServletRequest request, ServletResponse response,

FilterChain chain) {

// Conditionally select and set the character encoding to be used

if (ignore || (request.getCharacterEncoding() == null)) {

String characterEncoding = selectEncoding(request);

if (characterEncoding != null) {

request.setCharacterEncoding(characterEncoding);

}

}

chain.doFilter(request, response);

}

Filter的doFilter方法如上所示,在这个类中,除了encoding这个参数外,还提供了一个ignore参数。该参数是一个开关,主要用于决定是否要忽略客户端请求中指定的encoding,如果为true,我们看到流程会直接进行selectEncoding操作。在有特定的需要时,可以继承该Filter并重写其selectEncoding方法实现,例如根据请求头中的Accept-Language项进行对应的encoding设置,或者根据session中特定的标识进行设置。


附加参数的处理

我们知道,对于Filter或Servlet等,我们都可以在web.xml中为其指定初始化参数,我们称之为initParameter。对于我们自己的应用,可能已经定义好了要传入的参数,直接在应用内解析传入的值即可。

而Tomcat内部为了在多个Filter中支持多种形式的自定义initParameter,特意定义了一个工具类用于解析传入的参数。

我们上面提到的Filter,其继承自FilterBase这样一个基类,而基类中主要用于进行初始化参数的设置

public void init(FilterConfig filterConfig) throws ServletException {

Enumeration paramNames = filterConfig.getInitParameterNames();

while (paramNames.hasMoreElements()) {

String paramName = paramNames.nextElement();

if (!IntrospectionUtils.setProperty(this, paramName,

filterConfig.getInitParameter(paramName))) {

String msg = sm.getString("filterbase.noSuchProperty",

paramName, this.getClass().getName());

if (isConfigProblemFatal()) {

throw new ServletException(msg);

} else {

getLogger().warn(msg); }} }

这个工具类即为上面标红的IntrospectionUtils

Utils中主要使用反射进行参数值的设置,即反射调用对应参数的setter进行赋值。我提到这个工具类,主要目的并不是想说反射,而是其实现的方式可以进行参考,以及对于边界条件的考虑很周全。

例如,拿到class对应的Method之后,会判断其参数的个数,类型等。

// First, the ideal case - a setFoo( String ) method

for (int i = 0; i < methods.length; i++) {

Class paramT[] = methods[i].getParameterTypes();

if (setter.equals(methods[i].getName()) && paramT.length == 1

&& "java.lang.String".equals(paramT[0].getName())) {

methods[i].invoke(o, new Object[] { value });

return true;

}

}

在考虑其它类型时,除基础类型外,还考虑到了包装类

if (setter.equals(methods[i].getName())

&& methods[i].getParameterTypes().length == 1) {


// match - find the type and invoke it

Class paramType = methods[i].getParameterTypes()[0];

Object params[] = new Object[1];


// Try a setFoo ( int )

if ("java.lang.Integer".equals(paramType.getName())

|| "int".equals(paramType.getName())) {

try {

params[0] = new Integer(value);

} catch (NumberFormatException ex) {

ok = false;

}

// Try a setFoo ( long )

}else if ("java.lang.Long".equals(paramType.getName())

|| "long".equals(paramType.getName())) {

try {

params[0] = new Long(value);

} catch (NumberFormatException ex) {

ok = false;

}


// Try a setFoo ( boolean )

} else if ("java.lang.Boolean".equals(paramType.getName())

|| "boolean".equals(paramType.getName())) {

params[0] = Boolean.valueOf(value);

}

对于参数的getter,除了getXXX,还想到了isXXX。

public static Object getProperty(Object o, String name) {

String getter = "get" + capitalize(name);

String isGetter = "is" + capitalize(name);

以上就是Tomcat中怎么设置编码Filter,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注行业资讯频道。

参数 工具 类型 反射 编码 方法 更多 知识 篇文章 应用 周全 实用 个数 中指 基础 多个 多种 如上 客户 客户端 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 学软件开发毕业做什么 计算网络技术(G5)学费多少 数据库技术的实用性 xpnt服务器怎么设置 网络安全法开始湿湿的时间 石景山区现代软件开发推荐咨询 云掌柜网络技术 患者主索引数据库 对峙2为什么总是连接不到服务器 每次重启电脑都要重新装载数据库 网络安全法对实名制的要求 如何生成数据库模拟数据 常用的网络安全服务 阳山县网络安全宣传周 网络安全工程师入职要求 数据库工程师备战方法 广域网和接入网络技术 怀柔区综合网络技术服务介绍 常见的软件开发模型及优点 服务器病毒防护方法 激光打标机软件开发源码 软件开发日价格 cubmed属于哪个数据库 知乎服务器性能 政法干警的服务器什么时候开始 管家婆怎么换电脑服务器 我的世界手机版服务器文件在哪 搜索设置服务器 南山区网络技术转移优点 泰拉瑞亚服务器开启指定地图
0