Java 请求参数在我的servlet中被修改

Java 请求参数在我的servlet中被修改,java,servlets,servlet-filters,Java,Servlets,Servlet Filters,我将一个带有数据的请求作为URL发送到servlet,但默认情况下servlet正在修改数据并作为请求发送。您能否建议如何使用我传递给servlet的数据维护请求URL,这些数据应该保持不变 示例:-当我将数据传递给servlet时 &ABCDEFG 当它在servelt中使用上述url作为请求时,如字符串abc=request.getParameter(“val”),val属性会自动修剪并分配为“val=PRCTXT | 12345”,但它应该类似于“val=PRCTXT | 12345&AB

我将一个带有数据的请求作为URL发送到servlet,但默认情况下servlet正在修改数据并作为请求发送。您能否建议如何使用我传递给servlet的数据维护请求URL,这些数据应该保持不变

示例:-当我将数据传递给servlet时

&ABCDEFG


当它在servelt中使用上述url作为请求时,如字符串abc=request.getParameter(“val”),val属性会自动修剪并分配为“val=PRCTXT | 12345”,但它应该类似于“val=PRCTXT | 12345&ABCDEFG”。请在这方面帮助我。

servlet将URL中的每个&解释为新参数的开始。因此,当它看到&ABCDEFG时,它认为您正在发送一个名为ABCDEFG的没有值的新参数(尽管根据规范,这在技术上是一个“无键值”)

有两件事可以解决这个问题,第一件事是当您想实际发送一个&,请改用%26。这将被分割参数的代码跳过,但会转换为参数值中的实数

第二种方法是将空格替换为+。URL中的空格有时会起作用,但可能会有问题

因此,您的实际请求URL应该如下所示:

http://localhost/helloservlet/servlet/ppd.abcd.build.coupons.CouponValueFormatterServlet?dsn=frd_abc_abcde&lang=ENG&val=PRCTXT|12345+%26ABCDEFG
var userInput = *get some input here*
var addr = 'http://www.example.com?param1=' + encodeURIComponent(userInput);
如果要在javascript中构建这些参数,可以使用encodeURIComponent()为您修复所有问题字符。所以你可以这样做:

http://localhost/helloservlet/servlet/ppd.abcd.build.coupons.CouponValueFormatterServlet?dsn=frd_abc_abcde&lang=ENG&val=PRCTXT|12345+%26ABCDEFG
var userInput = *get some input here*
var addr = 'http://www.example.com?param1=' + encodeURIComponent(userInput);

servlet将URL中的每个&解释为新参数的开始。因此,当它看到&ABCDEFG时,它认为您正在发送一个名为ABCDEFG的没有值的新参数(尽管根据规范,这在技术上是一个“无键值”)

有两件事可以解决这个问题,第一件事是当您想实际发送一个&,请改用%26。这将被分割参数的代码跳过,但会转换为参数值中的实数

第二种方法是将空格替换为+。URL中的空格有时会起作用,但可能会有问题

因此,您的实际请求URL应该如下所示:

http://localhost/helloservlet/servlet/ppd.abcd.build.coupons.CouponValueFormatterServlet?dsn=frd_abc_abcde&lang=ENG&val=PRCTXT|12345+%26ABCDEFG
var userInput = *get some input here*
var addr = 'http://www.example.com?param1=' + encodeURIComponent(userInput);
如果要在javascript中构建这些参数,可以使用encodeURIComponent()为您修复所有问题字符。所以你可以这样做:

http://localhost/helloservlet/servlet/ppd.abcd.build.coupons.CouponValueFormatterServlet?dsn=frd_abc_abcde&lang=ENG&val=PRCTXT|12345+%26ABCDEFG
var userInput = *get some input here*
var addr = 'http://www.example.com?param1=' + encodeURIComponent(userInput);

&
需要进行URL编码。当前您有一个名为
ABCDEFG
的变量,没有值。
&
需要进行URL编码。当前您有一个名为
ABCDEFG
的变量,没有值。基本上是这样从Flex向servlet传递URL:coupValImg.source=“/”+Model.site.siteInfo.webContext+”/servlet/cpd.campaign.build.coupons.CouponValueFormatterServlet?lang=“+cmpnLanguage+”&val=“+variable.value+”&width=“+variable.width+”&height=”+variable.height+“&zoomFactor=“+zoomFactor.toString()+”&bgcolor=“+variable.bgcolor+”&fgcolor=“+variable.fontColor;在URL中,我将值作为variable.value=“ABCDEF&12345”传递,URL将完美地传递给servlet。但当servlet通过请求使用值时,getAttribute(“val”)只显示“ABCDEF”,而不显示我作为值传递的全长字符串。请让我知道,如何实现这一点,即使在尝试encodeURLComponent(val)后也不起作用。我输入了错误的方法名称,它应该是
encodeURIComponent()
。以上已更正。我对Flex一无所知,但试着将构建的URL发送到浏览器控制台,看看它是否正在修复
val
console.log(coupValImg.source)
基本上是这样从Flex向servlet传递URL:coupValImg.source=“/”+Model.site.siteInfo.webContext+“/servlet/cpd.campaign.build.couples.CouponValueFormatterServlet?lang=“+cmpnLanguage+”&val=“+variable.value+”&width=“+variable.width+”&height=“+variable.height+“&zoomFactor=“+zoomFactor.toString()+”&bgcolor=“+variable.bgcolor+”&fgcolor=“+variable.fontColor;”在URL中,我以variable.value=“ABCDEF&12345”的形式传递值,URL传递到servlet的过程非常完美。但当servlet通过请求使用该值时,getAttribute(“val”)仅显示“ABCDEF”“未显示作为值传递的全长字符串。请让我知道,如何实现这一点,即使在尝试encodeURLComponent(val)后也不起作用。我输入了错误的方法名称,它应该是
encodeURIComponent()
。以上已更正。我对Flex一无所知,但试着将构建的URL发送到浏览器控制台,看看它是否正在修复
val
值<代码>控制台.log(coupValImg.source)