The ability to create easily maintained and easily updated web applications is crucial in today's fast-changing, browser-centric world. Rapidly changing business demands drive the need for rapid web site content updates/changes. Competing artistic factors supply a constant challenge to keep the web site's visual design interesting. Seldom does one individual possess all the talents required to meet each of these challenges. Open Source Linux: Web Programming addresses these types of challenges.
In this book, the reader is guided through an extensible and scalable web application development methodology. The tools used to carry out the methodology include Perl, CGI, HTML and XML. The recommended methodology is based on object-oriented and decoupled functionality concepts. By the time you reach the book's end, you will have developed and examined a series of web applications that apply each design concept or programming convention.
The authors assume the reader possesses at least an intermediate level of experience with computing and programming technologies. With this framework, the book states the concept to be applied or the task to be performed. The rationale for why each concept or task is important is also presented. What you will not find is a list of the steps required to perform the tasks. Extending what you learn to your own applications is where the intermediate to advanced experience comes in. What's presented will generally get you up and running. Other resources are required if you want more specific details.
The book is divided into two sections, ``The Modern Internet Application'' and ``Going Beyond Today's Internet Model''. The first section (and majority of the book) is devoted to programming an Internet application. Each chapter opens with a few paragraphs on what you are going to build and why the way it will be built is important. Systems or functionality programmed in one chapter is often the foundation for systems or additional functionality presented in later chapters. For those who dislike typing, all program listings are available on the CD-ROM.
The first section opens with a quick review of distributed systems and an introduction to the Apache HTTP server. In the chapter titled ``Using Perl to Implement CGI on Linux'', the authors present just enough Perl for the reader to understand the forthcoming application programs. A simple Perl-based CGI module that analyzes Apache logs is programmed in this section.
The ``Separating Content and Logic with Objects'' chapter further explores a modular and dynamic web site design. Decomposing application content, program and business logic and presentation into objects are discussed. Techniques presented facilitate coding an easily maintained site-wide look and feel. Here, ``easily maintained'' means a non-programmer can update content and change graphics. These designs and techniques result in coding a simple on-line catalog application.
The next three chapters focus on using XML. ``Using HTML to Create Well-Structured Objects'' walks one through basic XML syntax and structure. Writing XML-driven CGI scripts that translate XML to HTML is the focus of the ``Handling XML with a CGI Application Server'' chapter. The discussion on XML continues in ``Creating a Client-Based Web Content Administrator''. This chapter concludes with the coding of a Perl, CGI, HTML and XML web content administrator application. This application enables a non-technical person to update web page content. All the concepts and coding techniques presented in these chapters may be put to use today.
In the book's second section, the authors pause to look a short distance into the future. They then close the book out with two very critical subjects. This section's opening chapter discusses limitations and issues related to the stateless transaction nature of HTTP and CGI. The authors offer a rationale for moving to a state-based transaction and an open-source XML application server.
Chapter 9, ``Developing Java Applets on Linux'', presents Java basics through the construction of simple Java applets. Chapter 10, ``Creating a Java/XML Web Application'', pulls together previously presented design principles and techniques to code a network chat and whiteboard application.
The last two chapters cover error handling and web deployment applications. Poor error handling can easily destroy the user's experience. Poor site deployment can ruin the user's experience and negatively impact the application's post-implementation performance and maintainability. An error-handling system is constructed in the ``Bulletproofing Your Site with Error Handling'' chapter. As in the previous projects, the authors begin by applying object-oriented concepts to the error-handling system. In this example, they decouple error messages from the error codes. Both objects are decoupled from the error handler and the actions to be taken upon an error situation. Nothing stresses an application, or its implementation, more than a real user. Next to the user, nothing can cripple a web site faster than coding techniques incompatible with the implementation strategy.
The chapter entitled ``Deploying Your Linux Web Application'' reviews how implementation decisions can reach back and negate application development and coding decisions. This chapter briefly discusses the need to consider various factors affecting throughput, scalability, system resource consumption and the need to avoid vendor-specific language extensions. General guidelines for identifying bottleneck and bandwidth problems are suggested.
By the time you reach the end of this book, you will have explored conceptual constructs, models and tools you can use to develop web sites. These sites should be easier to deploy, update and maintain. More importantly, web site content changes will not always require programming expertise to implement.
Daniel Lazenby (d.lazenby@worldnet.att.net) first encountered UNIX in 1983 and discovered Linux in 1994.