280 likes | 298 Views
Explore server-side scripting with CGI, FastCGI, PHP, WSGI, ASP.NET, JSP, and other alternatives like Ruby on Rails. Learn about dynamic content generation and integration methods.
E N D
Server-sideScripting Martin Kruliš by Martin Kruliš (v1.4)
Web Server (Revision) • Serving Static Pages Apache configuration HTTP Request GET /myweb/index.html ... /var/www/myweb/ ` Internet Client Web Server HTTP Response HTTP/1.1 200 OK Content-Length: 1019 Content-Type: text/html; ... <contents of index.html> index.html by Martin Kruliš (v1.4)
Web Server (Revision) • Serving Dynamic Content HTTP Request GET /myweb/app.cgi ... /var/www/myweb/ ` Internet stdin app.cgi stdout Client Web Server HTTP Response HTTP/1.1 200 OK Content-Length: 2049 Content-Type: text/html; ... <contents generated by cgi> by Martin Kruliš (v1.4)
CGI • Common Gateway Interface • One of the first standards for generating dynamic web content • NSCA specification from 1993 how to invoke command line applications • Current version CGI 1.1 (RFC 3875) from 2004 • Specifies only the interface • Application may be written in any language • Important information and headers are set as environ-ment variables, POST body is directed to std. input • Response is taken from the std. output Example 1 by Martin Kruliš (v1.4)
FastCGI • CGI Issues • Starting a process takes some system time • Each process handles exactly one request • Unable to keep session/shared data in memory • Fast CGI Improvement • Fast CGI server runs independently from web server • Keeps the process pool, resources, … • Communicates with web server via socket/TCP • Multi-request processing may be achieved by multiplexing or multiple connections (or both) by Martin Kruliš (v1.4)
Web Server – FastCGI • Improving CGI HTTP Request GET /myweb/app.cgi ... ` Internet Client Web Server FastCGI Server HTTP Response HTTP/1.1 200 OK Content-Length: 2049 Content-Type: text/html; ... <contents generated by cgi> by Martin Kruliš (v1.4)
Web Server (Revision) • Integrating Scripting Modules HTTP Request GET /myweb/index.php ... /var/www/myweb/ ` mod_php Internet index.php Client Web Server HTTP Response HTTP/1.1 200 OK Content-Length: 1984 Content-Type: text/html; ... <contents generated by php> by Martin Kruliš (v1.4)
PHP • PHP: Hypertext Preprocessor • Popular language originally designed for the web • The language has integrate API for handling requests • Things like URL parameters, POSTed data, headers,or server settings are presented in global variables • PHP script code can be directly interleaved withHTML (or other type of generated content) • The script is embedded between <?php, ?> marks • The PHP interpret process the script and replace its body with its output in the document Example 2 by Martin Kruliš (v1.4)
WSGI • Web Server Gateway Interface • Universal interface between web servers and web applications designed for the Python language • Interface is called WSGI middleware and it is implemented by both sides (server and application) • Specific new features • Routing requests to application objects (by URL) • Multiple applications may run in one process • Content post-processing (e.g., by XSLT) • Load balancing (remote processing, forwarding, …) • Similar APIs • Rack (Ruby), PSGI (Perl), JSGI (JavaScript) Example 3 by Martin Kruliš (v1.4)
ASP.NET • ASP.NET • Microsoft solution built on .NET platform • Supports all .NET languages (C#, VB, …) • Successor to Microsoft’s Active Server Pages • Requires Microsoft IIS web server • Mono version (mod_mono and FastCGI) exists • WebForms • Basic building blocks for ASP.NET web pages • Similar HTML interleaving syntax as PHP • The idea is to design web pages in the same manner as desktop applications by Martin Kruliš (v1.4)
ASP.NET • ASP.NET • WebForms • Event-based model, events may be processed at server • The forms automatically serializes the whole state • Razor syntax • Block starts with @ and does not require explicit closing • MVC • Alternative type of ASP.NET applications • Default view engine is either Razor (.cshtml, .vbhtml), or Web Forms (.aspx) • Controllers are .NET classes, methods are actions • Routers select controller class and invoke an action by Martin Kruliš (v1.4)
JSP • Java Server Pages • Java-based solution for dynamic web pages • Requires web server with servlet container • Apache Tomcat, Jetty, … • Supports both “simple” PHP-like approach and MVC • Uses <%, %> marks for scriptlet-HTML interleaving • MVC usually uses JavaBeans as the model and Java servlets as the controller • Java compilation • Compiler is integrated in the web server and compiles the page when first needed (or when changed) by Martin Kruliš (v1.4)
Other Java Alternatives • JSP is (almost) dead… • Many alternatives • Spring MVC • Spring boot • JSF • Vaadin • Play 1, Play 2 • Struts 1, Struts 2 • GWT • Grails • Wicket • … by Martin Kruliš (v1.4)
Ruby on Rails • Ruby on Rails • Ruby scripting language + Rails web framework • Basic philosophy • DRY (Don’t Repeat Yourself) – avoid code duplication • Convention Over Configuration – our way is the “best” • Very strict style of application development • Improves efficiency, but ties your hands • Specific structure of the application • Reflects the MVC pattern • $> rails new myapp • Generates new application structure in ./myapp by Martin Kruliš (v1.4)
Integrated Web Server • Dedicated Web Server for an Application HTTP Request GET /myweb/index ... ` Internet Web ServerModule Client DatabaseModule HTTP Response HTTP/1.1 200 OK Content-Length: 1984 Content-Type: text/html; ... <contents generated by app> by Martin Kruliš (v1.4)
Node.js • JavaScript Server-side Platform • Basically a Google V8 JavaScript engine compiled as CLI script interpreter • V8 is used in Chrome and it is the fastest JS interpreter • Contains many pre-built packages for server-side application development (sockets, HTTP, …) • HTTP server is embedded in the application, so the programmer may tune it for specific needs • Aims for fast developed single-language solutions • Using Javascript on client and server allows some level of code sharing Example 4 by Martin Kruliš (v1.4)
Statistics by Martin Kruliš (v1.4)
Web Application Architectures • Client-server Architectures • Strict separation of two application parts • Client - data presentation, user interface • Server – business logic, data storage • Both sides are connected via specific API (HTTP) • The communication latency and overhead influence the application design • Three-tier architecture • Presentation (client), business logic (server), database (server, possibly dedicated machine) by Martin Kruliš (v1.4)
Web Application Architectures • Traditional (CGI-like) Applications Data management Business logic Authentication/authorization HTML rendering Clicks on hyperlink Submits a form HTTP Request new URL (possibly form data) Client HTTP Response New HTML page Web Server New page is displayed (browsing) by Martin Kruliš (v1.4)
Web Application Architectures Data management Business logic Authentication/authorization HTML renderingJSON/XML/… serialization • AJAX-enhanced Applications HTTP Request AJAX target URL (possibly form data) JavaScript performs AJAX request Clicks on hyperlink Submits a form HTTP Request new URL (possibly form data) Client HTTP Response New HTML page Web Server New page is displayed (browsing) HTTP Response JSON, XML, HTML fragment, … JavaScript alters page based on the response by Martin Kruliš (v1.4)
Web Application Architectures • AJAX-only Applications Data management Partial business logic Authentication/authorizationJSON/XML/… serialization HTTP Request AJAX target URL (possibly form data) JavaScript performs AJAX request HTTP Request URL of bootstrap page Page is opened or refreshed Client HTTP Response Bootstrap HTML page Web Server JavaScript alters page based on the response(no browsing) HTTP Response JSON, XML by Martin Kruliš (v1.4)
Web Application Architectures • Single Page Applications HTTP Request AJAX target URL (possibly form data) AJAX request ~ database operation REST (CRUD) API Thin layer above database Authentication/authorization HTTP Request URL of bootstrap page Page is opened or refreshed Client HTTP Response Bootstrap HTML page Web Server JavaScript handles almost all business logic HTTP Response JSON, XML by Martin Kruliš (v1.4)
Server-side Scripting • Specific Issues of the Server Side • Traditional (CGI-like) web applications • Work in batches – client wants to perform a large task with each HTTP request • Download a page full of formatted data • Submit a form and generate a response • Difficult state management (HTTP is stateless) • AJAX - Code replication issues (at client and server side) • Modern (single page) web applications • Server is just a remote API for AJAX calls • Difficult to integrate AJAX API into existing applications, or create applications that work both ways by Martin Kruliš (v1.4)
Application Design • Event-driven Desktop GUI Application Events are processed sequentially Event BackgroundProcessing BackgroundProcessing BackgroundProcessing Main Loop GUI Event All components can access main memory Operating Memory Application State by Martin Kruliš (v1.4)
Application State • Data Directly Related to User Interactions • UI and Logical State (non-persistent data) • Focus, mouse cursor location • Values filled in form controls • Which application screen is visible • Work in progress in an open transaction • … • Persistent data • Has to survive application shutdown • Application files or database by Martin Kruliš (v1.4)
Web Application State • Logical State and User Interface State • Component Micro-States • Focus, open-selection of a control box, … • Handled in HTML/CSS or with little help from JavaScript • User Interface State • Selected screen, user transaction progress, … • URL, Cookies, Sessions, LocalStorage, … • Business Logic State, Complex UI States • E.g., Modifications in a opened data file • Added to persisted state, but localized for each user by Martin Kruliš (v1.4)
Web Application State Database, Files, Session storage • Traditional Web Application URL Cookies (POST Data) Application State Browser Application State Check integrity Event Batch-like processing ProcessingScript Memory Browsing,submitting form New State Example 5 Serialization/deserialization, encoding, … by Martin Kruliš (v1.4)
Discussion by Martin Kruliš (v1.4)