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)

相关推荐

  • 美人鱼的画法,怎样区分人鱼线与马甲线

    技术美人鱼的画法,怎样区分人鱼线与马甲线首先对“马甲线”和“人鱼线”两个词解析下美人鱼的画法;马甲线:一般来讲,人的腹部肌肉分为腹肌和腹外肌,腹肌和腹外斜肌会形成一条竖着的线条,而这条线就是马甲线,左右腹肌和腹外肌组合起

    生活 2021年10月26日
  • openLooKeng如何注册信息

    技术openLooKeng是如何登记信息的openLooKeng是如何登记信息的,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。简介为了了解各

    攻略 2021年12月24日
  • Redis五种数据类型的底层实现

    技术Redis五种数据类型的底层实现 Redis五种数据类型的底层实现简介
    Redis的五大数据类型也称五大数据对象;前面介绍过6大数据结构,Redis并没有直接使用这些结构来实现键值对数据库,而是使

    礼包 2021年11月11日
  • 什么是Capsulecorp-Pentest

    技术什么是Capsulecorp-Pentest本篇内容主要讲解“什么是Capsulecorp-Pentest”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“什么是Capsul

    攻略 2021年10月29日
  • 哥伦比亚说什么语言,哥伦比亚是个怎样的国家

    技术哥伦比亚说什么语言,哥伦比亚是个怎样的国家或许很多人都听过哥伦比亚这个国家哥伦比亚说什么语言,但却又相当陌生,毕竟这个南美洲的国度与北京有13个小时时差的国家与我们有万里之遥。哥伦比亚是南美洲第四大国,也是全球著名的

    生活 2021年10月26日
  • Hive基础操作的示例代码

    技术Hive基础操作的示例代码这篇文章将为大家详细讲解有关Hive基础操作的示例代码,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1.在hive的服务端新建源数据[root@hadoo

    攻略 2021年12月10日