Upload
colorado-alexander
View
68
Download
5
Embed Size (px)
DESCRIPTION
Modern a tīmekļa programmēšana Java pasaulē. Alina Vasiļjeva Latvijas Universitāte Datorikas fakultāte 20 12 .gada 6 . decembris. Plāns. Tīmekļa lietojumprogrammas Arhitektūra Lietojumprogrammas slānis Datu slānis P rezentācijas slānis. Tīmekļa lietojumprogrammas. Pamatjēdzieni. - PowerPoint PPT Presentation
Citation preview
Moderna tīmekļa programmēšana
Java pasaulē
Alina Vasiļjeva
Latvijas UniversitāteDatorikas fakultāte
2012.gada 6. decembris
Plāns• Tīmekļa lietojumprogrammas
• Arhitektūra
• Lietojumprogrammas slānis
• Datu slānis
• Prezentācijas slānis
Tīmekļa lietojumprogrammas
Pamatjēdzieni
Internets mūsdienās• Mūsdienās VISI zina kas ir Internets un VISI
izmanto Internetu
• Bet mūs, kā datoriķus, interesē kā veidot tīmekļa lietojumprogrammas
gan mazuļi gan vecmammiņas
Internets un tīmeklis• Internet ir visā pasaulē izplatīta publiski pieejamo
datoru tīklu sistēma, kas pārraida datus izmantojot standartu protokolu IP (Internet Protocol)
• World Wide Web (WWW, vai vienkārši Web) ir starp saistīto hiperteksta dokumentu sistēma, kurai var piekļūt pa Internetu
• Tīmekļa lietojumprogramma ir tāda programma, kura ir izvietota tīmeklī un kurai var piekļūt pa tīklu
Tīmekļa lietojumprogrammas pazīmes
• Klienta/Servera arhitektūra• HTTP protokols• URL adreses• HTML• Lietojum-
programmas
darbināšanai ir
nepieciešams
serveris
Tim Berners-LeeTim Berners-Lee ir • tas cilvēks, kurš izgudroja World Wide Web 1989. gadā
• izstrādāja HTTP, HTML un URL specifikācijas
• World Wide Web Consortium (W3C) direktors
HTTP - HyperText Transfer Protocol
• HTTP ir standarts sazināšanās protokols World Wide Web informācijas pārsūtīšanai
• HTTP apraksta ziņojumus (request/response) ar kuriem var apmainīties klienti un serveri
• HTTP ir “bezstāvokļa” (stateless)• serveris neglabā informāciju par
iepriekšējiem pieprasījumiem
URL - Universal Resource Locators
www.someSchool.edu:8080/someDept/pic.gif
Servera domēna vārds Ceļš līdz objektam
Neobligāts servera ports (default = 80)
URL sastāvdaļas:•servera adrese•(neobligāts) porta numurs•ceļš līdz resursam
HTML - Hypertext Markup Language
• HTML ir iezīmēšanas valoda, kas ir izstrādāta tīmekļa lappušu un citas pārlūkprogrammā attēlojamas informācijas glabāšanai
<html> <head> <title>My Web Page</title> </head> <body> <p>Hello!</p> </body> </html>
Tīmekļa klienti un serveri• Tīmekļa klientu parasti sauc par user agent un
tipiskais piemērs ir pārlūkprogramma (browser)• Chrome, Internet Explorer, Firefox, Opera, Safari
• Tīmekļa serveris ir programma, kas ir atbildīga par klientu pieprasījumu saņemšanu un atbildes aizsūtīšanu atpakaļ• Apache, Microsoft IIS, nginx
Tīmekļa lapas• Parasti klienti pieprasa no serveriem tīmekļa lapas
• Par tīmekļa lapu sauc World Wide Web informācijas resursu, kuram var piekļūt ar pārlūkprogrammas palīdzību
• Šī informācija parasti ir HTML vai XHTML formātā
• Katrai tīmekļa lapai ir URL adrese
• No vienas tīmekļa lapas var aiziet uz citām lapām izmantojot hiperteksta saites
• Tīmekļa lapa sastāv no “objektiem”• teksts, bildes, audio, video
Klienta/servera komunikācijas scenārijs
Tīmekļa klientu/serveru komunikācija notiek izmantojot HTTP protokolu
1. Lietotājs norāda tīmekļa lapas URL pārlūkprogrammā
2. Pārlūkprogramma sūta HTTP pieprasījumu serverim
3. Serveris apstrādā pieprasījumu un sūta pieprasītu tīmekļa lapu atpakaļ klientam
4. Pārlūkprogramma rāda tīmekļa lapas saturu lietotājam
Tīmekļa lietojumprogrammuarhitektūra
Augsta līmeņa arhitektūra• Dalīta klienta/servera arhitektūra
• Komunikācija notiek pa
datortīklu
• Datortīklu arhitektūras
abstraktais apraksts –
TCP/IP modelis
(Internet reference model)
TCP/IP modelis
IP = Internet ProtocolTCP = Transmission Control Protocol
Lietojumprogrammu līmenis• Piedāvā lietotājam noderīgo protokolu kopumu
• Klienta/servera sistēmu piemēri un to lietojumprogrammu līmeņa protokoli:
• The World Wide Web (HTTP)
• E-mail (SMTP & POP)
• Reliable file transfer (FTP)
• Internet Domain Name System (DNS)
Tīmekļa lietojumprogrammu arhitektūra
Daudzslāņu arhitektūra
• Prezentācijas slānis• Lietotāja saskarne
• Lietojumprogrammas slānis• Visu slāņu darbību koordinācija
• Sistēmas loģikas realizācija,
aprēķini, lēmumu pieņemšana
• Datu slānis• Datu glabāšana datubāzēs
Model-View-Controller šablons• Model-View-Controller (MVC) ir projektēšanas
šablons (aprakstīts 1979. gadā, Smalltalk valodā)
• Pamata mērķis: atdalīt datus (Model) no
lietotāja interfeisa (View)
• MVC atrisina
problēmu ieviešot
starpnieka komponenti - kontrolieri (Controller)
Lietojumprogrammas (biznesa loģikas) slānis
Lietojumprogrammas kodols• Lietojumprogrammu serveris + Lietojumprogramma
• Lietojumprogrammu serveris parasti nodrošina:• Autentificēšana
• Drošība
• Transakciju pārvaldība
• Klasterizācija
• Ziņojumu apmaiņa
• Lietojumprogramma – servera dinamiskais paplašinājums
Lietojumprogrammu serveru piemēri
• Nekomerciāli• Apache Tomcat• Jetty• JBoss
• Komerciāli• Sun Java System Application Server • BEA WebLogic Server• Oracle Application Server• WebSphere
Un daudzi citi...Un daudzi citi...
Programmēšana Java platformā• Klasika » Java Enterprise Edition
• Servleti
• JSP (Java Server Pages)
• Eksistē liels daudzums ietvaru• JSF (Java Server Faces)
• Spring MVC
• Play!
• Lift
Un daudzi citi...Un daudzi citi...
Java Enterprise Edition• Java EE ir vispusīga platforma daudzlietotāju,
pārnesamām, spēcīgām, mērogojamām, dalītām, drošām, enterprise-līmeņa lietojumprogrammām
• Java EE balstās uz Java SE un pievieno API priekš Internet-balstītas servera puses programmēšanas
Java EE arhitektūraJava EE definē arhitektūru daudzlīmeņu lietojumprogrammu izstrādāšanai izmantojot
Java Enterprise Edition serveri un tajā piedāvātus servisus
• Biznesa un prezentācijas loģiku ir jāimplementē sistēmas izstrādātājam
• Standarta sistēmas servisus nodrošina Java EE platforma
Java EE komponenti• Java EE lietojumprogrammas tiek veidotas no
komponentiem
• Java komponents ir funkcionālas programmatūras vienība, kas ir ievietota Java EE lietojumprogrammā, kas sadarbojas ar citiem komponentiem un kuru pārvalda Java EE serveris
• Komponenti tiek kompilēti tādā pašā veidā kā jebkura cita programma, kas ir uzrakstīta Java valodā
Servleti and JSP• Servlets – Java klase, kas dinamiski apstrādā
pieprasījumus un atgriez atbildes
• JSP lapa – tekstuāls dokuments, kas izpildās kā servlets, bet piedāvā dabiskāku pieeju statisko dokumentu veidošanai
• Tipiskā izmantošana• Servleti – serviss-orientētas lietojumprogrammas,
kontroles funkcijas
• JSP – tekstuāla marķējuma ģenerēšana
(HTML, SVG, WML, XML)
Servleti• Apzinoties Java potenciālu kā servera valodas
tīmekļa vidē, Sun Microsystems izstrādāja Java Servlet specifikāciju
• Specifikācija bija pabeigta 1997. gadā
• Servleti ir Java programmas, kuras ir paredzētas izpildīšanai uz tīmekļa serveriem
Kas ir Servlets?• Java objekts, kas balstās uz servletu tehnoloģijas un
API, un paplašina HTTP servera funkcionalitāti
• Ir piesaistīts pie URL adresēm
• Servletus pārvalda speciālas arhitektūras konteineris
• Ir pieejams un strādājošs uz visiem populārākiem tīmekļa serveriem
• Platformu-neatkarīgs un serveru-neatkarīgs
Sadarbības scenārijs• [klients] sūta tīmekļa serverim HTTP pieprasījumu
• [serveris] HTTP pieprasījums HTTPServletRequest
• Šīs objekts tiek piegādāts komponentam, kurš var sadarboties ar EJB vai ar datubāzi, lai ģenerēt dinamisku saturu
• [komponents] ģenerē HTTPServletResponse objektu, vai nodod pieprasījumu citam komponentam
• [serveris] HTTPServletResponse HTTP atbilde
• [serveris] atgriež HTTP atbildi klientam
Sadarbības diagramma
Java EE tīmekļa programmēšanas tehnoloģijas
Java Servlet tehnoloģija ir pamats visām Java EE tīmekļa programmēšanas tehnoloģijām
Vienkāršs Servletsimport javax.servlet.*;import javax.servlet.http.*;import java.io.*;
public class HelloServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<html><body><h1>" +
"Hello World!</h1></body></html>"); out.close();
} ...}
Ko dara Servlets?• Saņem klienta pieprasījumu (parasti HTTP
pieprasījuma formā)
• Izvelk informāciju no pieprasījuma ziņojuma
• Ģenerē saturu vai izpilda biznesa loģiku (iespējams, piekļūst datu bāzei, izsauc EJB, u.c)
• Izveido un nosūta atbildi klientam (parasti HTTP atbildes formā) vai nodod pieprasījumu citam servletam vai JSP lapai
Kas ir JSP?• JSP = Java Server Pages (ieviests 1999. gadā)
• JSP ir Java EE tehnoloģija, kas vienkāršo dinamisko tīmekļa lapu izstrādi
• JSP lapas ir HTML lapas ar iegulto kodu, kas dod iespēju piekļūt datiem no Java koda, kas izpildās uz servera
• JSP dod iespēju atdalīt HTML prezentācijas loģiku un lietojumprogrammas loģikas
JSP tehnoloģija• JSP tehnoloģija dod iespēju kombinēt HTML
pasauli ar Java servletu programmēšanas pasauli
• Ideja:• Izmantot parasto HTML lielākai lapas daļai• Atzīmēt servleta kodu ar speciāliem tagiem
• JSP lapa pilnība tiek pārveidota (translēta) servletā (vienreiz), un servlets ir tas, kas faktiski tiek izpildīts (katram pieprasījumam)
Piemērs: vienkārša JSP lapa<html><body> Hello World! <br> Current time: <%= new java.util.Date() %> <br> Random number: <%= Math.random() %></body></html>
Piemērs: cita vienkārša JSP lapa<html><body> Current time: <%= new java.util.Date() %> <br> Server: <%= application.getServerInfo() %> <br> Session ID: <%= session.getId() %> <br> Last accessed: <%= session.getLastAccessedTime() %> ms</body></html>
Demonstrācijas piemērs
Java EE tīmekļa lietojumprogramma 5 minūtēs
Maven un Jetty
• Ērts veids izstrādāt, būvēt, izvietot un izpildīt tīmekļa lietojumprogrammas ir izmantojot:
• Maven projektu pārvaldības rīku
http://maven.apache.org/
• Jetty tīmekļa serveri http://www.mortbay.org/
Direktoriju struktūras izveidošana• Maven dod iespēju izveidot pilnu projekta
struktūru ar vienas vienkāršas komandas palīdzību
• Lai izveidot projekta veidni ir jāizmanto maven-archetype-webapp arhetipu
• Komanda:
mvn archetype:create
-DgroupId=com.maven2example
-DartifactId=maven2example_webapp
-DarchetypeArtifactId=maven-archetype-webapp
Maven direktoriju struktūra
<root>/src/main/webapp/
- direktoriju struktūra WAR failam
Iepakošana (packaging)No projekta saknes izpildīt komandu
mvn package
Tiks izveidots WAR fails
Izpildīšana ar Jetty• Izpildīt tīmekļa lietojumprogrammas izmantojot
Jetty spraudni priekš Maven ir vienkārši !
• Jetty ir atvērta koda tīmekļa serveris, kurš ir pilnīgi realizēts Java valodā un atbalsta visus standartus
• Izveidošanas gads: 1995
• Pēdēja versija: 8.1.7 / 2012-07-16
Izpildīšana ar Jetty
Jetty spraudņa pievienošana pom.xml failā
<build>
<finalName>maven2example_webapp</finalName>
<plugins>
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>8.1.7.v20120910</version>
</plugin>
</plugins>
</build>
Izpildīšana ar Jetty• Palaist serveri ar mvn jetty:run komandu
> mvn jetty:run
[INFO] Scanning for projects...
[INFO] Searching repository for plugin with prefix: 'jetty'.
[INFO] -----------------------------------------------------
---
[INFO] Building maven2example_webapp Maven Webapp
[INFO] task-segment: [jetty:run]
[INFO] -----------------------------------------------------
...
[INFO] Starting jetty 7.0.0.1beta1...
...
[INFO] Started Jetty Server
• Apstādināt ar Ctrl+C
Lietojumprogrammas atvēršanaIerakstīt pārlūkā adresi
http://localhost:8080/
Servleta pievienošana• Solis 1 – pievienot Servlet API bibliotēku
projekta klašu ceļam (classpath) pom.xml failā
<dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.0.1</version>
</dependency>
Servleta pievienošana
• Solis 3 – sagatavot projektu darbam Eclipse vidē
mvn eclipse:eclipse
• Solis 2 – izveidot direktoriju\maven2example_webapp\src\main\java
Servleta pievienošana• Solis 4 – izveidot servleta klasi@WebServlet("/my-servlet")public class DemoServlet extends HttpServlet { public void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println(
"<html><body>" +"<h1>Hello DemoServlet!</h1>" +"<h1>Current time: " + new Date() + "</h1>" +"</body></html>");
out.close(); }}
Servleta koda izpildīšanamvn clean package jetty:run
http://localhost:8080/my-servlet
Tīmekļa lietojumprogrammu izstrādes ietvari
Ievads• Tīmekļa lietojumprogrammas ir iespējams
programmēt pa tiešo izmantojot Java Servlet un JSP tehnoloģijas
• Eksistē vairāki tīmekļa lietojumprogrammu ietvari (web application frameworks), kuri atbalsta dinamisko tīmekļa lietojumprogrammu izstrādi
• Piemēri: JavaServer Faces, Spring, Play!, Lift un daudzi citi
Tīmekļa ietvaru uzdevumi
• Svarīgi un tipiski uzdevumi, kuri ir jāatrisina izstrādājot tīmekļa lietojumprogrammu:• Stāvokļu pārvaldība (state management)• Darba plūsma (workflow)• Formas datu validācija
• Ietvari ir uzprojektēti tā, lai palīdzēt izstrādātājiem risināt šos un daudz citus uzdevumus
JSF: JavaServer Faces
JavaServer Faces• Standartizēta tehnoloģija, kuru izstrādāja
Java Community Process (JCP) ietvaros
• Java Enterprise Edition platformas sastāvdaļa
• Balstās uz Servletu tehnoloģijas
• MVC arhitektūra
• Servera puses komponenti: Managed Beans
• Skatu tehnoloģija: Facelets (aizvieto JSP)
Spring Web MVC
Spring• Spring ir atklāta koda Java/JavaEE
lietojumprogrammu ietvars
• Viens no interesantākiem
Spring komponentiem ir
Spring Web MVC
• Balstās uz Servletu
tehnoloģijas
Spring autors un motivācija• Pirmo Spring versiju
izstrādāja Rod Johnson
2002. gadā
• Motivācija – izveidot vienkāršāku alternatīvu sarežģītai Java Enterprise Edition platformai
• Šobrīd Spring ir stipri izaudzis un piedāvā ļoti daudz dažādas tehnoloģijas
Spring MVC komponentiSpring MVC sastāv no vairākiem komponentiem, starp kuriem notiek sadarbība apstrādājot klienta pieprasījumu
Spring kopsavilkums• Sākumā Spring bija “viegls” (lightweight) ietvars,
alternatīva sarežģītai Java EE platformai
• Šobrīd Java EE platforma ir jau vienkāršota, bet Spring, tieši otrādi, izauga un kļuva par diezgan smagu enterprise līmeņa ekosistēmu
• Viens no pamatprincipiem, kas sākotnēji padarīja Spring par ļoti ērtu un populāru:• Inversion of Control / Dependency Injection
Play!
Play!• Pirmā relīze 2009 gadā, Play 2.0 - 2012 gadā
• «A new web framework for a new era»
• Tīmekļa lietojumprogrammu prasības un arhitektūra strauji virzas uz ātru, reāla laika izpildi
• Ātrs, efektīvs (CPU, atmiņa, pavedieni), produktīva izstrāde, asinhronā komunikācija, mērogojams
• Atbalsta Scala programmēšanas valodas izmantošanu
Play!• Kaut gan Play! sākotnēji bija uzprojektēts, lai būvēt
klasiskās servera puses tīmekļa lietojumprogrammas, tagad tas atbalsta arī asinhronu komunikāciju (Comet)
• Nav balstīts uz Servletiem!
• Kā arī neseko vairākiem citiem Java EE principiem un šabloniem, kaut gan piedāvā MVC arhitektūru
• Piedāva pilnu infrastruktūru lietojumprogrammas būvēšanai un darbināšanai
Lift
Lift• Pirmā relīze 2009 gadā
• «The most powerful, most secure web framework available today» (http://liftweb.net/)
• Ir uzprojektēts priekš Scala programmēšanas valodas• Funkcionāla tīmekļa programmēšana
• Piedāvā alternatīvu MVC arhitektūrai
• "View First" pieeja – sākumā ielādē skatu
Datu slānis
Datubāzes• Klasiskais variants: glabāt datus relāciju datubāzēs
• MySQL
• PostgreSQL
• H2
• SQLite
• HSQLDB
• un daudzi citi...
• Jaunākā tendencē tīmekļa programmēšanā: glabāt datus NoSQL datubāzēs
NoSQL pirmsākumi• NoSQL ir ne-relāciju datubāzes pārvaldības
sistēma, kas atšķiras no tradicionālas RDPS vairākos svarīgos aspektos
• Carlo Strozzi izmantoja terminu
NoSQL 1998. gadā, lai aprakstīt
savu vieglu relāciju datubāzi,
kas nepiedāvāja standartu SQL
interfeisu
NoSQL jaunāka vēsture• 2009. gadā Eric Evans izmantoja NoSQL terminu,
lai apzīmēt datubāzes, kuras ir ne-relāciju, dalītas un neatbalsta ACID īpašības
• NoSQL terminu ir jāsaprot un
jāizmanto kā Not-Only-SQL
nevis kā No-to-SQL
vai Never-SQL
NoSQL pielietojums• Divas tendences:
• Eksponenciāls pieaugums datu apjomā, kuru ģenerē tīmekļa lietotāji un sistēmas
• Savstarpējo atkarību palielinājums un datu sarežģītība, ko palielina Internet, Web 2.0, sociālie tīkli
• NoSQL datubāzes ir noderīgas strādājot ar lielu datu apjomu un kad datu raksturs neprasa relāciju modeli datu struktūrai
• Šodien jau nav iespējams iedomāties augsti noslogotu tīmekļa portālu bez NoSQL datubāzes
NoSQL raksturīpašības• Neizmanto SQL kā vaicājumu valodu
• NoSQL pamatā neizmanto tabulas un neizmanto SQL, lai manipulēt ar datiem
• Negarantē ACID pilnībā• Parasti tikai eventuālā konsistence ir garantēta vai
transakcijas ir ierobežotas ar vienu datu vienību
• Dalīta, nepilnību-droša (fault-tolerant) arhitektūra• Dati tiek particionēti un glabāti uz liela skaita serveru, un tiek
replicēti starp šīm mašīnām - horizontāla mērogošana
• CAP teorēma, Map-Reduce princips
NoSQL kategorijas• Key-Value datubāzes
• memcached• Redis
• Column Family datubāzes• HBase, Cassandra
• Dokumentu datubāzes• Grafu datubāzes• Daudz-vērtību datubāzes• Objektu datubāzes• XML datubāzes
Spring Data projekts• Piedāvā atbalstu un integrāciju ar vairākām
datubāzēm
• Big Data: Apache Hadoop
• Key-Value: Redis
• Document: MongoDB
• Graph: Neo4j
• Column: HBase
Prezentācijas slānis
Klienta puses tehnoloģijas• Šodien ir atpakaļ un strauji attīstās klienta puses
tehnoloģijas:• JavaScript
• HTML5
• CSS3
• Tīmekļa lietojumprogrammu uzvedība un lietotāja saskarne strauji tuvojas reālā-laika sistēmām
Asinhronā datu apmaiņa• Ajax
• JavaScript (XMLHttpRequest) + CSS + DOM
• Comet - long polling• Serveris uztur klienta savienojumu un sūta datus kad
tie parādās. Klients uzreiz atver jaunu savienojumu.
• Comet - HTTP streaming• Savienojums netiek pārtraukts pēc servera atbildes.
• HTML5 WebSocket• Divvirzienu persistents HTTP savienojums
GWT: Google Web Toolkit• Ietvars sarežģīto un optimizēto Ajax
tīmekļa lietojumprogrammu
veidošanai
• Lietojumprogrammas kods tiek rakstīts Java valodā un tad tiek kompilēts par optimizēto JavaScript kodu, kurš izpildās pārlūkā
• Piedāvā bagātu Widget kolekciju
Ajax Push Engine• Pilnvērtīgs Comet
(Ajax Push) risinājums
• Push, don't pull!
http://www.ape-project.org
jQuery• jQuery ir ātra un ērta JavaScript
bibliotēka, kas vienkāršo:
• HTML dokumenta navigāciju
• Notikumu apstrādi
• Animāciju
• Ajax mijiedarbību
<html>
<head>
<script type="text/javascript"
src="jquery.js“/>
</script>
<script type="text/javascript">
// add JavaScript and jQuery code here
</script>
</head>
<body>
<!-- add HTML content here --> </body>
</html>
JavaScript attīstība• Ar Ajax izplatīšanu sākas JavaScript valodas otrā
dzimšanas
• Jaunākā tendence – jaunu programmēšanas valodu izstrāde, kur programmas kompilējas par JavaScript kodu
• Piemēri:• CofeeScript
• Dart
• TypeScript
CofeeScript• «A little language that compiles into JavaScript»
• Parādījās 2009. gadā
• Viens no mērķiem – padarīt JavaScript programmēšanu patīkamāku
• Programmas koda garums: ~ 1/3 no atbilstoša JavaScript koda
Dart• Jaunā programmēšanas valoda,
kuru izstrādāja Google
• Ambiciozs mērķis: «Ultimately to replace JavaScript as the lingua franca of web development on the open web platform.»
• Parādījās 2011. gadā
• Class-based, objekt-orientēta
valoda ar C-stīla sintaksi
TypeScript• Parādījās 2012. gadā (Microsoft)
• JavaScript paplašinājums, kas kompilējas par parasto JavaScript kodu
• Motivācija: nepieciešamība izmantot JavaScript lielo projektu izstrādei
• Piedāvā: tipu pārbaude kompilācijas laikā, klases, interfeisi, moduļi
Nobeigums• Tīmekļa lietojumprogrammas ir pašas izplatītākas
un populārākas mūsdienās
• Tīmekļa programmēšanas tehnoloģijas ļoti strauji attīstās visos slāņos• Servera puse
• Datubāzes
• Klienta puse
• Ļoti plašas un aizraujošas pētījumu un inovāciju iespējas šajā jomā