Сервлет Java / Jsp / CanvasJs Получение данных из сервлета в Jsp - PullRequest
0 голосов
/ 10 октября 2019

Привет, я новичок в Webdevelopment и Java, спасибо за помощь заранее.

Я пытаюсь получить предопределенные данные из сервлета в граф canvasjs в jsp.

Iиспользуйте Eclipse Oxygen и TomCat 8.5

Короче говоря, мой код выглядит так:

ChartValues.java просто имеет переменную инстанцирования, поэтому я не думаю, что стоит показывать

jsp File:

<%@page import="saagnik.ChartValues"%>
<%@page import="java.util.ArrayList"%>
<%@page session="true" %>

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <script type="text/javascript"src="https://canvasjs.com/assets/script/canvasjs.min.js"></script>

        <script type="text/javascript">

        window.onload = function() {

        var datapoints=[];

        var chart = new CanvasJS.Chart("chartContainer1",{
           title:{
                text: "Anzahl der Requests"
            },
            data: [{
                    type: "splineArea",
                    name: "Anzahl",
                    dataPoints: datapoints
                }]
        });

        String test=(String)session.getAttribute("test1");

        datapoints.push({x: new Date(2015, 03, 10), y: 10});

        chart.render();
    </script>
    </header>
    <body>
         <div id="chartContainer1"></div>
    </body>
    </html>

Когда я комментирую строку сеанса, программа работает нормально, но когда она включена, графики не создаются.

Файл сервлета:

    package saagnik; 
    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 javax.servlet.http.HttpSession;

    @WebServlet("/ChartServlet")
    public class ChartServlet extends HttpServlet {
        private static final long serialVersionUID = 1L;
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
                doPost(request,response);
        }
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {

            int test =10;
            HttpSession session=request.getSession(true);
            session.setAttribute("test1", test);

            response.sendRedirect("CharttestCanvas3.jsp");

        }
}

Также попробовал это с запросами в doGet вроде:

ChartValues[] articles =
                new ChartValues[] {new ChartValues(39500,1.5,0.5,"16/01/09/2019"), new ChartValues(49500,1.5,0.5,"17/01/09/2019")};
        request.setAttribute("articles", articles);

        RequestDispatcher dispatcher = request.getRequestDispatcher("CharttestCanvas3.jsp");
        dispatcher.forward(request, response);

И в Jsp с

ArrayList<ChartValues> chartvalue1 =  (ArrayList<ChartValues>)request.getAttribute("chartdata");

Но я получил тот же результат.

1 Ответ

0 голосов
/ 15 октября 2019

Моя ошибка состояла в том, что я думал, что скрипт и скриптлеты похожи и что я вижу готовый график при запуске файла jsp. При запуске JSP значение равно нулю. Мне нужно было использовать Javascript в скрипте и запустить граф из сервлета, чтобы заставить его работать.

Изменен перевод сервлета из сеанса в запрос.

servlet:

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

        Integer value=15;
        request.setAttribute("value", value);
        request.getRequestDispatcher("CharttestCanvas3.jsp").forward(request, response);
        }

Для JSP я скомбинировал скрипт и скриптлеты, чтобы он заработал.

JSP:

    <%Integer value = (Integer)request.getAttribute("value");%>

    <script type="text/javascript">
    window.onload = function() {
    .
    .
    .
    var aa=+'<%=value%>';
    datapoints.push({x: new Date(2015, 03, 10), y: aa});
    chart.render();
    .
    .
    .
    </script>

В скриптлете есть значение из запроса. Через скриптлет = значение значение попадает в мой скрипт, плюс определяет переменную как int.

...