Кардынов Н.В.

Группа 52 Кардынов Н.В.

http://50.16.197.77:8080/jasperserver/ - Jaspersoft
(Логин и пароль неуказываю в интересах конфиденциальности)
Логин и пароль указаны в письме.

http://50.16.197.77:8080/ - Работающий журнал дискретных значений

taglib.tld - библиотека тэгов, позволяющая использовать возможности JSQL (описание: http://www.servletsuite.com/servlets/jsqltag.htm).


Краткое описание всех разработанных файлов:

index.html - основная страница пользовательского интерфейса:

  • запросы к сторонним файлам на выборку информации посылаются специальным JSP-страницам с помощью GET-метода с использованием фрэймворка jQuery (обработка полученного результата в формате JSON производится также силами jQuery)
  • в JasperServer необходимые параметры передаются с помощью метода POST (отправляются параметры элементов формы)

JSP - JavaServer Pages:

  • codelist.jsp - JSP-страница, с помощью которой отправляется запрос на выборку возможных кодов дискретного сигнала (результат возвращает в формате JSON)
  • startstoplist.jsp - JSP-страница, с помощью которой отправляется запрос на выборку возможных временных периодов для выбора диапазона (результат возвращает в формате JSON)
  • select.jsp - JSP-страница, с помощью которой отправляется запрос на выборку информации для построения журнала дискретных значений (результат возвращает в формате JSON)

Код основной страницы

index.html - основная страница пользовательского интерфейса:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Журнал дискретных значений</title>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.5.1.js"></script>
<script language="javascript" type="text/javascript">
// Функция парсинга tstamp для вывода даты в привычном виде
function parseTstamp(t) {
return t.substr(6,2)+"."+t.substr(4,2)+"."+t.substr(0,4)+" "+t.substr(8,2)+":"+t.substr(10,2);
}

// Функция выборки возможных кодов
$(document).ready(function () {
        $('#pCode').attr('disabled', true); 
        $('#pCode').html('<option>Загрузка</option>');
        $('#pStart').attr('disabled', true);
        $('#pStop').attr('disabled', true);
        $('#submit').attr('disabled', true);
        $('#createtable').attr('disabled', true);
        $.get("codelist.jsp",
        function(data){ 
            var options = '<option value="null">Выберите код</option>';
            $(data).each(function() {
                  options += '<option value="' + $(this).attr('code') + '">' + $(this).attr('name') + '</option>'; });
            $('#pCode').html(options);
            $('#pCode').attr('disabled', false);}
        ,"json");
});

// Функция выборки возможных периодов
$(document).ready(function () {
    $('#pCode').change(function () {
    if ($('#pCode').val() == 'null') {
        return false;
    }
    else {
        $('#error').hide();
        $('#pStart').attr('disabled', true); 
        $('#pStop').attr('disabled', true);
        $('#submit').attr('disabled', true);
        $('#createtable').attr('disabled', true);
        $('#pStart').html('<option>Загрузка</option>'); 
        $('#pStop').html('<option>Загрузка</option>');
        var pсode = $(this).val(); 
        $.get("startstoplist.jsp", {pCode: pсode}, 
        function(data){ 
            var options = '';
            $(data).each(function() {
                  options += '<option value="' + $(this).attr('tstamp') + '">' + parseTstamp($(this).attr('tstamp')) + '</option>'; });
            $('#pStart').html(options);
            $('#pStop').html(options);
            $('#pStart').attr('disabled', false);
            $('#pStop').attr('disabled', false);
            $('#submit').attr('disabled', false);
            $('#createtable').attr('disabled', false);
            } 
        ,"json");
    } });
});

// Функции проверки, чтобы дата "с" была меньше даты "по"
$(document).ready(function () {
    $('#pStart').change(function () {
    if ($('#pStop').val() < $('#pStart').val()) {
        $('#submit').attr('disabled', true);
        $('#createtable').attr('disabled', true);
        $('#error').show();
    }
    else {
        $('#submit').attr('disabled', false);
        $('#createtable').attr('disabled', false);
        $('#error').hide();
        return false;
    } });
});
$(document).ready(function () {
    $('#pStop').change(function () {
    if ($('#pStop').val() < $('#pStart').val()) {
        $('#submit').attr('disabled', true);
        $('#createtable').attr('disabled', true);
        $('#error').show();
    }
    else {
        $('#submit').attr('disabled', false);
        $('#createtable').attr('disabled', false);
        $('#error').hide();
        return false;
    } });
});

// Функция вывода журнала дискретных значений
$(document).ready(function () {
    $('#createtable').click(function () { 
        $('#table').html(""); 
        $('#load').show(); 
        var pcode = $('#pCode').val(); 
        var pstart = $('#pStart').val();
        var pstop = $('#pStop').val();
        $.get("select.jsp", {pCode: pcode, pStart: pstart, pStop: pstop}, 
        function(data){ 
        if (data == null) { 
            $('#table').html("Нет данных для построения журнала");
            $('#load').hide(); 
            return false ;
        } else {
            var tables = '<table style=\"border-collapse: collapse;\" border=\"1\" cellpadding=\"3\" width=\"55%\"><thead><tr><th colspan=\"5\" align=\"center\" valign=\"center\">Журнал дискретных значений</th></tr></thead><tbody><tr style=\"background: #ECEFFF;\"><td><i>Время</i></td><td><i>Значение</i></td><td><i>Статус</i></td><td><i>Имитация</i></td><td><i>Текст</i></td></tr>'; 
            $(data).each(function() {
                  tables += '<tr><td>' + parseTstamp($(this).attr('tstamp')) + '</td><td>' + $(this).attr('value') + '</td><td>' + $(this).attr('vf') + '</td><td>' + $(this).attr('hand') + '</td><td>' + $(this).attr('a_ext') + '</td></tr>'; }); 
            tables += '</tbody></table>'; 
            $('#load').hide(); 
            $('#table').html(tables);}} 
        ,"json");
    });
});
</script>
</head>
<body>
<h1>Журнал дискретных значений</h1>
<form name="params" method="post" action="http://50.16.197.77:8080/jasperserver/flow.html" target="_blank">
<input type="hidden" name="_flowId" value="viewReportFlow">
<input type="hidden" name="ParentFolderUri" value="/reports">
<input type="hidden" name="standAlone" value="true">
<input type="hidden" name="reportUnit" value="/reports/jsreport">
<input type="hidden" name="j_username" value="jasperadmin">    
<input type="hidden" name="j_password" value="jasperadmin">
<p>Код дискретного сигнала&nbsp;<select id="pCode" name="pCode" style="width: 380px;"><option value="">&nbsp;</option></select></p>
<p>Период&nbsp;c&nbsp;<select id="pStart" name="pStart" style="width: 130px;"><option value="">&nbsp;</option></select>&nbsp;по&nbsp;<select id="pStop" name="pStop" style="width: 130px;"><option value="">&nbsp;</option></select>&nbsp;<div id="error" style="color: red; font-size: 80%; display: none;">Внимание! Указан некорректный период. Дата начала периода не может быть больше даты окончания.</div>
</p>
<p><div style="float: left; margin-top: 5px; padding: 5 10 5 0;"><input type="button" id="createtable" value="Получить отчет в веб-интерфейсе" /></div>&nbsp;<div style="float: left; margin-top: 5px; padding: 5; border: 1px solid #ccc;">Формат вывода&nbsp;<select id="output" name="output">
<option value="html">HTML</option>
<option value="pdf">PDF</option>
<option value="xls">EXCEL</option>
<option value="rtf">WORD</option>
<option value="csv">CSV</option>
<option value="swf">FLASH</option>
</select>&nbsp;<input type="submit" name="submit" id="submit" value="Посмотреть отчет в JasperServer" /></div></p>
</form> 
<div id="load" style="font-size: 80%; display: none; padding-top: 3px;"><p>Идет загрузка данных для таблицы</p></div>
<p><div id="table" style="padding-top: 15px;"></div></p>
</body>
</html>

JSP - JavaServer Pages

codelist.jsp - JSP-страница, с помощью которой отправляется запрос на выборку возможных кодов дискретного сигнала (результат возвращает в формате JSON)

<%@page pageEncoding="utf-8"%>
<%@taglib uri="taglib.tld" prefix="get"%>
<get:JSQL driver="com.mysql.jdbc.Driver" url="jdbc:mysql://advanta.homeip.net/airs" user="userairs" password="userairs">
<get:setQuery>select concat(code,' : ',name,' : ',cast(nserv as char)) name, code from svodcode where type='d' order by 1;</get:setQuery>
</get:JSQL>

startstoplist.jsp - JSP-страница, с помощью которой отправляется запрос на выборку возможных временных периодов для выбора диапазона (результат возвращает в формате JSON)

<%@page pageEncoding="utf-8"%>
<%@taglib uri="taglib.tld" prefix="get"%>
<get:JSQL driver="com.mysql.jdbc.Driver" url="jdbc:mysql://advanta.homeip.net/airs" user="userairs" password="userairs">
<get:setParameter position="1">${param.pCode}</get:setParameter>
<get:setQuery>select tstamp from dx where code=? order by 1;</get:setQuery>
</get:JSQL>

select.jsp - JSP-страница, с помощью которой отправляется запрос на выборку информации для построения журнала дискретных значений (результат возвращает в формате JSON)

<%@page pageEncoding="utf-8"%>
<%@taglib uri="taglib.tld" prefix="get"%>
<get:JSQL driver="com.mysql.jdbc.Driver" url="jdbc:mysql://advanta.homeip.net/airs" user="userairs" password="userairs">
<get:setParameter position="1">${param.pCode}</get:setParameter>
<get:setParameter position="2">${param.pStart}</get:setParameter>
<get:setParameter position="3">${param.pStop}</get:setParameter>
<get:setQuery>select tstamp, value, case vf when "0" then "" when "1" then "#" end vf, hand, a_ext from dx where code=? and tstamp between ? and ? order by 1;</get:setQuery>
</get:JSQL>

Описание механизма доступа к базе данных

Поскольку запросы к базе данных реализованы с помощью языка Java SQL (JSQL), то предварительно в библиотеку Apache-Tomcat был добавлен компонент jsqltag.jar. Данный компонент позволяет производить запросы к базе данных, и возвращать результат в JSON-формате.
Для установки этого компонента были произведены следующие действия:

  • файл jsqltag.jar был добавлен в каталог: /jserver/apache-tomcat/lib (/jserver - папка, в которую был установлен JasperServer)
  • после этого был произведен перезапуск apache.

Также для обработки jsp-страниц был внедрен модуль taglib.tld, который добавляет обработчики дополнительных тегов. taglib.tld - это библиотека тэгов, позволяющая использовать возможности JSQL. Подробная информация об использовании taglib.tld приведена по ссылке http://www.servletsuite.com/servlets/jsqltag.htm.
Для внедрения модуля, данный файл taglib.tld был перенесен в папку с индексным файлом веб-интерфейса (index.html), туда же где находятся все jsp-страницы.