将JSON数组从Javaservlet传递到HTML

将JSON数组从Javaservlet传递到HTML,java,javascript,ajax,json,Java,Javascript,Ajax,Json,我正在从事一个项目,该项目涉及从MySQL数据库检索数据并对其进行分页。我正在使用JSON AJAX和JavaScript。我不熟悉JSON和AJAX。我已经从数据库中获取了数据,并使用servlet存储在JSON对象中。我的问题是,如何将这些数据从Servlet传递到目标HTML文件? 如果我使用Javascript,那么如何使用呢 Servlet文件 import java.io.IOException; import java.sql.*; import java.io.PrintWrit

我正在从事一个项目,该项目涉及从MySQL数据库检索数据并对其进行分页。我正在使用JSON AJAX和JavaScript。我不熟悉JSON和AJAX。我已经从数据库中获取了数据,并使用servlet存储在JSON对象中。我的问题是,如何将这些数据从Servlet传递到目标HTML文件? 如果我使用Javascript,那么如何使用呢

Servlet文件

import java.io.IOException;
import java.sql.*;
import java.io.PrintWriter;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.json.simple.*;

public class DbServlet extends HttpServlet implements DatabaseConstants {
    private static final long serialVersionUID = 1L;

    protected void doPost(HttpServletRequest request,
            HttpServletResponse response) {
        String jdbcDriver, jdbcURL, username, password, query;
        String errorCode = null;
        int i = 0;
        int columnCount = 0;

        response.setContentType("application/json");

        jdbcDriver = request.getParameter(JDBC_DRIVER);
        jdbcURL = request.getParameter(JDBC_URL);
        username = request.getParameter(USERNAME);
        password = request.getParameter(PASSWORD);
        query = request.getParameter(QUERY);

        Connection con = null;
        PrintWriter out = null;
        Statement stmt = null;
        ResultSet resultSet = null;

        JSONObject jsonObject = null, sendDBJsonObject = null;
        JSONArray dbResultJSON;

        try {
            out = response.getWriter();

            Class.forName(jdbcDriver);
            System.out.println("Attempting to establish connection..");
            con = DriverManager.getConnection(jdbcURL, username, password);
            System.out.println("Connection succeeded..");

            stmt = con.createStatement();
            resultSet = stmt.executeQuery(query);

            if (!resultSet.first()) {
                out.println("<h3>There are no rows in the requested database.</h3>");
            } else {

                ResultSetMetaData rsmd = resultSet.getMetaData();

                columnCount = rsmd.getColumnCount();

                dbResultJSON = new JSONArray();

                resultSet.beforeFirst();
                while (resultSet.next()) {
                    // out.println("<tr>");
                    jsonObject = new JSONObject();
                    for (i = 1; i <= columnCount; i++) {
                        jsonObject.put(rsmd.getColumnLabel(i),
                                (resultSet.getString(i) == null ? "empty"
                                        : resultSet.getString(i)));
                    }
                    dbResultJSON.add(jsonObject);
                }
                sendDBJsonObject = new JSONObject();
                sendDBJsonObject.put("dbResults", dbResultJSON);
                /*
                 * out.println("</table>"); out.println("<select>" +
                 * "<option value=\"five\">5</option>" +
                 * "<option value=\"ten\">10</option>" +
                 * "<option value=\"twenty\">20</option>" +
                 * "<option value=\"fifty\">50</option>" + "</select>");
                 */
                response.sendRedirect("result.html");
            }
        } catch (SQLException | ClassNotFoundException e) {

            if (jdbcDriver.isEmpty())
                errorCode = "SQL Error. Please enter a valid SQL Driver.";
            else if (jdbcURL.isEmpty())
                errorCode = "SQL Error. Please enter a valid SQL URL.";
            else if (username.isEmpty())
                errorCode = "Access Denied. Please enter a valid Username.";
            else if (password.isEmpty())
                errorCode = "Access Denied. Please enter a valid password.";
            else if (query.isEmpty())
                errorCode = "SQL Error. Cannot issue empty query.";
            else
                errorCode = e.getLocalizedMessage();

            try {
                response.sendError(500, errorCode);
            } catch (IOException ioE) {
                ioE.printStackTrace();
            }

        } catch (IOException ioE) {
            ioE.printStackTrace();
        } finally {
            if (resultSet != null) {
                try {
                    resultSet.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if (stmt != null)
                try {
                    stmt.close();
                } catch (SQLException e1) {
                    e1.printStackTrace();
                }
            if (out != null)
                out.close();
            if (con != null)
                try {
                    con.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
        }
    }
}
import java.io.IOException;
导入java.sql.*;
导入java.io.PrintWriter;
导入javax.servlet.http.HttpServlet;
导入javax.servlet.http.HttpServletRequest;
导入javax.servlet.http.HttpServletResponse;
导入org.json.simple.*;
公共类DbServlet扩展HttpServlet实现DatabaseConstants{
私有静态最终长serialVersionUID=1L;
受保护的void doPost(HttpServletRequest请求,
HttpServletResponse(响应){
字符串jdbcDriver、jdbcURL、用户名、密码、查询;
字符串errorCode=null;
int i=0;
int columnCount=0;
setContentType(“应用程序/json”);
jdbcDriver=request.getParameter(JDBC\u驱动程序);
jdbcURL=request.getParameter(JDBC\uURL);
username=request.getParameter(用户名);
password=request.getParameter(密码);
query=request.getParameter(查询);
连接con=null;
PrintWriter out=null;
语句stmt=null;
ResultSet ResultSet=null;
JSONObject JSONObject=null,sendDBJsonObject=null;
JSONArray-dbResultJSON;
试一试{
out=response.getWriter();
类forName(jdbcDriver);
System.out.println(“试图建立连接…”);
con=DriverManager.getConnection(jdbcURL、用户名、密码);
System.out.println(“连接成功…”);
stmt=con.createStatement();
resultSet=stmt.executeQuery(查询);
如果(!resultSet.first()){
println(“请求的数据库中没有行。”);
}否则{
ResultSetMetaData rsmd=resultSet.getMetaData();
columnCount=rsmd.getColumnCount();
dbResultJSON=new JSONArray();
resultSet.beforeFirst();
while(resultSet.next()){
//out.println(“”);
jsonObject=新的jsonObject();

对于(i=1;i如果我是正确的,我将按照以下方式进行更改(至少我已经对代码进行了更改):

好的,您似乎已经完成了大部分正确的部分。唯一不同的是,我已经将JSONObject对象分配到JSON数组中

第二,在响应部分,您需要将JSONArray obj.data绑定到响应,而不是直接向HTML/JSP页面发送重定向响应

response.sendRedirect("result.html");
这样做:

response.getWriter().write(jArray.toString());
这负责Servlet部分。现在在
result.html
页面中,您需要添加以下代码以获取jArray数据

/** Calling the servlet using Jquery getJSON method 
  * @url: Servlet URL 
  * @data: the value servlet returns
*/
$.getJSON(url, function(data) {

      //iterating over each value that the servlet returns
      $.each(data, function(key, value) {
               Alert(value.rs_val_one); //alerting the values set in the JSONObject of the Sevlet.
               Alert(value.rs_val_two);
     });
});
注意这里我使用jQueryAjax从同一页面调用了Servlet

要获得更详细的解释,您可以尝试上面评论中提到的方法


希望这能解决您的问题:)

您可以看看这个:
/** Calling the servlet using Jquery getJSON method 
  * @url: Servlet URL 
  * @data: the value servlet returns
*/
$.getJSON(url, function(data) {

      //iterating over each value that the servlet returns
      $.each(data, function(key, value) {
               Alert(value.rs_val_one); //alerting the values set in the JSONObject of the Sevlet.
               Alert(value.rs_val_two);
     });
});