Tomcat是如何处理请求参数的

技术Tomcat是如何处理请求参数的Tomcat是如何处理请求参数的,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。url请求中带参数的形式(即我们常说的GE

Tomcat如何处理请求参数,相信很多没有经验的人对此无能为力。为此,本文总结了问题产生的原因和解决方法,希望大家可以通过这篇文章来解决这个问题。

带有参数的url形式(也就是我们常说的GET请求)以请求目标后的问号开始,后面是参数名称-值对,多个名称-值对之间用&符号()分隔。

Tomcat中URL传递的参数是如何解析的?

一般来说,我们希望在Servlet中获得某个参数,一般有以下几种方式。

字符串值=request . getparameter('paramName');

需要的时候我们直接通过参数名来取。这个值的设置是什么?名称-值对如何对应?

让我们按照getParameter的方法来实现这个瓜。

当我们使用对象HttpServletRequest时,我们已经使用了它的一个门面对象(RequestFacade)。这个对象在设计模式中使用了facade模式,在HttpServletRequest中封装了一些细节,并且只公开了一些必要的API。

当实际处理请求时,调用封装的请求对象。

getParameter方法的代码如下所示:

/*返回指定请求参数的值(如果有);否则,

*返回codenull/code。如果定义了多个值,

*只返回第一个。

* @参数名所需请求参数的名称

*/

公共字符串getParameter(字符串名称){ 0

if(!parameters sparsed){ 0

parseParameters();

}

返回郊狼请求. getParameters()。getParameter(名称);

}

在每次请求时,它将首先确定参数是否已被解析,如果已被解析,它将直接返回。

受保护的void parseParameters(){ 0

parametersParsed = true; //注意这里,解析之后就设为true了。

Parameters parameters=郊狼请求. getparameters();

布尔成功=假;

尝试{

//每次通过JMX更改限额时设置该值

parameters . setlimit(GetConnector()。getMaxParameterCount());

}

.

参数。handleQueryParameters()

}

因此,当第一次调用getParameter方法时,会对这个名称-值对进行配置和初始化。

接下来,这个handleQueryParameters就是具体的处理方法。让我们假设请求了以下url:

http://localhost:8080/test?abc=1def=2

在handleQueryParameters方法中,我们通过调试界面进行观察。

这里,参数包含一个属性queryMB,它的值正好是我们传入的字符串。因此,以下参数处理基于此属性。

然后,在参数类的processParameter方法中,

我们明白了,基本是遍历字符串中的各个char,遇到特定字符=和之后,再从各个index获取等号前后的名和值.

中间一个特别的地方是遇到%和+时,是出现了像汉字一类的,其实是需要转义的,所以处理也是在此进行的.

解析后,名称-值对被存储在像数组列表这样的数据结构中。看看下面的代码,

公共void addParameter(字符串键,字符串值){ 0

ArrayListString值=paramashvalues . get(key);

if(values==null){ 0

values=新数组列表(1);

paramHashValues.put(key, values);

}

values.add(value);

}

执行上述方法后,代码向下执行,您看到的parameters对象的值如下所示:

abc=1,\n def=2,\n

注意上面标有红色和粗体的两条线,

你还记得上面提到如果有多个参数,重名的只会返回第一个匹配项吗?

在请求的具体参数请求中,如果不涉及初始处理,执行下面的代码,非常简单,就是直接从Map里取对应key的ArrayList,有值的话就从中取第一个值。.

公共字符串getParameter(字符串名称){ 0

handleQueryParameters();

ArrayListString值=paramashvalues . get(name);

if (values!=null){ 0

if(values . size()==0){ 0

返回“”;

}

return values.get(0); //注意这里,就是在兑现只返回第一个的承诺!!!

} else {

返回null

}

}看完上面的内容,你掌握Tomcat如何处理请求参数了吗?如果您想学习更多技能或了解更多相关内容,请关注行业资讯频道,感谢您的阅读!

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/138394.html

(0)

相关推荐

  • postman自动调用获取token

    技术postman自动调用获取token postman自动调用获取tokenPostman不光支持单次请求,还支持环境变量、全局变量、集合变量
    本文使用Collection Variable
    Coll

    礼包 2021年12月2日
  • java怎么使用正则表达式限制特殊字符的个数

    技术java怎么使用正则表达式限制特殊字符的个数这篇文章给大家分享的是有关java怎么使用正则表达式限制特殊字符的个数的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。使用正则表达式限制特殊字符的

    攻略 2021年11月30日
  • 兰姆达,阿尔法贝塔伽马之后是什么

    技术兰姆达,阿尔法贝塔伽马之后是什么阿尔法贝塔伽马之后是德尔塔兰姆达。 阿尔法贝塔伽马之后所有顺序如下:(依次为 序号 大写 小写 英文注音 国际音标注音 中文注音) 1,Α α alpha a:lf 阿尔法
    2,Β

    生活 2021年10月20日
  • hadoop怎么进入jdk的安装目录(怎样查找hadoopjdk的安装路径命令)

    技术DKhadoop开发环境安装常见问题的示例分析这篇文章主要为大家展示了“DKhadoop开发环境安装常见问题的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“DKh

    攻略 2021年12月20日
  • Expanse shopify主题模板修改

    技术Expanse shopify主题模板修改 Expanse shopify主题模板修改Expanse是一个现代的Shopify主题,通过自定义的促销活动、直观的导航、简洁的设计和奇妙的移动体验来增强

    礼包 2021年10月19日
  • 两个不可数名词加and用is还是are,不可数名词是用is还是are

    技术两个不可数名词加and用is还是are,不可数名词是用is还是are不可数名词用is。 不可数名词属于单数两个不可数名词加and用is还是are,不过两个不可数名词用and连起来,就成复数要用are了。 不可数名词一

    生活 2021年10月26日