Как отправить массив из сервлета и получить в HTML jquery?

#java #javascript #html #servlets #jquery

#java #javascript #HTML #сервлеты #jquery

Вопрос:

Я анализирую загруженный XML-файл с помощью dom, генерируя строку, в которой hostname и osname преобразуются в строку, разделенную , разделителем. s это переменная с этой строкой, и я отправляю ее обратно в HTML, используя response.getWriter object obj . Но вместо того, чтобы печатать его, например: Windows,Abhishek я бы хотел разделить его с помощью разделителя , . Может кто-нибудь показать мне пример кода того, как я могу получить эту строку в jQuery или JS, а затем разделить ее на две строки?

 try {
    out.println("Using Commons File Upload");
    List items = uploadHandler.parseRequest(request);
    Iterator itr = items.iterator();
    String str=null;
    while(itr.hasNext()) {
        FileItem item = (FileItem) itr.next();

        if(item.isFormField()) {

            /*out.println("Form Input Name = " item.getFieldName() ", Form Input Value = " item.getString());*/
        } else {
            /*out.println("Field Name = " item.getFieldName() 
                ", File Name = " item.getName() 
                ", Content type = " item.getContentType() 
                ", File Size = " item.getSize());   */              
            File file = new File(destinationDir,item.getName());

            item.write(file);

            str=item.getName();

            try {
                DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
                DocumentBuilder db = dbf.newDocumentBuilder();
                File xmlFile = new File(destinationDir,str);

                if (file.exists()) {
                    Document doc = db.parse(xmlFile);
                    Element docEle = doc.getDocumentElement();

                    NodeList csmList = docEle.getElementsByTagName("system");

                    if (csmList != null amp;amp; csmList.getLength() > 0) {
                        for (int i = 0; i < csmList.getLength(); i  ) {

                            Node node = csmList.item(i);

                            if (node.getNodeType() == Node.ELEMENT_NODE) {

                                Element e = (Element) node;
                                NodeList nodeList = e.getElementsByTagName("hostname");
                                s=nodeList.item(0).getChildNodes().item(0).getNodeValue();
                                //System.out.println("HOSTNAME: "  nodeList.item(0).getChildNodes().item(0).getNodeValue());

                                nodeList = e.getElementsByTagName("osname");
                                s ="," nodeList.item(0).getChildNodes().item(0).getNodeValue();
                                //System.out.println("OSNAME: "   nodeList.item(0).getChildNodes().item(0) .getNodeValue());
                            }
                        }
                        out.println(s);
                    }
                }
                else {
                    System.out.println("File Not Found");
                }

            }
            catch (Exception e) {
                System.out.println(e);
            }

        }

    }
    out.close();
    System.out.println(str);


}catch(FileUploadException ex) {
    log("Error encountered while parsing the request",ex);
} catch(Exception ex) {
    log("Error encountered while uploading file",ex);
}
  

Часть Javascript:

 function postData() {
    $.post("/com/FileUploadServlet", { "file": "/com/FileUploadServlet" }, function(data) {
        alert(data); 
    });
}

$(document).ready(function() {
    postData();
});
  

alert(data); Печатает "Using Commons File Upload" , но в сервлете out.println(s); не выдает мне мои данные в предупреждении, вместо этого оно выдается пустым.

Комментарии:

1. Отладьте код. Какой код в сервлете выполняется, а какой нет? Симптомы указывают на то, что s просто никогда не заполняется.

Ответ №1:

Вы заявляете, что отправляете в браузер строку, разделенную запятой, и хотите разделить ее на запятую в Javascript / jQuery. Это разумное резюме вашего вопроса? Мне показалось, что это довольно сложно читать, но я думаю, что это то, о чем вы спрашиваете, так что именно на это я отвечу. 🙂

В Javascript есть .split() метод, который вы можете использовать для любой строковой переменной.

Итак, когда вы получаете строку в своем коде Javascript, вы можете просто сделать что-то вроде этого:

 var splitstring = inputstring.split(',');
  

Надеюсь, это поможет. (хотя у меня такое ощущение, что в вопросе есть нечто большее, чем моя интерпретация)

Комментарии:

1. Спасибо за информацию. Извините за такой большой вопрос, короче говоря, я хотел бы знать, используя мой код, как я получу строку, разделенную запятыми, на той же HTML-странице, с которой я отправил загружаемый файл.

2. Мне удалось решить это, отправив не массив, а строку текста, разделенную , разделителем. Вот ссылка, если кто-то 1 захочет взглянуть. elmicoxcodes.blogspot.com/2007/03 /…

Ответ №2:

Например, вы можете преобразовать массив в java в строку JSON, а затем на стороне javascript создать из него объект, подобный этому:

 var myObject = eval('('   myJSONtext   ')');
  

Комментарии:

1. Привет, спасибо за ваш ответ. Я использовал JSON, но теперь из DefaultHandler как мне передать объект JSON? JSONObject obj=new JSONObject(); obj.put("host",summ[0]); obj.put("name",summ[1]);

2. Можете ли вы показать мне пример, который поможет мне передать этот объект JSON изнутри блока DefaultHandler и использовать его в jquery?

3. Эй, я отредактировал свой код. Теперь, кажется, намного проще передавать данные, поскольку это единственный массив строк, поэтому я могу передавать с некоторым разделителем. Я хотел бы знать, как я мог бы получать строки из моего сервлета на ту же HTML-страницу, с которой я загрузил файл, чтобы показать строку (сервлет вернул строку).