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)

相关推荐

  • AspNetCore应用注意哪些点

    技术AspNetCore应用注意哪些点今天就跟大家聊聊有关AspNetCore应用注意哪些点,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。背景已经有很多文章记录了

    攻略 2021年11月18日
  • 描写城市的成语,描写城市生活的四字词语

    技术描写城市的成语,描写城市生活的四字词语描写城市的四字词语有描写城市的成语:车水马龙 摩肩接踵、十里长街、华灯璀璨、川流不息、人声鼎沸、车水马龙 四衢八街 八街九陌 车水马龙 摩肩接踵、十里长街、华灯璀璨、川流不息

    生活 2021年10月26日
  • 第二十三章 Centos7下Docker安装kibana

    技术第二十三章 Centos7下Docker安装kibana 第二十三章 Centos7下Docker安装kibana一、查找kibana镜像
    [root@staging ~]# docker sear

    礼包 2021年12月24日
  • Java 内存模型

    技术Java 内存模型 Java 内存模型Java 内存模型
    Java 内存模型简称JMM,全名 Java Memory Model 。Java 内存模型规定了 JVM 应该如何使用计算机内存(RAM)

    礼包 2021年11月24日
  • socket编程中常用协议有哪些

    技术socket编程中常用协议有哪些这篇文章给大家分享的是有关socket编程中常用协议有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1.ip IP协议是将多个包交换网络连接起来,它在源

    攻略 2021年11月17日
  • @Autowired 与@Resource的异同点

    技术@Autowired 与@Resource的异同点 @Autowired 与@Resource的异同点前言
    最近写代码的时候,碰到一个小问题;可以看到,Spring Boot不推荐使用@Autowi

    礼包 2021年12月24日