Не работает кросс-сайт в форме кота - PullRequest
0 голосов
/ 27 ноября 2009

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

<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", ни одно из полей не достигает Сервлет на сервере B. Apache НЕ "впереди" Tomcat.

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

Ответы [ 3 ]

1 голос
/ 27 ноября 2009

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

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

0 голосов
/ 27 ноября 2009

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

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

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

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

Для людей, которые упоминают «getParameter» вместо «getAttribute», вы абсолютно правы. В моем тестовом коде у меня были оба, чтобы быть уверенными (потому что я думал, что потерял это ...), но оба не возвращали результаты, поскольку браузер просто не отправлял пары имя / значение.

Полагаю, размещение этой статьи в Stackoverflow помогло, потому что мне пришлось объяснить и перечитать мою проблему, и я подумал, что "id =" выглядит забавно. Кодирование - это поиск ошибок в фрагментах текста, который вы пропускаете ...

0 голосов
/ 27 ноября 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...