2016-08-02 4 views
1

Я отправил один запрос как URL-адрес с данными в сервлет, но по умолчанию сервлет модифицирует данные и отправляет их в качестве запроса. Можете ли вы предложить, как поддерживать URL-адрес запроса с данными, которые я передал сервлету, должен оставаться таким же?Параметр запроса изменен в моем сервлете

Пример: - когда я передавая данные в сервлет

http://localhost/helloservlet/servlet/ppd.abcd.build.coupons.CouponValueFormatterServlet?dsn=frd_abc_abcde&lang=ENG&val=PRCTXT|12345 & ABCDEFG

, когда он с использованием вышеуказанного URL в servelt как запрос, как и строки аЬс = request.getParameter (» val "), атрибут val автоматически обрезается и присваивается как« val = PRCTXT | 12345 », но он должен быть как« val = PRCTXT | 12345 & ABCDEFG ». Пожалуйста помоги мне с этим.

+3

'&' должен быть закодирован в URL. В настоящее время у вас есть переменная, называемая 'ABCDEFG', без значения. –

ответ

0

Сервлет интерпретирует каждый & в 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 

Если вы строите эти параметры в JavaScript, вы можете использовать encodeURIComponent(), чтобы зафиксировать все проблемные символы для вас. Таким образом, вы можете сделать что-то вроде этого:

var userInput = *get some input here* 
var addr = 'http://www.example.com?param1=' + encodeURIComponent(userInput); 
+0

основном прохождение URL в сервлет из Flex, как это: coupValImg.source = "/" + Model.site.siteInfo.webContext + \t \t \t \t \t "/servlet/cpd.campaign.build.coupons.CouponValueFormatterServlet?lang=" + cmpnLanguage + "& val =" + variable.value + "& width =" + variable.width + "& height =" + variable.height + \t \t \t \t \t "& zoomFactor =" + zoomFactor.toString() + "& bgcolor =" + variable.bgColor + "& fgcolor =" + variable.fontColor; – Ravikanth

+0

в URL-адресе, я передаю значение как variable.value = "ABCDEF & 12345", а URL-адрес передается в сервлет отлично. Но когда сервлет использует значение через request.getAttribute («val»), отображается только «ABCDEF», не отображающий строку полной длины, которую я передал как значение. Пожалуйста, дайте мне знать, как этого добиться, даже после попытки encodeURLComponent (val) также не работает. – Ravikanth

+0

Я ошибся имя метода, оно должно быть 'encodeURIComponent()'. Исправлено выше. Я ничего не знаю о Flex, но попробуйте отправить сконфигурированный URL-адрес в консоль браузера и посмотреть, исправляет ли это значение 'val'. 'Console.log (coupValImg.source)' –