2009-11-26 2 views
0

Для клиента мне нужно написать сервлет, который может печатать значения в сообщении формы. Форма размещена на другом сервере, и выглядит примерно так:Перекрестная ссылка на сообщение для сайта tomcat не работает

<form action="http://myserver/myServlet" method="POST"> 
<input type="text" id="someName" value="someInterestingValue"/> 
<input type="submit" value="submit" /> 
</form> 

У меня есть сервер Tomcat 5.0.28 доступный, работает на Java 1.4 JDK, так что я сделал простой сервлет:

public class ProxyServlet extends HttpServlet { 
    public void doPost(HttpServletRequest req, 
         HttpServletResponse res) 
         throws ServletException, IOException { 
     PrintWriter out = res.getWriter();  
     Enumeration a =req.getAttributeNames(); 
     while (a.hasMoreElements()){ 
      String attrname = (String) a.nextElement(); 
      out.println(attrname+"="+req.getAttribute(attrname)+"<br/>"); 
     } 
     out.close(); 
    } 
} 

Когда я иду на сервлет по URL-адресу, все выглядит так, как ожидалось. Когда я отправляю запрос GET с некоторыми параметрами, я могу видеть их как атрибуты в отладчике в методе doGet() (метод был оставлен для краткости).

Однако в doPost() поля моей формы, кажется, отсутствуют. Я просмотрел лог-файлы Tomcat, и ничего особенного не занесено в журнал. Я попытался добавить crossdomain.xml в некоторые каталоги, но не нашел способ изменить это поведение.

Так, чтобы быть ясным: форма, указанная выше, находится на сервере A. Мой сервлет работает на существующем унаследованном приложении Tomcat/Java, размещенном на сервере B. Когда форма имеет тип «POST», ни одно из полей не приходит к Servlet на сервере B. Apache НЕ «впереди» Tomcat.

Есть ли какие-то настройки конфигурации, которых я не хватает в Tomcat? Любые советы или предложения, где смотреть дальше? Справка с благодарностью.

ответ

0

Обнаружена проблема. После целого дня поиска и кодирования все сводится к тому, что мой код работает нормально. Проблема в форме. линия:

<input type="text" id="someName" value="someInterestingValue"/> 

Следует читать:

<input type="text" name="someName" value="someInterestingValue"/> 

Для людей с упоминанием "getParameter" вместо "GetAttribute" вы совершенно правильно. В моем тестовом коде у меня были оба, чтобы быть уверенными (потому что я думал, что потерял его ...), но оба не вернули результаты, так как браузер просто не отправлял пары имя/значение.

Я думаю, что публикация этого вопроса на Stackoverflow помогла, потому что мне пришлось объяснить и перечитать мою проблему. Я думал, что «id =» выглядит смешно. Кодирование находит ошибки в фрагментах текста, которые вы просматриваете ...

+0

А, это пропустило мой глаз. Было бы слишком очевидно, да. Это помогло бы больше, если бы вы на самом деле сказали, что 'getParameter()' stuff также не работает. Тем не менее, рад, что вы решили это самостоятельно. – BalusC

+0

Да, мой плохой, у меня был исходный код getParameter(), но я думал, что могу потерять его, чтобы сделать вопрос немного короче. – Rolf

1

Запросить атрибуты? Вам не нужно обращаться к ним в качестве параметров запроса, используя HttpServletRequest#getParameter() и так далее?

Который добавляет больше путаницы в том, что вы сказали, что он работает в doGet(). Как выглядит его код? Имеет ли он также доступ к ним в качестве атрибутов? Это было бы в нормальной среде JSP/Servlet (т. Е. Вы не используете какой-либо фильтр, который копирует параметры для атрибутов или так) были невозможны.

0

Это не имеет никакого отношения к кросс-сайту. Как сказал BalusC, используйте getParameter ... вместо getAttribute ... методы

Смежные вопросы