У меня возникли некоторые проблемы при публикации данных с веб-страницы, используя jQuery, в сервлет. Хотя я опытный Java-разработчик, я очень плохо знаком с javascript / jQuery / servlets. Я использую Eclipse, Apache Tomcat и Chrome.

У меня есть файл XML (размером от 6 КБ до 30 МБ), который я хочу загрузить в браузер, изменить, а затем опубликовать в сервлете.

Мой HTML имеет:

<input id="filechooser" type="file" onchange="readFile()">

Мой JS имеет:

var file = document.getElementById('filechooser').files[0];
var reader;
reader = new FileReader();
reader.readAsText(file, "UTF-8");
reader.onload = loaded;
function loaded(evt){
   var result = evt.target.result;
   var xml = $(result);
   ...
   [make modifications to xml]
}

Некоторым кодом jQuery, который я использую при изменении xml, являются $(xml).find("NODE").val() и $(xml).find("OTHER_NODE").attr("attribute-name","newValue")

Теперь мне нужно отправить этот XML на URL, где он будет использоваться для обработки некоторой информации. В консоли Chrome я могу просмотреть содержимое объекта xml:

> xml
  [<!--?xml version="1.0" encoding="ISO-8859-1"?-->,#text,
   <root_element>...</root_element>]

> $(xml)
  [<!--?xml version="1.0" encoding="ISO-8859-1"?-->,#text,
   <root_element>...</root_element>]

> console.dir(xml)
  jQuery.fn.jQuery.init[3]
     0: #comment
     1: #text
     2: root_element
     length: 3
     __proto__: Object[0]

Мой сервлет пока пуст

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
   System.out.println("Post");
}

Я создал кнопку, которая выполняет некоторый JavaScript. Следующие два фрагмента кода отправляют сообщения на сервер:

$.post("http://localhost:8080/MyWebApp/MyWebAppUrl", xml);

И:

$.ajax({
   type: "POST",
   url: "http://localhost:8080/MyWebApp/MyWebAppUrl",
   data: xml
});

Моя проблема в том, что я не знаю, правильно ли я отправляю свой XML или как правильно его использовать. Что мне нужно сделать с моим кодом jQuery, чтобы опубликовать его правильно? Как я могу получить его из моего HttpServletRequest? Если я могу получить текст XML в виде строки, я точно знаю, как манипулировать им в Java, и заставить его делать все, что я хочу.

После 10+ часов поиска в Интернете я все еще не могу найти ответ. Я уверен, что это там, но я не могу соединить точки.

ОБНОВИТЬ:

Epascarello был замечен для публикации XML-документа. Однако я неправильно разбирал документ.

Обратите внимание, что я прочитал файл, а затем сохранил результат var xml = $(result). Файл читался как текстовая строка, и я преобразовывал его в документ HTML.

Мне нужно было var xml = jQuery.parseXML(result). Таким образом, мне не нужно было преобразовывать его обратно в текстовую строку, и использование заглавных букв тега сохраняется.

Обратите внимание, что поддержание капитализации имеет решающее значение.

2
Sean Crouse 25 Янв 2013 в 04:55

2 ответа

Лучший ответ

Установите тип контента

$.ajax({
   type: "POST",
   contentType: "application/xml",  //or text/xml?
   url: "http://localhost:8080/MyWebApp/MyWebAppUrl",
   data: xml
});
0
epascarello 25 Янв 2013 в 01:01

Добавьте processData: false к вашему вызову, и он должен оставить строку в покое ...

$.ajax({
   type: "POST",
   contentType: "application/xml",  //or text/xml?
   url: "http://localhost:8080/MyWebApp/MyWebAppUrl",
   data: xml,
   processData: false
});
0
Jesse 17 Апр 2013 в 00:07