Java 为什么post请求中的参数名由jetty进行URL编码,以及如何避免?

Java 为什么post请求中的参数名由jetty进行URL编码,以及如何避免?,java,http,jetty,urlencode,apache-commons-httpclient,Java,Http,Jetty,Urlencode,Apache Commons Httpclient,我正在使用httpClient向jetty服务器发送post请求。 请求头设置为: 'method.setRequestHeader(“内容类型”,“应用程序/x-www-form-urlencoded;字符集=UTF-8”);' 我发现,如果我的参数名有一个空格,它将被jetty编码为“+”。我说这是由jetty完成的,因为我没有这么做。 例如,如果我的post参数名中有一个是“id”,那么当我稍后在servlet中看到它时,它将被转换为“id+”。 如果我在jboss服务器上启动同一个web

我正在使用httpClient向jetty服务器发送post请求。
请求头设置为:
'method.setRequestHeader(“内容类型”,“应用程序/x-www-form-urlencoded;字符集=UTF-8”);'
我发现,如果我的参数名有一个空格,它将被jetty编码为“+”。我说这是由jetty完成的,因为我没有这么做。
例如,如果我的post参数名中有一个是“id”,那么当我稍后在servlet中看到它时,它将被转换为“id+”。
如果我在jboss服务器上启动同一个web应用程序,则一切正常,“id”保持为“id”,不会对任何内容进行编码。
有人能告诉我如何避免这种情况吗?jetty服务器在这个问题上的行为是否与jboss服务器相同?如何配置它?

谢谢

你指的是哪个httpclient,哪个版本?不止一个。嗨,我正在使用httpClient 3.1。我认为这不是httpClient的问题。因为我尝试了httpClient 3.x和4.x。结果是一样的。所以我怀疑jetty是否对参数名做了什么。它是ApacheHttpClient 3.1您能在servlet/handler中发布jetty端正在做什么吗?以及如何使用http客户端在客户端上构造请求。另外,您使用的Jetty的具体版本是什么?我使用wireshark捕获了网络包,发现在网络中传输时,所有空格都已经进行了URL编码。所以这是由httpClient完成的,而不是jetty。根据html规范:,所有参数的名称和值都应该是urlEncoded,所以httpClient做得对。我不知道为什么jetty不解码参数名,而jboss解码。我用的是jetty 7.2。