Массив сервлетов в переменную javascript - PullRequest
0 голосов
/ 02 апреля 2019

Мне необходимо создать двумерный массив для моего extjs приложения.

У меня есть запрос mysql от сервлета, но мне нужно сохранить эти значения в двумерном массиве в javascript.

Я подумал над тем, чтобы сохранить двумерный массив из сервлета (используя tomcat) в двумерном массиве на моей странице jsp, где я использую сценарий для extjs.

Моя проблема заключается в понимании того, как можно вызвать из сервлета на страницу jsp нужную мне переменную и сохранить ее значение в переменной javascript. Пример:

Servlet

package connect;

import java.awt.List;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.*;
import java.util.ArrayList;
import java.util.Arrays;

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 com.mysql.jdbc.Driver;
import jdk.nashorn.internal.runtime.JSONFunctions;

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

public iServlet_debug_1() {
    super();
}

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

    String connectionString = "jdbc:mysql://localhost:3306/mydb?user=root&password=pass";

    try {
        Class.forName("com.mysql.jdbc.Driver");
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    }
    Connection connection = null;
    try {
        connection = DriverManager.getConnection(connectionString);
        Statement stm = connection.createStatement();
        ResultSet rs = ((java.sql.Statement) stm).executeQuery("select * from romanzi");

        //ArrayList<ArrayList<Object>> storeArray = new ArrayList<ArrayList<Object>>();
        //String[][] storeArray;
        String storeArray = null;
        //int n = 0;
        //int m = 0;
        while (rs.next()) {
            //first method
            /*ArrayList<Object> arr =  new ArrayList<Object>();
            ArrayList<Object> arr =  new ArrayList<Object>();
            arr.add(rs.getInt("id"));
            arr.add(rs.getString("titolo"));
            arr.add(rs.getString("ISBN"));
            arr.add(rs.getString("genere"));
            arr.add(rs.getInt("Npagine"));
            arr.add(rs.getInt("editore"));
            storeArray.add(arr);*/

            //second method
            /*storeArray[n][m]= rs.getString("id");
            m++;
            storeArray[n][m]= rs.getString("titolo");
            m++;
            storeArray[n][m]= rs.getString("ISBN");
            m++;
            storeArray[n][m]= rs.getString("genere");
            m++;
            storeArray[n][m]= rs.getString("Npagine");
            m++;
            storeArray[n][m]= rs.getString("editore");
            m=0;
            n++;*/
            storeArray += "["+rs.getString("id")
                        +","+rs.getString("titolo")
                        +","+rs.getString("ISBN")
                        +","+rs.getString("genere")
                        +","+rs.getString("Npagine")
                        +","+rs.getString("editore")
                        +"]";
            if(rs.next())
            {
                storeArray+= ",";
                rs.previous();
            }

        }
        response.setContentType("text/plain"); // sets the content type
        response.setCharacterEncoding("UTF-8"); // sets the encoding
        PrintWriter out = response.getWriter();
        out.append(storeArray); // writes the value of the String to the response
    }
    catch (SQLException e) {
        e.printStackTrace();
    } 
    catch (Exception e) {
        PrintWriter err = response.getWriter();
        err.print("<html><head></head><body>" + e.getMessage() + "</body></html>");
    } 
    finally {
        try {
            if (connection != null)
                connection.close();
        } catch (SQLException e) {

        }
    }
  }

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

}

  }

1020 * Javascript *

var temp = (storeArray Servlet variable);
var finalArray = JSON.parse("[" + temp + "]");

or

var finalArray = eval("[" + temp + "]");

Результат, который мне нужен, выглядит примерно так:

var finalArray = [
      ['value10','value11','value12'],
      ['value20','value21','value22'],
      ['value30','value31','value32']
];

Для следующей реализации мне нужно понять, как я могу получить значение сервлета и преобразовать его в переменную загрузки javascript на странице jsp.

По существу:

  • Я должен передать: массив переменных массива из сервлета в javascript (потому что мне нужен метод, который позволяет мне осуществлять связь из переменной сервлета и переменной javascript)
  • Или строка из сервлета в переменную javascript и после разделения на массив массивов

Вот и все.

Заранее спасибо и извините за мой "не очень хороший" английский.

1 Ответ

0 голосов
/ 04 апреля 2019

Я наконец решил свою проблему с библиотеками GSON / JSON.Внизу код:

Сервлет

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

    String connectionString = "jdbc:mysql://localhost:3306/mydb?user=root&password=pass";

    try {
        Class.forName("com.mysql.jdbc.Driver");
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    }
    Connection connection = null;
    try {
        connection = DriverManager.getConnection(connectionString);
        Statement stm = connection.createStatement();
        ResultSet rs = ((java.sql.Statement) stm).executeQuery("select * from novels");

        ArrayList<ArrayList<Object>> storeArray = new ArrayList<ArrayList<Object>>();
        ArrayList<Object> arr =  new ArrayList<Object>();
        while (rs.next()) {
            arr.add(rs.getInt("id"));
            arr.add(rs.getString("title"));
            arr.add(rs.getString("ISBN"));
            arr.add(rs.getString("genre"));
            arr.add(rs.getInt("Npages"));
            arr.add(rs.getString("publisher"));
            storeArray.add(arr);
            arr = new ArrayList<Object>();
        }
        Gson gson = new Gson();
        String jsonStore = gson.toJson(storeArray);
        response.setContentType("text/plain"); // sets the content type
        response.setCharacterEncoding("UTF-8"); // sets the encoding
        request.setAttribute("array", jsonStore);
    }
    catch (SQLException e) {
        e.printStackTrace();
    } 
    catch (Exception e) {
        PrintWriter err = response.getWriter();
        err.print("<html><head></head><body>" + e.getMessage() + "</body></html>");
    } 
    finally {
        try {
            if (connection != null)
                connection.close();
        } catch (SQLException e) {
            // error management
        }
    }
}

С помощью

Gson gson = new Gson();
String jsonStore = gson.toJson(storeArray);

можно перевести storeArray в строку JSON для javascript;

С помощью этого

response.setContentType("text/plain"); // sets the content type
response.setCharacterEncoding("UTF-8"); // sets the encoding
request.setAttribute("array", jsonStore);

мы можем отправить строку JSON во внешнюю часть;

Переменную строки JSON можно извлечь из jsp с помощью следующей части:

<%
    RequestDispatcher rd = request.getRequestDispatcher("/generate");
    rd.include(request, response);
    String store = (String)request.getAttribute("array");
%>

И, наконец, мы можем сохранить переменную в переменной javascript следующим образом:

var temp = <%=store%>;

, которая считывает переменную как переменную javascript "ArrayList"!

Надеюсь, вы это сделаетенайти это полезным.

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