Korherr, J. (2015). RESTful web applications with reactive, partial server-side processing in Java EE [Diploma Thesis, Technische Universität Wien]. reposiTUm. https://doi.org/10.34726/hss.2015.32225
Web-Framework; Java EE; asynchron; nicht blockierend; partielles Rendering; skalierbar; Templates ohne Logik; AJAX; HTML5 history API; Hijax
de
web framework; Java EE; asynchronous; non-blocking; partial-page rendering; scalable; logic-less templates; AJAX; HTML5 history API; Hijax
en
Abstract:
Klassische Webapplikationen senden zu viele Daten vom Webserver zum Browser des Benutzers, weil für jede Server-Anfrage eine vollständige Seite generiert und übertragen wird, obwohl sich nur Teile dieser Seite wirklich ändern. Diese Verschwendung von Server- und Netzwerk-Ressourcen führt zu einem verminderten Nutzererlebnis, aufgrund der längeren Anfrage- und Übertragungszeiten. In Wirklichkeit reicht es vollkommen aus nur die Teile der aktuellen Seite neu zu berechnen und zu übertragen, welche sich auch tatsächlich ändern, wohingegen alle anderen Teile der Seite unverändert bleiben können. Dieser Ansatz, welcher unter dem Begriff "single-page Webapplikationen" bekannt ist, kann mit Hilfe von AJAX implementiert werden, wobei das jedoch zu neuen Problemen führt, wie z.B. schlechterer Unterstützung für direkte Links zu jeder beliebigen Seite der Webapplikation oder verminderter Funktionalität des Zurück-Buttons des Browsers auf der Webseite. Durch die Verwendung der HTML5 History API können diese Probleme jedoch beseitigt werden. Das Ziel dieser Arbeit ist es die HTML5 History API auf deklarative Weise (d.h. mittels spezieller Syntax anstatt expliziter Aufrufe der API) in Java EE einzubinden. Realisiert wird dieses Ziel durch die Entwicklung eines neuen Webframeworks für die Erstellung von single-page Webapplikationen, basierend auf etablierten Java EE Standards, genannt Mascherl. Dieses Framework nutzt partielles Rendering zusammen mit AJAX und der HTML5 History API, damit die resultierende Webapplikation bookmarkfähige Internetadressen verwendet sowie die Zurück- und Vorwärts-Buttons des Browsers wie erwartet unterstützt, obwohl rein technisch der Webbrowser immer auf derselben Webseite bleibt. Das Berechnen und Rendern der partiellen Aktualisierungen der Webseite geschieht dabei vollständig am Server, im Unterschied zu bekannten Vertretern von "single-page Webapplikationen", die auf JavaScript basieren, wie z.B. AngularJS, EmberJS, oder dem Google Web Toolkit (GWT). Außerdem beschäftigt sich diese Arbeit mit dem weit verbreiteten Skalierbarkeitsproblem von aktuellen Webapplikationen, welches hauptsächlich durch die Verwendung von zustandsorientierten Webservern sowie synchroner, blockierender Anfragebearbeitung entsteht. Mit dem neu entwickelten Webframework ist es möglich Webapplikationen zu erstellen, welche dem REST-Paradigma genügen und die Installation auf einem zustandslosen Java EE Server erlauben. Eine horizontale Skalierung dieser Applikationen ist somit ohne Weiteres möglich. Zusätzlich können Benutzer-Anfragen auch asynchron und ohne Blockieren eines Server-Threads abgearbeitet werden, wodurch eine große Anzahl von Anfragen gleichzeitig bedient werden kann. Darüber hinaus wird die Zweckmäßigkeit das Webframeworks anhand einer Beispielapplikation präsentiert. Diese Applikation wird weiters für die Evaluierung der Performanz des Webframeworks herangezogen.
de
Classic web applications are sending too much data from the web server to the client browser, because they are using full page requests, although only parts of the UI are actually changing. This implies that resources on the web server and network traffic are wasted, and furthermore the user experience suffers, because of longer response times. In fact, it is sufficient to only re-render those parts of the current web page, which are actually changing, whereas the other parts of the page can remain unchanged. This approach, called single-page web applications, can be implemented using AJAX, unfortunately, introducing problems like decreased bookmarkability and reduced back-button support. However, by introducing the HTML5 history API, these problems can be circumvented. This thesis aims to add declarative support (i.e. using special syntax rather then having to call the API manually) for using the HTML5 history API with Java EE by developing a novel web application framework, built on existing Java EE standards, for creating single-page web applications, called Mascherl. This framework employs partial-page rendering using AJAX in combination with the history API, in order to make the resulting single-page web application bookmarkable, and to allow the browser's back- and forward-buttons to work as expected. The framework uses server-side rendering with partial model evaluation for the partial-page updates, as opposed to client-side rendering used in popular JavaScript single-page web application frameworks like AngularJS, EmberJS, or Google Web Toolkit (GWT). Moreover, this thesis also addresses the scalability problem of prevalent web frameworks, which mainly exists because of the usage of stateful servers and synchronous, blocking request processing. Using the resulting framework, it is possible to create RESTful single-page web applications, which run on stateless Java EE servlet containers, and can therefore be horizontally scaled without further considerations. In addition, the framework has built-in support for asynchronous, non-blocking request handling, which allows the web application server to serve a great number of concurrent requests without blocking. On top, this thesis presents an example application, which is built using the developed framework. This example application is then used for evaluating the framework's performance.