Last time we implemented a small but functional HTTP web server in Perl, which works like Apache by serving static contents. When that was done, it became instantly clear how and why a HTTP web server, such as Apache, works that way. It also became somewhat clear how Apache uses extensions to work with non-static content, such as PHP, JSP, ASP etc.
For example, when a PHP file test.php is requested, in the Perl web server, just call something like this:
system("php test.php");
then grab the output and send it back to the client. The basic principle is as simple as that.
Now I'm looking at JEE, which uses Tomcat application server and a connector module in the middle to work with Apache. I'm thinking I should be able to extend my Perl web server to work with Tomcat, and thus the JSP/Servlet/JEE stack as well.
To do this is easy: in a config file, tell the Perl web server which paths should be mapped to Tomcat. Then, when a request coming for that path, establish a TCP client, transfer the request URL to Tomcat, which basically means to send a request to "http://localhost:8080/path", and receive the response from Tomcat server, then send it back to the Perl web server client.
Actually, this can be easily verified by using telnet. Type:
telnet localhost 8080
This will establish a connection session to Tomcat server. Next type this request:
GET /
The Tomcat server will send the index page back, and close the connection.
Basically, what the Perl web server should do is exactly the same. To implement this, we need to be able to code a web client in Perl. We can either build it from scratch in socket programming, or use the LWP module, as in reference [1].
To work with ASP or ASP.NET, the Perl web server can work as a proxy, passing the request to an internal IIS web server, and sends back the response.
This way, the Perl web server in principle can work with any other web technologies.
== Create Web Browser with a GUI ==
Chapter 7 of [1] is on graphical examples in Perl/Tk. This
basically demonstrates how to implement your own web browser with a GUI
(not just command line interface), similar to firefox or any other
popular web browsers. And if we can do it in Perl/Tk, we can also
create the GUI interface in Java or C/C++. Following this way, we can
reinvent the entire wheel of the internet world [2][3]. [3] talks about the libwww module of Python, which was written by Tim Berners-Lee, and contains many functions needed by a web application including a browser.
One of the most difficult part of this is the amount of work involved in html/javascript/css parser and renderer. In 2006 Netscape wanted to create a new one from scratch, they failed after 3 years. Many of current browsers are based on a rendering engine, this is WebKit [6][7] for Safari and Chrome (before 28), blink for Opera and Chrome (28+) [11][12], Gecko for Firefox [10], and Trident for IE [8][9].
A list of browser html rendering engines can be found in [4][5], including Amaya, Blink, Gecho, KHTML, Presto, Tasman, Trident and WebKit.
References:
[1] Web Client Programming in Perl
[2] Where should you start Coding a Web Browser?
[3] W3C Blog: Build Your Own Browser
[4] Comparison of layout engines (HTML)
[5] Web browser engine
[6] The WebKit Open Source Project
[7] Wiki: WebKit
[8] Wiki: Trident (layout engine)
[9] Internet Explorer Architecture
[10] Wiki: Gecko
[11] Wiki: Blink (layout engine)
[12] The Chromium Projects: Blink
Subscribe to:
Post Comments (Atom)
Blog Archive
-
▼
2014
(64)
-
▼
July
(23)
- Flash an Android Phone
- Google form and Sign in with linkedin
- Platform independent GUI development
- Online books for Perl
- IT - The Big Picture
- Write a crawler in Perl
- Coding Styles
- Supporting PHP, ASP, JSP/Servlet and Tomcat in Per...
- Setup Ubuntu in VirtualBox
- Design of a tinyurl service
- Memcached
- What JavaScript can do in browser for game program...
- The Mandelbrot Set and Fractals
- A Game of M.C. Escher style
- Estimate size of MSSQL Table with indices
- Largest collection of FREE Microsoft eBooks ever
- DirectX SDK
- JavaEE and SSH (Struts/Spring/Hibernate)
- Apache projects
- Hiren's Boot CD
- Notes on Git and Github
- Birthday Calculator update
- More iOS and Android programming, and OCR library
-
▼
July
(23)
No comments:
Post a Comment