90 likes | 200 Views
CGI programming. Using Apache. Concepts. Browser prepares parameter list List is attached to name of program to run on server "submit" button sends string to server as name/value pairs Server locates program in CGI directory Server loads program Server passes string to program
E N D
CGI programming Using Apache
Concepts • Browser • prepares parameter list • List is attached to name of program to run on server • "submit" button sends string to server as name/value pairs • Server locates program in CGI directory • Server loads program • Server passes string to program • Program processes parameters and acts as needed • Program creates strings and outputs to server • One line of HTML code per output statement (cout, printf, etc) • ALL stream output goes to the Server • Server sends strings to browser • Browser interprets the HTML code & displays the "page"
CGI output (C++ example) #include <iomanip> cout << "Content-Type: text/html\n\n" << endl; cout << "<!DOCTYPE html>" << endl; // HTML 5 cout << "<html>" << endl; …. Your HTML & text go here … cout << "</html>" << endl; • 1st line identifies output media type to browser • 2nd line identifies document type version • 3rd line is actual start of the page
Content-type problems • Inability of data source to identify content • Wrong file extension • Bad file extension • Extension collisions • Ambiguous container formats • Ambiguous magic numbers • Inability of receiver to trust sender's media type • Programmers try to guess content type by examination
Using styles • Output is a stream representing a single "file" • HTML files do NOT have to have one tag per line • Output can be individual lines or several long lines: cout<< "<p> text <ol><li>item1</li></ol>"<<endl; • Styles can be embedded or inline • Generate style tags just like any other HTML cout << "<style> .red {font:red} " << endl; cout << ".bigtext {text-size:150%} " << endl; </style>" << endl;
Using JavaScript • JS can be inserted: • as functions in <head> </head> • As inline code inside <script></script> in body of doc • CGI generated pages "act like" real pages
Activating your CGI program • Generate an HTML form (using cout or printf): <form name='myform' action="cgi-bin/your program's executable"method='post' > <!-- for testing: use action='mailto:your email address' --> … {your JS function def's and html and go here} document.myform.submit(); // this submits the form to the browser <td><input onclick='chkflds();' type='button' value="multiply them!"></TD> </form> • Where I have "chkflds" you could put the name of a function to validate the fields • The function would have to be inside <script> and <head> tags • RECOMMENDATION: put the form's elements inside a table • <form> <table> .. Input/button tags here… </table></form>
Setting up your Apache server • Open terminal window • Type: nano /etc/httpd/conf/httpd.conf (or use your favorite editor instead of nano) • Locate "ServerAdmin" and replace the email address with yours • Locate "ServerName" and replace the default with your TJWnnn account (tjwnnn.cc.binghamton.edu) • Save the file using the same name it had • In the terminal window type the following command:apachectl start • Close your session
Testing your web server • Create a simple web page • Save it in /var/www/html with the name: index.html • Open a browser on your own PC (NOT on the TJW machine) • Enter the address of your tjw accounte.g.; tjw241.cc.binghamton.edu (that's mine!!) • You should now see your test page