diff options
Diffstat (limited to 'documentation/architecture/architecture-technology.asciidoc')
-rw-r--r-- | documentation/architecture/architecture-technology.asciidoc | 208 |
1 files changed, 0 insertions, 208 deletions
diff --git a/documentation/architecture/architecture-technology.asciidoc b/documentation/architecture/architecture-technology.asciidoc deleted file mode 100644 index 39df9c3651..0000000000 --- a/documentation/architecture/architecture-technology.asciidoc +++ /dev/null @@ -1,208 +0,0 @@ ---- -title: Technological Background -order: 2 -layout: page ---- - -[[architecture.technology]] -= Technological Background - -((("Google Web -Toolkit"))) -((("Google Web -Toolkit"))) -This section provides an introduction to the various technologies and designs, -which Vaadin is based on. This knowledge is not necessary for using Vaadin, but -provides some background if you need to make low-level extensions to Vaadin. - -[[architecture.technology.html]] -== HTML and JavaScript - -((("HTML"))) -((("JavaScript"))) -The World Wide Web, with all its websites and most of the web applications, is -based on the use of the Hypertext Markup Language (HTML). HTML defines the -structure and formatting of web pages, and allows inclusion of graphics and -other resources. It is based on a hierarchy of elements marked with start and -end tags, such as [literal]#++<div> ... </div>++#. Vaadin uses HTML version 5, -although conservatively, to the extent supported by the major browsers, and -their currently most widely used versions. - -((("DOM"))) -JavaScript, on the other hand, is a programming language for embedding programs -in HTML pages. JavaScript programs can manipulate a HTML page through the -Document Object Model (DOM) of the page. They can also handle user interaction -events. The Client-Side Engine of Vaadin and its client-side widgets do exactly -this, although it is actually programmed in Java, which is compiled to -JavaScript with the Vaadin Client Compiler. - -Vaadin largely hides the use of HTML, allowing you to concentrate on the UI -component structure and logic. In server-side development, the UI is developed -in Java using UI components and rendered by the client-side engine as HTML, but -it is possible to use HTML templates for defining the layout, as well as HTML -formatting in many text elements. Also when developing client-side widgets and -UIs, the built-in widgets in the framework hide most of HTML DOM manipulation. - - -[[architecture.technology.styling]] -== Styling with CSS and Sass - -((("CSS"))) -((("Sass"))) -While HTML defines the content and structure of a web page, __Cascading Style -Sheet__ (CSS) is a language for defining the visual style, such as colors, text -sizes, and margins. CSS is based on a set of rules that are matched with the -HTML structure by the browser. The properties defined in the rules determine the -visual appearance of the matching HTML elements. - - -[source, css] ----- -/* Define the color of labels in my view */ -.myview .v-label { - color: blue; -} ----- - -((("SCSS"))) -((("CSS3"))) -__Sass__, or __Syntactically Awesome Stylesheets__, is an extension of the CSS -language, which allows the use of variables, nesting, and many other syntactic -features that make the use of CSS easier and clearer. Sass has two alternative -formats, SCSS, which is a superset of the syntax of CSS3, and an older indented -syntax, which is more concise. The Vaadin Sass compiler supports the SCSS -syntax. - -((("themes"))) -Vaadin handles styling with __themes__ defined with CSS or Sass, and associated -images, fonts, and other resources. Vaadin themes are specifically written in -Sass. In development mode, Sass files are compiled automatically to CSS. For -production use, you compile the Sass files to CSS with the included compiler. -The use of themes is documented in detail in -<<dummy/../../../framework/themes/themes-overview.asciidoc#themes.overview,"Themes">>, -which also gives an introduction to CSS and Sass. - - -[[architecture.technology.ajax]] -== AJAX - -((("AJAX"))) -((("XML"))) -((("JavaScript"))) -((("HTML -5"))) -((("CSS"))) -((("DOM"))) -((("XMLHttpRequest"))) -AJAX, short for Asynchronous JavaScript and XML, is a technique for developing -web applications with responsive user interaction, similar to traditional -desktop applications. Conventional web applications, be they JavaScript-enabled -or not, can get new page content from the server only by loading an entire new -page. AJAX-enabled pages, on the other hand, handle the user interaction in -JavaScript, send a request to the server asynchronously (without reloading the -page), receive updated content in the response, and modify the page accordingly. -This way, only small parts of the page data need to be loaded. This goal is -archieved by the use of a certain set of technologies: HTML, CSS, DOM, -JavaScript, and the XMLHttpRequest API in JavaScript. XML is just one way to -serialize data between the client and the server, and in Vaadin it is serialized -with the more efficient JSON. - -The asynchronous requests used in AJAX are made possible by the -[methodname]#XMLHttpRequest# class in JavaScript. The API feature is available -in all major browsers and is under way to become a W3C standard. - -The communication of complex data between the browser and the server requires -some sort of __serialization__ (or __marshalling__) of data objects. The Vaadin -servlet and the client-side engine handle the serialization of shared state -objects from the server-side components to the client-side widgets, as well as -serialization of RPC calls between the widgets and the server-side components. - - -[[architecture.technology.gwt]] -== Google Web Toolkit - -((("Google Web -Toolkit"))) -The client-side framework of Vaadin is based on the Google Web Toolkit (GWT). -Its purpose is to make it possible to develop web user interfaces that run in -the browser easily with Java instead of JavaScript. Client-side modules are -developed with Java and compiled into JavaScript with the Vaadin Compiler, which -is an extension of the GWT Compiler. The client-side framework also hides much -of the HTML DOM manipulation and enables handling browser events in Java. - -GWT is essentially a client-side technology, normally used to develop user -interface logic in the web browser. Pure client-side modules still need to -communicate with a server using RPC calls and by serializing any data. The -server-driven development mode in Vaadin effectively hides all the client-server -communications and allows handling user interaction logic in a server-side -application. This makes the architecture of an AJAX-based web application much -simpler. Nevertheless, Vaadin also allows developing pure client-side -applications, as described in -<<dummy/../../../framework/clientsideapp/clientsideapp-overview.asciidoc#clientsideapp.overview,"Client-Side -Applications">>. - -See -<<dummy/../../../framework/architecture/architecture-client-side#architecture.client-side,"Client-Side -Engine">> for a description of how the client-side framework based on GWT is -used in the Client-Side Engine of Vaadin. -<<dummy/../../../framework/clientside/clientside-overview.asciidoc#clientside.overview,"Client-Side -Vaadin Development">> provides information about the client-side development, -and -<<dummy/../../../framework/gwt/gwt-overview.asciidoc#gwt.overview,"Integrating -with the Server-Side">> about the integration of client-side widgets with the -server-side components. - - -[[architecture.technology.servlet]] -== Java Servlets - -A Java Servlet is a class that is executed in a Java web server (a __Servlet -container__) to extend the capabilities of the server. In practice, it is -normally a part of a __web application__, which can contain HTML pages to -provide static content, and JavaServer Pages (JSP) and Java Servlets to provide -dynamic content. This is illustrated in -<<figure.architecture.technology.servlet>>. - -[[figure.architecture.technology.servlet]] -.Java Web Applications and Servlets -image::img/java-servlet-hi.png[] - -Web applications are usually packaged and deployed to a server as __WAR__ ( -__Web application ARchive__) files, which are Java JAR packages, which in turn -are ZIP compressed packages. The web application is defined in a -[filename]#WEB-INF/web.xml# deployment descriptor, which defines the servlet -classes and also the mappings from request URL paths to the servlets. This is -described in more detail in -<<dummy/../../../framework/application/application-environment#application.environment.web-xml,"Using -a web.xml Deployment Descriptor">>. The class path for the servlets and their -dependencies includes the [filename]#WEB-INF/classes# and -[filename]#WEB-INF/lib# folders. The [filename]#WEB-INF# is a special hidden -folder that can not be accessed by its URL path. - -The servlets are Java classes that handle HTTP requests passed to them by the -server through the __Java Servlet API__. They can generate HTML or other content -as a response. JSP pages, on the other hand, are HTML pages, which allow -including Java source code embedded in the pages. They are actually translated -to Java source files by the container and then compiled to servlets. - -The UIs of server-side Vaadin applications run as servlets. They are wrapped -inside a [classname]#VaadinServlet# servlet class, which handles session -tracking and other tasks. On the initial request, it returns an HTML loader page -and then mostly JSON responses to synchronize the widgets and their server-side -counterparts. It also serves various resources, such as themes. The server-side -UIs are implemented as classes extending the [classname]#UI# class, as described -in -<<dummy/../../../framework/application/application-overview.asciidoc#application.overview,"Writing -a Server-Side Web Application">>. The class is given as a parameter to the -Vaadin Servlet in the [filename]#web.xml# deployment descriptor. - -The Vaadin Client-Side Engine as well as client-side Vaadin applications are -loaded to the browser as static JavaScript files. The client-side engine, or -widget set in technical terms, needs to be located under the -[filename]#VAADIN/widgetsets# path in the web application. The precompiled -default widget set is served from the [filename]#vaadin-client-compiled# JAR by -the Vaadin Servlet. - - - - |