#java #forms #servlets #servlet-filters
#java #формы #сервлеты #сервлет-фильтры
Вопрос:
Я отправляю post-запрос из формы в сервлет перенаправления. Затем сервлет записывает форму в свой объект ответа (getWriter). Эта форма содержит несколько скрытых полей. Я использую javascript для отправки этой формы (javascript также записывается в объект ответа). Целью этой формы является другой сервлет.
Теперь я пишу фильтр для перехвата скрытых параметров, которые я отправляю другому сервлету (на другой сервер). Однако, когда я делаю: String[] values = req.getParameterValues(имя);
Я не получаю никаких значений ни для одного из параметров, которые я ввел в строку «name». Я не могу изменить архитектуру кода (не мою). Мне просто нужно получить параметры, отправленные первым сервлетом в моем фильтре, но я продолжаю получать null. Любая помощь приветствуется.
мой первый код сервлета:
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head><title>redirectServlet</title></head>");
out.println("<body>");
out.println("<form name="go" method="post" action="http://"
remotehost "/somerep/someservlet?">");
out.println("<input type=hidden name=userid value=" conn "> ");
out.println("<input type=hidden name=paramform value=no> ");
out.println("<input type=hidden name=nonblocksql value=no> ");
out.println("<input type=hidden name=recursive_load value=no> ");
out.println("<input type=hidden name=job_seq_id value=" jobId ">");
out.println("<input type=hidden name=destype value=cache> ");
out.println("<input type=hidden name=desformat value=pdf> ");
out.println("</form> ");
out.println("<script language="JavaScript" type="text/javascript"> ");
out.println("document.getElementById('go').submit();");
out.println("</script>");
out.println("</body>");
out.println("</html>");
Комментарии:
1. Трудно сказать, не видя какого-либо кода
2. Мэтт, я обновил свой вопрос с помощью некоторого кода. Этот сервлет отправит форму с использованием javascript указанному удаленному сервлету. Я хочу перехватить этот запрос с помощью фильтра сервлета на удаленном компьютере / сервере сервлета.
3. Вам действительно следует рассмотреть возможность использования JSP для HTML-частей и сервлетов для логических частей.
4. Из любопытства, почему вы просто не отправляете HTTP-сообщение от имени браузера? Текущая реализация является своего рода WTF.
5. @MattBall я подумал то же самое, поверьте мне! Моя задача — просто написать фильтр (или, чтобы выполнить свою работу, мне нужно написать фильтр). Я понятия не имею, почему они решили сделать это так… @Pilipp правда, так будет лучше, но я работаю в рамках созданного проекта в фреймворке под названием ADF (sux!). В любом случае, спасибо за ваши ответы.
Ответ №1:
В этом сгенерированном HTML нет элемента с идентификатором go
. Изменить
out.println("<form name="go" method="post" action="http://"
// to
out.println("<form id="go" method="post" action="http://"
Комментарии:
1. Хороший улов, однако это работает с точки зрения вызова удаленного сервлета… Я изменюсь и посмотрю, будет ли это иметь значение. Спасибо!: только что попробовал .. похоже, это не имеет значения в IE. Я могу получить заголовки нормально, но не скрытые параметры.