如何解析servlet生成的XML

时间:2016-01-12 22:45:38

标签: java xml parsing servlets xml-parsing

这是我的简单Java servlet,它生成从简单数据库中检索它的XML代码:

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.sql.*;
import java.io.*

@WebServlet("/XML")
public class XML extends HttpServlet {
   private static final long serialVersionUID = 1L;

    public XML() {
        super();
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}

/**
 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
 */
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    Connection connection;
    Statement statement;

    response.setContentType("application/xml");
    PrintWriter printwriter = response.getWriter();

    printwriter.println("<?xml version=\"1.0\"?>");
    printwriter.println("<document>");

    try {
        Class.forName("com.mysql.jdbc.Driver").newInstance();
        connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/AppDB", "***", "****");

        statement = connection.createStatement();

        String SQL = "SELECT first_name, last_name FROM contacts";
        ResultSet resultset = statement.executeQuery(SQL);

        while(resultset.next()) {
            printwriter.println("<first> " +  resultset.getString("first_name") + " </first>");
            printwriter.println("<last> " +  resultset.getString("last_name") + " </last>");
        }
        resultset.close();
        statement.close();
        connection.close();
    }
    catch (Exception e) {
    }
    printwriter.println("</document>");
    printwriter.close();
}

}

现在,我想在客户端解析它以显示数据,但我不知道该怎么做。我尝试使用带有SAX解析器的JSP文件,但是当我放入以下Servlet URL时服务器给我一个错误:

Document doc = docBuilder.parse("http://localhost:8080/Example/XML");

有人可以帮我提一些解决问题的建议吗? 谁能知道一种可能的替代方法来做同样的事情?那么JQuery还是Ajax呢? (即使我刚刚读了一些关于它的事情,但我对它们并不了解)

1 个答案:

答案 0 :(得分:0)

在POST或GET之间选择

GET =&gt;像这样使用docBuilder.parse,并在你的应用程序中编写doGet。

您只需重定向到doPost

即可
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
doPost (request,response);
}

发布 =&gt;不要改变你的servlet,而是改变你的客户。

<强> 1。带URL的docBuilder也是这样,但默认情况下使用GET:

Document doc = docBuilder.parse(new URL("http://localhost:8080/Example/XML").openStream());

看到:How to read XML response from a URL in java?

<强> 2。所以改为POST

使用

URL url = new URL("http://localhost:8080/Example/XML");
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("POST");
InputStream is= connection.getInputStream();
Document doc = docBuilder.parse(is);

但要注意:如果你想传递数据,你必须先输入:

OutputStream out = connection.getOutputStream();
out.write(parameters and data here);
out.close(); 

看到: How can I send POST data through url.openStream()?

How to read XML response from a URL in java?

Sending HTTP POST Request In Java