* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
Download (CGI) and Perl
Survey
Document related concepts
Transcript
Ch27 - Common Gateway Interface (CGI) and Perl • Outline – Server-side processing – Common Gateway Interface (CGI) – Other server-side programming technologies • (Active Server Pages (ASP)) • Java Servlets and Java Server Pages (JSP) • PHP Hypertext Processor • Python – Perl • Simple Perl examples • Handling HTTP Requests – GET and POST • CGI Environment Variables • Viewing CGI Environment Variables in Perl • Using Perl DBI to Connect to a Database 1 2 Web Programming Technologies Content Authoring: HTML Protocols: HTTP Server Side Processing Client Side Processing HTTP Request Web Server Web Browser CLIENT SERVER HTTP Response HTML Page Client Scripts: JavaScript Client Programs: Java Applets HTML Pages Protocols: CGI Server Scripts: Perl, ASP, PHP, JSP Server Programs: Java Servlets 3 What is server-side processing? • The use of programs on the server-side to process client input and produce client output – – – – Generates custom responses for clients Has access to server-side software that extend server functionality Provides programmers greater flexibility Contains greater programmatic capabilities than client-side equivalents • There are several technologies that can be used to create serverside scripts – – – – Common Gateway Interface (CGI) Microsoft Active Server Pages (ASP) – HTML embedding VBScript PHP Hypertext Processor (PHP) Java Servlets and Java Server Pages (JSP) • Common script languages – Perl, VBScript, Python, Java 4 Common Gateway Interface (CGI) • A standard for how a web server interact and transfer information to an application program (called CGI script) – Application is responsible for generating some dynamic content – Application can call database – Extend servers beyond simple HTML file serving • CGI = Common Gateway Interface. – Common - supported by almost all web servers, can be used by many platforms and programming languages such as Perl, C, C++, VBScript, etc – Gateway - pathway between server and application programs – Interface - provides a well-defined way to call up its features • CGI is Not… – a programming language 5 CGI at work • Read explicit data (form data) and implicit data (request headers) sent by client 2. Sets data HTMLForm 1. Sends HTTP-request 4. Reads data Internet Web Server Client (Browser) 6. Sends HTTP-response (HTML Page) Environment variables 3. Calls script CGI script 5. Returns output • Generate the results and send explicit data (HTML) and implicit data (status code and response headers) back to client Database 6 CGI Advantages and Disadvantages • Advantages – Web server and language independence (such as C/C++ or Perl) – Wide acceptance. De facto standard (One of the earliest server-side options). Many free example CGI scripts – Simple to use • Disadvantages – Each request starts up a new process of the CGI script – Stateless protocol. Can’t retain information between requests – Communication to application must go through the web server 7 Java Servlets and Java Server Pages (JSP) • Java servlet is like an applet that runs inside a web server, extending the servers functionality – A web server must provide an API so Java servlets can be written • JSP is part of the servlet API that allows Java to be embedded inside HTML – Same concept as ASP • Advantages of servlets and JSP – When written in Java, servlets and JSP are plattform independent – Wide support: from Netscape, Sun, Apache, Oracle, IBM – Servlets and JSPs are compiled, loaded once at server startup, and service Web requests using separate lightweight threads • Java Servlets and JSP are part of Java 2 Enterprise Edition (J2EE), a collection of enterprise APIs 8 PHP Hypertext Preprocessor • PHP is a script language in Web programming, which is platform independent but used primarily on Linux Web servers – Initials come originally from the earliest version of the program, which was called "Personal Home Page Tools“. Now acronym for PHP Hypertext Preprocessor – PHP is free and offered under an open source license. The latest version is PHP4. – Interpreter is freely available. • An alternative and works similar to ASP technology – LAMP - Linux, Apache, MySQL and PHP. Four parts to build fast, robust Web applications. PHP is a project of the Apache Software Foundation. – As with ASP, the PHP script is embedded within a Web page along with its HTML. Before the page is sent to a user that has requested it, the Web server calls PHP to interpret and perform the operations called for in the PHP script. – An HTML page that includes a PHP script is typically given a file name suffix of ".php" ".php3," or ".phtml". – Like ASP, PHP can be thought of as "dynamic HTML pages," since content will vary based on the results of interpreting the script. 9 Perl • Perl (Practical Extraction Report Language) is an interpreted language (not compiled, like Java) which is ideally suited for CGI programming. – written by Larry Wall in 1987. Combines syntax from several UNIX utilities and languages. – has also been adapted to non-UNIX platforms. ActivePerl, the standard Perl implementation for Windows is freely available • Perl is a text processing language that provides comprehensive string handling functions – designed to handle a variety of system administrator functions • It is widely used to write Web server programs for such tasks as – automatically updating user accounts and newsgroup postings – processing removal requests – synchronizing databases and generating reports 10 Python • An interpreted, object-oriented programming language developed by Guido van Rossum. • Can be used to write: – – – – – CGI-scripts ASP-scripts Large-scale Internet search engines Small administration scripts GUI applications • Python is very portable since Python interpreters are available for most operating system platforms. • Although Python is copyrighted, the source code is freely available, and unlike GNU software, it can be commercially resold. 11 Perl - Simple Example #!/usr/bin/perl $name=“Foo”; $friends=1; #$friends=2; #$friends=“many;” if ($friends == 1) { print “$name, you } The “shebang” construct (#!) indicates the path to the Perl interpreter on Unix systems. #I only have one friend #actually, I have 2 friends #I have too many friends are my best friend.”; Function print writes the string to the screen. 12 Data Types in Perl Scalar Fo rma t fo r va ria b le na m es o f this typ e $scalarname Array @arrayname Hash %hashname Da ta typ e Fig. 27.3 Perl d a ta typ es. Desc rip tio n Can be a string, an integer number, a floating-point number or a reference. An ordered list of scalar variables that can be accessed using integer indices. An unordered set of scalar variables whose values are accessed using unique scalar values (i.e., strings) called keys. 13 Client-Server Interaction • HTTP is a request-response protocol. Client sends request, server responds. • HTTP Request (Client is sending request message to Server ): – When a client sends a request, it consists of three parts: • Request line: (e.g. POST /im269/w7.html HTTP/1/1) – HTTP method type (GET or POST) – Resource name (URL) – Protocol/version • Header: contains browser information (optional) • Message body: in POST method request information is stored here (optional) • HTTP Response (Server is sending response message to Client): – The response sent by the server also consists of three parts: • Response line: (server protocol and status code) • Header: specifies the type of output (content-type such as text/html, location such as http://www.xxx.com, or no response such as 204 No Response) • Message body: (the actual data, such as sending back a Web page or a file to the user) 14 HTTP Response from a CGI script • A CGI script that produces a HTTP response. CGI responds to the server via standard output • Example CGI scripts: 1. Return content to user print print print print print print print ... print (“Content-type: text/html”); (““); (“<HEAD>”); (“<TITLE>CGI script output</TITLE>”); (“</HEAD>”); (“<BODY>”); (“<H1>Output from a CGI script</H1>”); (“</BODY>”); 2. Return a location to user Location: http://www.xxx.com 3. Return no response Status: 204 No Response 15 GET and POST request methods • Most common ways to send data from client to server: – GET request • • • • Retrieves appropriate resource from Web server Form contents are appended as a querystring to the URL Limits query to 1024 characters stored in request line Browsers cache (save on disk) HTML pages – Allows for quick reloading – Cache responses to get request – Do not cache responses to post request – POST request • • • • • Updates contents of Web server (posting new messages to forum) The data is sent as part the message body of the request. Not part of URL and cannot be seen by user Has no limit for length of query Posts data to server-side form handler – Note that the client don’t always need to send data to server to generate a response 16 Ways to call Server-Side Scripts • The URL specifies a script called “program” to be executed Instead of an HTML file. http://some.machine/cgi-bin/program.pl – Sending data directly to a script (using the GET-method) http://www.google.com/search?hl=en&q=CGI • Invoking can also be done through a link. A hypertext reference can refer to: – An exutable script <a href=http://domain_name/cgi-bin/scriptname> – An exutable script with arguments (using the GET-method) – <a href=http://domain_name/cgi-bin/scriptname?arg1+arg2> – An Active Server Page <a href=http://domain_name/catalog.asp> • It is much easier provide user input from an HTML form: <FORM ACTION=“http:// http://www.google.com/search”> Input elements go here </FORM> 17 Encoding User Input from Forms • HTML-forms are used to provide input to CGI scripts. The <FORM> tag requires two arguments: – – • ACTION – the URL representing the script which is to receive the form information METHOD – either GET or POST – represents the way in which the information will get passed to the script Using METHOD=“GET”. 1. FORM elements’ names are paired with their contents ie. <input type=“text” size=“9” maxlength=“9” name=“zip”> User inputs 10003, then zip=10003 2. All such name/value pairs are joined together with an ‘&’ 3. The entire input data string is URL encoded ie. name=Jane+Doe&address=35+W%27+4th+St%27&zip=10003 – On the server end the data is placed in the environment variable QUERY_STRING 18 Three ways to pass data to CGI scripts 1. Environment variables (When the GET method is used in an HTML form) – – Data is encoded as part of the URL Portions of the URL are assigned to the environment variables QUERY_STRING, PATH_INFO, and SCRIPT_NAME: http://www.usc.edu/cgi-bin/scriptname/extrapath/afile?input_data • QUERY_STRING is assigned input_data • PATH_INFO is assigned extrapath/afile • SCRIPT_NAME is assigned cgi-bin/scriptname 2. Standard input (When the POST method is used) – – The data is given in the message body of the HTTP request Web server forwards message body to the script via the standard input stream 3. Command–line arguments – For example, to pass arg1 and arg2 to a script: <a href=http://domain/cgi-bin/copy?arg1+arg2> 19 CGI Environment Variables • CGI environment variables are used to pass information about the context of execution. These variables are global, and accessible to all running programs • Programs -> programs • Variables are text strings (name and value pairs) • Can be classified into two major categories – Nonrequest specific – Request specific • Nonrequest-specific environment variables – These variables are set for all requests • SERVER_SOFTWARE The name and version of the information server software answering the request • SERVER_NAME The server's hostname, DNS alias, or IP address • GATEWAY_INTERFACE The revision of the CGI specification to which this server complies. 20 Request-specific environment variables (1) • These variables are set depending on the request being fulfilled by the CGI script: – SERVER_PROTOCOL The name and revision of the information protocol this request came in with. Format: protocol/revision – SERVER_PORT The port number to which the request was sent. – REQUEST_METHOD The method with which the request was made. For HTTP, this is "GET", "POST", etc. – PATH_INFO The extra path information, as given by the client. E.g. http://www.usc.edu/cgi-bin/scriptname/extrapath/afile?input_data – PATH_TRANSLATED the PATH_INFO path translated into an absolute document path on the local system, which takes the path and does any virtual-to-physical mapping to it. – SCRIPT_NAME A the path and the name of the script being executed, as referenced in the URL. – QUERY_STRING The information which follows the ? that referenced this script. 21 Request-specific environment variables (2) – REMOTE_HOST The Internet domain name making the request. – REMOTE_ADDR The IP address of the remote host making the request. – AUTH_TYPE If the server supports user authentication, and the script is protects, this is the protocol-specific authentication method used to validate the user. – REMOTE_USER the username that server and script have authenticated. – REMOTE_IDENT the remote user name retrieved by the server using inetd identification (RFC 931), – CONTENT_TYPE For queries which have attached information, such as POST-method, this is the MIME-content type of the data. – CONTENT_LENGTH The length of the content as given by the client. 22 Perl script to display CGI environment variables #!/usr/bin/perl The use statement instructs Perl programs to 2 # Fig. 27.11: fig27_11.pl include the contents (e.g., functions) of predefined 3 # Program to display CGI environment variables. packages called modules. The import tag 4 :standard imports a predefined set of standard 5 use CGI qw( :standard ); functions. 6 7 $dtd = 8 "-//W3C//DTD XHTML 1.0 Transitional//EN\" 9 \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"; 10 The start_html function prints the document type definition for 11 print( header() ); this document, as well as several opening XHTML tags (<html>, 12 <head>, <title>, etc., up to the opening <body> tag). 13 print( start_html( { dtd => $dtd, 14 title => "Environment Variables..." } ) ); 15 23 Perl script to display CGI environment variables, cont. 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 print( "<table style = \"border: 0; padding: 2; font-weight: bold\">" ); print( Tr( th( "Variable Name" ), th( "Value" ) ) ); print( Tr( td( hr() ), td( hr() ) ) ); foreach $variable ( sort( keys( %ENV ) ) ) { The %ENV hash is a built-in table in Perl that contains the names and values of all the environment variables. Function keys returns an unordered array containing all the keys in the %ENV hash. sort orders the array of keys alphabetically. The foreach loop iterates sequentially through the array returned by sort, repeatedly assigning the current key’s value to scalar $variable. print( Tr( td( { style => "background-color: #11bbff" }, $variable ), td( { style => "font-size: 12pt" }, Hash values are accessed using the syntax $hashName{ $ENV{ $variable } ) ) ); keyName }. In this example, each key in hash %ENV is print( Tr( td( hr() ), td( hr() ) ) ); } print( "</table>" ); print( end_html() ); the name of an environment variable name (e.g., HTTP_HOST). Function end_html returns the closing tags for the page (</body> and </html>). 24 Program Output 25 Introduction to DBI • Databases part of distributed applications – Divides work across multiple computers • Retrieves result set and displays results • Driver – Helps programs access databases – Each database can have different syntax – Each database requires its own driver • Interface – Provides uniform access to all database systems • Database interface – Programmatic library for accessing relational database 26 Perl Database Interface • Perl DBI – – – – Enables users to access relational databases from Perl programs Database independent Most widely used interface in Perl Uses handles (Fig. 22.29) • Object-oriented interfaces • Driver handles, database handles, statement handles – Each connection into the database is identified by a handle whose methods are called by Perl scripts Da ta Ob jec t Ha nd les Desc rip tio n Driver Handles Encapsulates the driver for the database; rarely used in a Perl script. Database Handles Encapsulates a specific connection to a database; can send SQL statements to a database. Statement Handles Encapsulates specific SQL statements and the results returned from them. Fig. 22.29 Da ta o b jec t ha nd les fo r Perl DBI. 27 MySQL • Pronounced “My Ess Que Ell” • Robust and scalable RDBMS • Multiuser, multithreaded server – Performs multiple commands concurrently • Uses SQL to interact with data • Supports various programming languages – C, C++, Java, Python, Perl, PHP, etc • Supports various operating systems – Windows, Linux and Unix • Access multiple databases with single query Fig27_19.pl 1 2 #!/usr/bin/perl # Fig. 27.19: fig27_19.pl 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 # 28 CGI program that generates a list of authors. use CGI qw( :standard ); use DBI; use DBD::mysql; The Perl DBI module and the MySQL driver, DBD::mysql are required. $dtd = "-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"; print( header() ); print( start_html( { dtd => $dtd, title => "Authors" } ) ); # connect to "books" database, no password needed $databaseHandle = DBI->connect( "DBI:mysql:books", "root", "", { RaiseError => 1 } ); # retrieve the names and IDs of all authors $query = "SELECT FirstName, LastName, AuthorID FROM Authors ORDER BY LastName"; # prepare the query for execution, then execute it # a prepared query can be executed multiple times $statementHandle = $databaseHandle->prepare( $query ); $statementHandle->execute(); print( h2( "Choose an author:" ) ); print( start_form( { action => 'fig27_20.pl' } ) ); print( "<select name = \"author\">\n" ); Connect to the database by calling DBI method connect. If the connection succeeds, function connect returns a database handle that is assigned to $databaseHandle. The database handle is used to prepare the query (using the method prepare). This method prepares the database driver for a statement, which can be executed multiple times. Method execute executes the query. Fig27_19.pl 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 # drop-down list contains the author and ID number # fetchrow_array returns a single row from the result while ( @row = $statementHandle->fetchrow_array() ) { print( "<option>" ); print( "$row[ 2 ]. $row[ 1 ], $row[ 0 ]" ); print( "</option>" ); } Method fetchrow_array accesses the results of the query. Each call to this function returns the next set of data in the resulting table until there are no data sets left. Each row is returned as an array and assigned to @row. print( "</select>\n" ); print( submit( { value => 'Get Info' } ) ); print( end_form(), end_html() ); # close the statement and database handles $databaseHandle->disconnect(); $statementHandle->finish(); Program Output Each value is printed as a list option. Close the database connection (using method disconnect), and specify that the query is finished by calling method finish 29