Міністерство освіти і науки України
Національний університет “Львівська політехніка”
Кафедра автоматизованих систем управління
Звіт
До лабораторної роботи № 6
З дисципліни
Технології об'єктно-орієнтованого програмування
На тему
Робота з базами даних у форматі XML у проектах Rich Internet Application
Порядок виконання роботи
1. Використовуючи додаткову літературу, розглянути застосування формату XML для зберігання баз даних.
2. Перетворити таблиці з бази даних ЛР № 1 у формат XML.
3. Використовуючи додаткову літературу, приклади програмного коду, можливості обраних мови програмування та середовища Rich Internet Application з ЛР № 5, розглянути засоби Rich Internet Application для роботи з базами даних у форматі XML.
4. Змінити ужиток Rich Internet Application з ЛР № 5 для вибірки даних з XML-таблиць замість таблиць MySQL і виведення результатів у табличній, графічній та текстовій формі.
5. Розмістити ужиток на веб-сервері і перевірити його роботу. Результати вивести на екран при звертанні до ужитку через браузер.
6. Доповнити ужиток можливістю програмної перевірки правильності вхідних XML-таблиць за допомогою описів типу документів (DTD) або схем XML.
7. У звіті по роботі навести код таблиць бази даних у форматі XML, тексти програмних модулів та файлів DTD (або схем XML), екранограми веб-сторінок.
Результат виконання програми
Рис. 1. Екранограма виконаної програми
Код Проекту
package other.pkg;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
/**
* Servlet implementation class MyServlet
*/
public class MyServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @throws ParserConfigurationException
* @see HttpServlet#HttpServlet()
*/
private ArrayList<Integer> list = new ArrayList<Integer>();
private ArrayList<Integer> list2 = new ArrayList<Integer>();
private ArrayList<Integer> list3 = new ArrayList<Integer>();
private ArrayList<String> list4 = new ArrayList<String>();
private ArrayList<Integer> list5 = new ArrayList<Integer>();
private ArrayList<Integer> list6 = new ArrayList<Integer>();
private String error = "empty";
private String DocumentUrl = "D:\\Doc.xml";
public MyServlet() throws ParserConfigurationException {
super();
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
// TODO Auto-generated method stub
try {
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(new FileInputStream(DocumentUrl));
doc.getDocumentElement().normalize();
System.out.println(doc.getDocumentElement().getNodeName());
NodeList nodeList = doc.getElementsByTagName(doc.getDocumentElement().getChildNodes().item(1).getNodeName());
System.out.println("------------------------------------");
for(int i=0; i<nodeList.getLength(); i++)
{
Node node = nodeList.item(i);
if(node.getNodeType() == Node.ELEMENT_NODE)
{
Element element = (Element)node;
if(i==0){
list.add(Integer.parseInt(element.getElementsByTagName("payout1").item(0).getChildNodes().item(0).getNodeValue()));
list.add(Integer.parseInt(element.getElementsByTagName("payout2").item(0).getChildNodes().item(0).getNodeValue()));
list.add(Integer.parseInt(element.getElementsByTagName("payout3").item(0).getChildNodes().item(0).getNodeValue()));
list.add(Integer.parseInt(element.getElementsByTagName("payout4").item(0).getChildNodes().item(0).getNodeValue()));
list.add(Integer.parseInt(element.getElementsByTagName("payout5").item(0).getChildNodes().item(0).getNodeValue()));
Collections.sort(list);
}
if(i==1){
list2.add(Integer.parseInt(element.getElementsByTagName("suminsured1").item(0).getChildNodes().item(0).getNodeValue()));
list2.add(Integer.parseInt(element.getElementsByTagName("suminsured2").item(0).getChildNodes().item(0).getNodeValue()));
list2.add(Integer.parseInt(element.getElementsByTagName("suminsured3").item(0).getChildNodes().item(0).getNodeValue()));
list2.add(Integer.parseInt(element.getElementsByTagName("suminsured4").item(0).getChildNodes().item(0).getNodeValue()));
list2.add(Integer.parseInt(element.getElementsByTagName("suminsured5").item(0).getChildNodes().item(0).getNodeValue()));
Collections.sort(list2);
}
if(i==2){
list3.add(Integer.parseInt(element.getElementsByTagName("numberOfConclusion1").item(0).getChildNodes().item(0).getNodeValue()));
list3.add(Integer.parseInt(element.getElementsByTagName("numberOfConclusion2").item(0).getChildNodes().item(0).getNodeValue()));
list3.add(Integer.parseInt(element.getElementsByTagName("numberOfConclusion3").item(0).getChildNodes().item(0).getNodeValue()));
list3.add(Integer.parseInt(element.getElementsByTagName("numberOfConclusion4").item(0).getChildNodes().item(0).getNodeValue()));
list3.add(Integer.parseInt(element.getElementsByTagName("numberOfConclusion5").item(0).getChildNodes().item(0).getNodeValue()));
Collections.sort(list3);
}
if(i==3){
list4.add(element.getElementsByTagName("dateOf1").item(0).getChildNodes().item(0).getNodeValue());
list4.add(element.getElementsByTagName("dateOf2").item(0).getChildNodes().item(0).getNodeValue());
list4.add(element.getElementsByTagName("dateOf3").item(0).getChildNodes().item(0).getNodeValue());
list4.add(element.getElementsByTagName("dateOf4").item(0).getChildNodes().item(0).getNodeValue());
list4.add(element.getElementsByTagName("dateOf5").item(0).getChildNodes().item(0).getNodeValue());
Collections.sort(list4);
}
if(i==4){
list5.add(Integer.parseInt(element.getElementsByTagName("affiliate1").item(0).getChildNodes().item(0).getNodeValue()));
list5.add(Integer.parseInt(element.getElementsByTagName("affiliate2").item(0).getChildNodes().item(0).getNodeValue()));
list5.add(Integer.parseInt(element.getElementsByTagName("affiliate3").item(0).getChildNodes().item(0).getNodeValue()));
list5.add(Integer.parseInt(element.getElementsByTagName("affiliate4").item(0).getChildNodes().item(0).getNodeValue()));
list5.add(Integer.parseInt(element.getElementsByTagName("affiliate5").item(0).getChildNodes().item(0).getNodeValue()));
Collections.sort(list5);
}
if(i==5){
list6.add(Integer.parseInt(element.getElementsByTagName("insurance1").item(0).getChildNodes().item(0).getNodeValue()));
list6.add(Integer.parseInt(element.getElementsByTagName("insurance2").item(0).getChildNodes().item(0).getNodeValue()));
list6.add(Integer.parseInt(element.getElementsByTagName("insurance3").item(0).getChildNodes().item(0).getNodeValue()));
list6.add(Integer.parseInt(element.getElementsByTagName("insurance4").item(0).getChildNodes().item(0).getNodeValue()));
list6.add(Integer.parseInt(element.getElementsByTagName("insurance5").item(0).getChildNodes().item(0).getNodeValue()));
Collections.sort(list6);
}
}
}
System.out.println("payOut = "+"\t"+list.get(0)+" "+list.get(1)+" "+list.get(2)+" "+list.get(3)+" "+list.get(4));
System.out.println("sumInsured = "+"\t"+list2.get(0)+" "+list2.get(1)+" "+list2.get(2)+" "+list2.get(3)+" "+list2.get(4));
System.out.println("numbersOfConclusion = "+"\t"+list3.get(0)+" "+list3.get(1)+" "+list3.get(2)+" "+list3.get(3)+" "+list3.get(4));
System.out.println("dateOf = "+"\t"+list4.get(0)+" "+list4.get(1)+" "+list4.get(2)+" "+list4.get(3)+" "+list4.get(4));
System.out.println("affiliate = "+"\t"+list5.get(0)+" "+list5.get(1)+" "+list5.get(2)+" "+list5.get(3)+" "+list5.get(4));
System.out.println("insurance = "+"\t"+list6.get(0)+" "+list6.get(1)+" "+list6.get(2)+" "+list6.get(3)+" "+list6.get(4));
} catch (FileNotFoundException e) {
e.printStackTrace();
error = e.getMessage();
} catch (SAXException e) {
e.printStackTrace();
error = e.getMessage();
} catch (IOException e) {
e.printStackTrace();
error = e.getMessage();
} catch (ParserConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}catch (NullPointerException e)
{
e.printStackTrace();
error = "java.lang.NullPointerException please check input information";
}
if(error!=null)
{
req.setAttribute("error", error);
}
req.setAttribute("DocumentUrl", DocumentUrl);
req.setAttribute("data", list);
req.setAttribute("data2", list2);
RequestDispatcher dispatcher = req.getRequestDispatcher("index.jsp");
if (dispatcher != null )
{
dispatcher.forward(req, res);
}
}
}
jsp
<%@page import="java.util.List"%>
<%@page import="java.util.ArrayList"%>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!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=ISO-8859-1">
<title>HETO YURA</title>
<script type="text/javascript" src="jquery-1.8.3.js"></script>
<script type="text/javascript" src="jquery.jqplot.min.js"></script>
<script type="text/javascript" src="jqplot.pieRenderer.min.js"></script>
<script type="text/javascript" src="jqplot.donutRenderer.min.js"></script>
<script type="text/javascript" src="jqplot.categoryAxisRenderer.min.js"></script>
<script type="text/javascript" src="jqplot.pointLabels.min.js"></script>
<script type="text/javascript" src="jqplot.barRenderer.min.js"></script>
<link rel="stylesheet" type="text/css" href="src/servlet/pkg/jquery.jqplot.min.css" />
<% List<Integer> myData2 = (List<Integer>) request.getAttribute("data"); int i=0; %> <!-- payOut -->
<% List<Integer> myData = (List<Integer>) request.getAttribute("data2"); int i2=0; %> <!-- sumInsured -->
<% String DocumentUrl = (String) request.getAttribute("DocumentUrl");%>
<% String EROR = (String) request.getAttribute("error"); %>
<script type="text/javascript">
var getData2 = new Array();
getData2[0] = '<%= myData2.get(0) %>';
getData2[1] = '<%= myData2.get(1) %>';
getData2[2] = '<%= myData2.get(2) %>';
getData2[3] = '<%= myData2.get(3)+myData2.get(4) %>';
//pie chart
$(document).ready(function(){
var data = [
[' ', parseInt(getData2[0])], [' ', parseInt(getData2[1])], [' ', parseInt(getData2[2])],
['', parseInt(getData2[3])]
];
var plot2 = jQuery.jqplot ('chart1', [data],
{
seriesDefaults: {
renderer: jQuery.jqplot.PieRenderer,
rendererOptions: {
fill: true,
showDataLabels: true,
sliceMargin: 10,
lineWidth: 3,
}
},
legend: { show:true, location: 'e' }
}
);
});
document.write("<B>");
var getData = new Array();
getData[0] = '<%= myData.get(0) %>';
getData[1] = '<%= myData.get(1) %>';
getData[2] = '<%= myData.get(2) %>';
getData[3] = '<%= myData.get(3) %>';
getData[4] = '<%= myData.get(4) %>';
//bar chart2
$(document).ready(function(){
var s1 = [parseInt(getData[0])+parseInt(getData[1]), parseInt(getData[2]), parseInt(getData[3]),parseInt(getData[4])];
var ticks = ['2005-09-27', '2010-03-19', '2011-12-12','2012-01-01'];
plot2 = $.jqplot('chart2', [s1], {
seriesDefaults: {
renderer:$.jqplot.BarRenderer,
rendererOptions:{ varyBarColor : true },
pointLabels: { show : true },
pointLabels: { show: true } },
axes: {
xaxis: {
renderer: $.jqplot.CategoryAxisRenderer,
ticks: ticks,
seriesColors: [ "#eee", "#ccc", "#999","#ccc","#ccc"],
highlighter: { show: false }
}
}
});
$('#chart2').bind('jqplotDataHighlight',
function (ev, seriesIndex, pointIndex, data) {
$('#info2').html('series: '+seriesIndex+', point: '+pointIndex+', data: '+data);
}
);
$('#chart2').bind('jqplotDataUnhighlight',
function (ev) {
$('#info2').html('Nothing');
}
);
});
$(document).ready(function(){
$("#chart1").click(function(){
$("#chart1").show();
$("#chart2").show();
$("#box").animate({opacity: "0.1"}, 1200)
.animate({opacity: "0.4"}, "slow")
.animate({opacity: "1"}, "slow") ;
return false;
});
});
$(document).ready(function(){
$("#chart2").click(function(){
$("#chart2").hide();
$("#chart1").show();
$("#box").animate({opacity: "0.1"}, 1200)
.animate({opacity: "0.4"}, "slow")
.animate({opacity: "1"}, "slow");
return false;
});
});
$(document).ready(function(){
$("#javaImg").fadeOut(function(){
$("#javaImg").fadeIn();
});
});
</script>
<style type="text/css">
div [id]
{
width: 500px;
height:500px;
float: left;
margin: 50px;
}
</style>
</head>
<body>
<div id="chart1" title="click to change to the Graph"></div>
<div id="chart2" title="click to change to the Diagramm"></div>
</body>
<TABLE BORDER=2 BGCOLOR=Red align=center id="myTab">
<TR>
<TH>Number of conclusion</TH><TH>Date of</TH><TH>sumInsured</TH><TH>payOut</TH><TH>Code of affiliate</TH><TH>Code if insurance</TH>
</TR>
<TR>
<TD>11</TD><TD>2005-09-27</TD><TD><script>document.write(getData[0]);</script></TD><TD><script>document.write(getData2[0]);</script></TD><TD>2010</TD><TD>4031</TD>
</TR>
<TR>
<TD>13</TD><TD>2005-09-27</TD><TD><script>document.write(getData[1]);</script></TD><TD><script>document.write(getData2[1]);</script></TD><TD>2014</TD><TD>4039</TD>
</TR>
<TR>
<TD>24</TD><TD>2010-03-19</TD><TD><script>document.write(getData[2]);</script></TD><TD><script>document.write(getData2[2]);</script></TD><TD>2016</TD><TD>4022</TD>
</TR>
<TR>
<TD>27</TD><TD>2011-12-12</TD><TD><script>document.write(getData[3]);</script></TD><TD><script>document.write(getData2[3]);</script></TD><TD>2044</TD><TD>4011</TD>
</TR>
<TR>
<TD>77</TD><TD>2012-01-01</TD><TD><script>document.write(getData[4]);</script></TD><TD><script>document.write(getData2[4]);</script></TD><TD>2044</TD><TD>4041</TD>
</TR>
</TABLE>
<br>
<font color="red" size="20">
<script type="text/javascript">
var getMsg = '<%= EROR %>';
if(getMsg!="empty")
{ alert(getMsg);
$(document).ready(function(){
$("#msg").click(function(){
$("#msg").fadeOut();
});
});
}
</script>
<label id="msg" style="color: red; " ><script>if(getMsg!="empty") {document.write(getMsg); }</script></label>
</font>
<br>
<script type="text/javascript">
$(document).ready(function(){
$("#chart2").hide();
$("#myTab").slideUp();
});
$(document).ready(function(){
$("#btn").click(function(){
$("#myTab").toggle();
});
});
</script>
<TABLE BORDER=2 BGCOLOR=Red align=center id="myTab">
<TR>
<TH>Number of conclusion</TH><TH>Date of</TH><TH>sumInsured</TH><TH>payOut</TH><TH>Code of affiliate</TH><TH>Code if insurance</TH>
</TR>
<TR>
<TD>11</TD><TD>2005-09-27</TD><TD><script>document.write(getData[0]);</script></TD><TD><script>document.write(getData2[0]);</script></TD><TD>2010</TD><TD>4031</TD>
</TR>
<TR>
<TD>13</TD><TD>2005-09-27</TD><TD><script>document.write(getData[1]);</script></TD><TD><script>document.write(getData2[1]);</script></TD><TD>2014</TD><TD>4039</TD>
</TR>
<TR>
<TD>24</TD><TD>2010-03-19</TD><TD><script>document.write(getData[2]);</script></TD><TD><script>document.write(getData2[2]);</script></TD><TD>2016</TD><TD>4022</TD>
</TR>
<TR>
<TD>27</TD><TD>2011-12-12</TD><TD><script>document.write(getData[3]);</script></TD><TD><script>document.write(getData2[3]);</script></TD><TD>2044</TD><TD>4011</TD>
</TR>
<TR>
<TD>77</TD><TD>2012-01-01</TD><TD><script>document.write(getData[4]);</script></TD><TD><script>document.write(getData2[4]);</script></TD><TD>2044</TD><TD>4041</TD>
</TR>
</TABLE>
</body>
</html>
}Висновок: На даній лабораторній роботі, я розглянув можливості графічного виведення за допомогою ресурсів html5 і java, та розробив ужиток, який графічно показує результати виконання xml .