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)

相关推荐

  • Python编程中的if __name__ == 'main' 的作用和原理是什么

    技术Python编程中的if __name__ == main 的作用和原理是什么这篇文章主要介绍“Python编程中的if __name__ == main 的作用和原理是什么”,在日常操作中,相信很多人在Python

    攻略 2021年10月26日
  • Linux前台的程序如何转到后台执行并且关闭终端而不杀死命令

    技术Linux前台的程序如何转到后台执行并且关闭终端而不杀死命令这篇文章给大家介绍Linux前台的程序如何转到后台执行并且关闭终端而不杀死命令,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。过SSH或

    攻略 2021年10月21日
  • 10款好用的MySQL GUI工具分别是什么

    技术10款好用的MySQL GUI工具分别是什么这篇文章将为大家详细讲解有关10款好用的MySQL GUI工具分别是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。My

    攻略 2021年11月29日
  • css3中设置文本阴影的属性是(css3球体掉落动画带阴影效果)

    技术css3怎么实现图片阴影效果这篇文章主要讲解了“css3怎么实现图片阴影效果”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“css3怎么实现图片阴影效果”吧!css3实

    攻略 2021年12月16日
  • 粉底液怎么用具体步骤,粉底液如何使用

    技术粉底液怎么用具体步骤,粉底液如何使用粉底液的使用可以用手也可以用粉扑粉底液怎么用具体步骤。 步骤一:先把粉底液涂抹在面部额头、下巴、面颊、鼻子五个点上,如果哪个部位毛孔较粗大,那么再取少量粉底液轻轻拍打,使粉底液融入

    生活 2021年10月22日
  • 如何理解Python RSS处理问题

    技术如何理解Python RSS处理问题这期内容当中小编将会给大家带来有关如何解决Python RSS处理问题,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Python应用程序作为一个

    攻略 2021年10月28日