M0194 Web-based Programming Lanjut Session 1 2004 Tau Yenny, SI - Binus 2 Active Server Pages (ASP) ASP Object Model Request Object Response Object Form and QueryString ServerVariable Collection 2004 Tau Yenny, SI - Binus 3 ASP Object Model 2004 Tau Yenny, SI - Binus 4 ASP Objects Request Object Makes available to our script all the information that the client provides when requesting a page or submitting a form Include : the HTTP variables that identify the browser and the user the cookies that they have stored on their browser for this domain any values appended to the URL, either as a query string or in HTML controls in a <FORM> section of the page 2004 Tau Yenny, SI - Binus 5 ASP Objects Response Object to access the response that we are creating to send back to the client. It makes available : - to our script the HTTP variables that identify our server and its capabilities - information about the content we’re sending to the browser - any new cookies that will be stored on their browser for this domain Provides a series of method that we can use to create output 2004 Tau Yenny, SI - Binus 6 ASP Objects Application Object Created when the ASP DLL is loaded in response to the first request for an ASP page. Provides a repository for storing variables and object references that are available to all the pages, which any visitor can open. 2004 Tau Yenny, SI - Binus 7 ASP Objects Session Object Created for each visitor when they first request an ASP page from the Web site or Web application, and it remains available until the default timeout period expires. Provides a repository for storing variables and object references that are available only to the pages that visitor opens during the lifetime of the session 2004 Tau Yenny, SI - Binus 8 ASP Objects Server Object Provides us with a series of methods and properties that are useful in scripting with ASP ASPError Object Provides a range of detailed information about the last error that occurred in ASP. 2004 Tau Yenny, SI - Binus 9 The ASP Request Object The Request Object’s Collections Collection Name Description ClientCertificate A collection of the values of all the fields or entries in the client certificate that the user presented to our server when accessing a page or resource. Each member is read-only. Cookies A collection of the values of all the cookies sent from the user’s system along with their request. Only cookies valid for the domain containing the resource are sent to the server. Each member is readonly. Form A collection of the values of all the HTML control elements in the <FORM> section that was submitted as the request, where the value of the METHOD attribute is POST. Each member is read-only. QueryString A collection of all the name/value pairs appended to the URL in the user’s request, or the values of all the HTML control elements in the <FORM> section that was submitted as the request where the value of the METHOD attribute is GET or the attribute is omitted. Each member is read-only. 2004 Tau Yenny, SI - Binus 10 The ASP Request Object Collection Name ServerVariables Description A collection of all the HTTP header values sent from the client with their request, plus the values of several environment variables for the Web server. Each member is read-only. The Request Object’s Property Property TotalBytes Description Read-only. Returns the total number of bytes in the body of the request sent by the client. The Request Object’s Method Method Description BinaryRead(count) Retrieve count bytes of data from the client’s request when the data is sent to the server as part of a POST request. It returns a Variant array (or SafeArray). Cannot be used successfully if the ASP code has already referenced the Request.Form collection. Likewise, the Request.Form collection cannot be successfully accessed if you have used the BinaryRead method. 2004 Tau Yenny, SI - Binus 11 The ASP Response Object The Response Object’s Collection Collection Name Cookies Description A collection containing the values of all the cookies that will be sent back to the client in the current response. The collection is write only. The Response Object’s Properties Property Buffer = True | False Description Read/write. Boolean. Specifies if the output created by an ASP page will be held in the IIS buffer until all of the server scripts in the current page have been processed or until the Flush or End method is called. It must be set before any output is sent to IIS, including HTTP header information, so it should be the first line of the .asp file after the <%LANGUAGE=..%> statement. Buffering is on (True) by default in ASP 3.0, whereas it was off (False) by default in earlier versions. 2004 Tau Yenny, SI - Binus 12 The ASP Response Object Property Description CacheControl “setting” Read/write. String. Set this property to “Public” to allow proxy servers to cache the page, or “Private” to prevent proxy caching taking place. Charset = “value” Read/write. String. Appends the name of the character set (for example, ISO-LATIN-7) to the HTTP Content Type header created by the server for each response. ContentType = “MIME-type” Read/write. String. Specifies the HTTP content type for the response, as a standard MIME-type (such as “text/xml” or image/gif”). If omitted, the MIME-type “text/html” is used. The content type tells the browser what type of content to expect. Expires minutes Read/write. Number. Specifies the length of time in minutes that a page is valid for. If the user returns to the same page before it expires, the cached version is displayed. After that period, it expires, and will not be held in a private (user) or public (proxy) cache. ExpiresAbsolute #date[time]# Read/write. Date/Time. Specifies the absolute date and time when a page will expire and no longer be valid. If the user returns to the same page before it expires, the cached version displayed. After that time, it expires, and should not be held in a private (user) or public (proxy) cache. 2004 Tau Yenny, SI - Binus 13 The ASP Response Object Property Description IsClientConnected Read-only. Boolean. Return an indication of whether the client is still connected to and loading the page from the server. Can be used to end processing (with the Response.End method) if a client moves to another page before the current one has finished executing. PICS (“PICS-label-string”) Write only. String. Creates a PICS headers define the content of the page in terms of violence, sex, bad language, etc. Status = ”code message” Read/Write. String. Specifies the status value and message that will be sent to the client in the HTTP headers of the response to indicate an error or successful processing of the page. Example are “200 OK” and “404 Not Found”. 2004 Tau Yenny, SI - Binus 14 The ASP Response Object The Response Object’s Methods Method Description AddHeader (“name”, “content”) Creates a custom HTTP header using the name and content values and adds it to the response. Will not replace an existing header of the same name. Once a header has been added, it cannot be removed. Must be used before any page content (i.e. text and HTML) is sent to the client. AppendToLog (“string”) Adds a string to the end of the Web server log entry for this request when W3C Extended Log File Format is in use. Requires at least the URI Stem value to be selected in the Extended Properties page for the site containing the page. BinaryWrite (SafeArray) Writes the content of a Variant-type SafeArray to the current HTTP output stream without any character conversion. Useful for writing non-string information, such as binary data required by a custom application or the bytes to make up an image file. Clear ( ) Erases any existing buffered page content from the IIS response buffer when Response.Buffer is True. Does not erase HTTP response headers. Can be used to abort a partly completed page. 2004 Tau Yenny, SI - Binus 15 The ASP Response Object Method Description End ( ) Stops ASP from processing the page script and returns the currently created content, then aborts any further processing of this page. Flush ( ) Sends all currently buffered page content in the IIS buffer to the client when Response.Buffer is True. Can be used to send parts of a long page to the client individually. Redirect (“url”) Instructs the browser to load the page in the string url parameter by sending a “302 Object Moved” HTTP header in the response. Write (“string”) Writes the specified string to the current HTTP response stream and IIS buffer, so that it becomes part of the returned page. 2004 Tau Yenny, SI - Binus 16 Working with Form and QueryString Collection ASP collection are an array of values, can be accessed using a text string key (not case sensitive) or an integer index. For example, in default.html : 1. 2. 3. 4. 5. 6. 7. 8. <HTML> <BODY> <FORM action = "show_request.asp" METHOD ="POST"> FirstName : <INPUT TYPE = "TEXT" NAME = "FirstName"> LastName : <INPUT TYPE = "TEXT" NAME ="LastName"> <INPUT TYPE = "SUBMIT" VALUE = "Send"> </FORM> </BODY> 9. </HTML> 2004 Tau Yenny, SI - Binus 17 Working with Form and QueryString Collection We can access the values by accessing the ASP Form Collection We can also use the integer index of the control on the form. The range of indexes starts at 1 for the 1st control defined in the HTML. This technique is not recommended. show_request.asp 1. 2. 3. 4. 5. 6. 7. <HTML> <BODY> <% strFirstName = Request.Form ("FirstName") strLastName = Request.Form ("LastName") Response.Write "Using text string key: <BR>" Response.Write strFirstName & "<BR> " & strLastName & "<BR>" 8. strFirstName2 = Request.Form(1) 9. strLastName2 = Request.Form(2) 10. Response.Write "<BR> Using index : <BR>" 11. Response.Write strFirstName2 & "<BR> " & strLastName2 12. %> 13. </BODY> 14. </HTML> 2004 Tau Yenny, SI - Binus 18 Working with Form and QueryString Collection 2004 Tau Yenny, SI - Binus 19 Working with Form and QueryString Collection It’s also possible to collect the entire set of values from the form into a single string variable by just referencing the collection, and without providing a key or index. strAllFormContent = Request.Form If our text boxes contain the values Yos and Stefan Hideki, the Request.Form statement will return the string: FirstName=Yos&LastName=Stefan+Hideki The values are provided in name/value pairs. Each name/value pair is separated from the others with an ampersand (&) character. 1. 2. 3. 4. 5. 6. 7. 8. <HTML> <Body> <% strAllFormContent = Request.Form Response.Write strAllFormContent %> </body> </HTML> 2004 Tau Yenny, SI - Binus 20 Working with Form and QueryString Collection 2004 Tau Yenny, SI - Binus 21 Iterating Through an ASP Collection There are 2 ways to iterate through all the members of an ASP collection. We can using an For and integer index For intLoop = 1 to Request.Form.Count Response.Write Request.Form(intLoop) & “ <BR>” Next A better method is use the For Each.. Next construct For Each objItem In Request.Form Response.Write objItem & “ = “ & Request.Form(objItem) & “<BR>” Next 2004 Tau Yenny, SI - Binus 22 Iterating Through an ASP Collection show_request.asp 1. 2. 3. 4. 5. 6. 7. <HTML> <BODY> <% Response.Write "Using counter : <BR>" For intLoop = 1 to Request.Form.Count Response.Write Request.Form(intLoop) & " <BR>" Next 8. Response.Write "<BR>Using For Each :<BR>" 9. For Each objItem In Request.Form 10. Response.Write objItem & " = " & Request.Form(objItem) & "<BR>" 11. Next 12. %> 13. </BODY> 14. </HTML> 2004 Tau Yenny, SI - Binus 23 Iterating Through an ASP Collection 2004 Tau Yenny, SI - Binus 24 Multiple Value Collection Members 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 1. 2. 3. 4. 5. 6. 7. In some cases, an individual member of an ASP collection may be made up of more than one value. This occurs when several controls have the same NAME attribute defined in the HTML, for example: default.html <HTML> <BODY> <FORM ACTION = “show_request.asp” METHOD = “POST”> <INPUT TYPE=“TEXT” NAME=“OtherHobby”> <INPUT TYPE=“TEXT” NAME=“OtherHobby”> <INPUT TYPE=“TEXT” NAME=“OtherHobby”> <INPUT TYPE=“SUBMIT” VALUE=“Send”> </FORM> </BODY> </HTML> show_request.asp <HTML> <BODY> <% Response.Write Request.Form("OtherHobby") %> </BODY> </HTML> 2004 Tau Yenny, SI - Binus 25 Multiple Value Collection Members 2004 Tau Yenny, SI - Binus 26 Multiple Value Collection Members To be access individual values, we can use the rather convoluted code : 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. <HTML> <BODY> <% For Each objItem In Request.Form If Request.Form(objItem).Count > 1 Then 'If More than 1 value Response.Write objItem & " : <BR>" For intLoop = 1 to Request.Form(objItem).Count Response.Write "Subkey " & intLoop & " value = " _ & Request.Form(objItem)(intLoop) & "<BR>" Next Else Response.Write objItem & " = " & Request.Form(objItem) & "<BR>" End If Next %> </BODY> </HTML> 2004 Tau Yenny, SI - Binus 27 Multiple Value Collection Members 2004 Tau Yenny, SI - Binus 28 Multiple Value Collection Members 1. 2. 3. 4. 5. 6. 7. 8. 9. <HTML> <BODY> <FORM ACTION = "show_request.asp" METHOD = "POST"> <INPUT TYPE="SUBMIT" NAME = "btnSubmit" VALUE="Next"> <INPUT TYPE="SUBMIT" NAME = "btnSubmit" VALUE="Previous"> <INPUT TYPE="SUBMIT" NAME = "btnSubmit" VALUE="Cancel"> </FORM> </BODY> </HTML> 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. <HTML> <BODY> <% Select Case Request.Form("btnSubmit") Case "Next" Response.Redirect "page_3.html" Case "Previous" Response.Redirect "page_1.html" Case "Cancel" Response.Redirect "default.html" End Select %> </BODY> </HTML> 2004 Tau Yenny, SI - Binus 29 Multiple Value Collection Members 2004 Tau Yenny, SI - Binus 30 The Difference Between Forms and QueryString Append 1 or more name/value pair to the URL of the page we’re requesting, they become the query string for the request, and are exposed to our ASP page in the QueryString collection. Therefore, the only way to send values to ASP from any of these actions is through the QueryString collection, by appending them to the URL The URL/query String combination cannot contain any spaces or other illegal characters. Illegal characters are those that are used to delimit parts of the URL and query string, for example ‘/’, ‘:’, ‘?’, and ‘&’. Spaces must be convert to ‘+’ format. ASP Server object provides URLEncode method for handling this conversion. The values appear in the Request.QueryString, and are accessed, in the same way as the FORM collection examples. The URL and query string combination : http://localhost/ok/show_request.asp?FirstName=Yos&LastName=Stefan+Hideki 2004 Tau Yenny, SI - Binus 31 QueryString 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. <HTML> <BODY> <% strFirstName = Request.QueryString ("FirstName") strLastName = Request.QueryString ("LastName") strAll = Request.QueryString Response.Write "Using query string: <BR>" Response.Write strFirstName & "<BR> " & strLastName & "<BR>" Response.Write strAll %> </BODY> </HTML> URL and query string 2004 Tau Yenny, SI - Binus 32 The GET and POST Methods of a FORM There are 2 common method for requesting a page or resource from a Web server over HTTP. GET To get the resource directly. Get is the default method. POST To post values to a resource. 2004 Tau Yenny, SI - Binus 33 The GET and POST Methods of a FORM Use “GET” or omit the attribute, the browser bundles up the values in all the controls on the form into a query string, and appends it to the URL of the page being requested. The request is exposed through the ASP Request.QueryString collection. Use “POST”, the browser wraps the values up within the HTTP headers it sends to the server, and they are exposed to ASP via the Request.Form collection. 2004 Tau Yenny, SI - Binus 34 ServerVariables Collection Contains a combination of values that represent the HTTP headers sent from the client Self-Referencing Pages Detail of our Web server and path information of the current page. <FORM ACTION=" <% = Request.ServerVariables("PATH_INFO") %>" METHOD="POST"> The same effect is obtained with the HTTP “SCRIPT_NAME” value : <FORM ACTION=" <% = Request.ServerVariables("SCRIPT_NAME") %>" METHOD="POST"> 2004 Tau Yenny, SI - Binus 35 Self-Referencing Pages 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. <HTML> <BODY> <FORM ACTION=" <% = Request.ServerVariables("SCRIPT_NAME") %>" METHOD="POST"> </FORM> <% strFullPath = Request.ServerVariables ("PATH_INFO") strPathOnly = Left(strFullPath, InStrRev(strFullPath, "/")) strNextPage = strPathOnly & "page_3.html" Response.Write "Full Path : " & strFullPath & "<BR> " Response.Write "Path Only : " & strPathOnly & "<BR> " Response.Write "Next Page : " & strNextPage & "<BR><BR> " %> <A HREF = " <% = strNextPage %> "> Next Page </A> </BODY> </HTML> 2004 Tau Yenny, SI - Binus 36 Self-Referencing Pages 2004 Tau Yenny, SI - Binus 37 ServerVariables Collection Detecting the Browser Version Another useful value is the user agent string for our visitor’s browser. In the Detecting Browser Type page (browsertype.asp), we are using the “HTTP_USER_AGENT” value from the ServerVariables collection to retrieve the user agent string, and some script to parse this and look for a manufacturer name and browser version. 2004 Tau Yenny, SI - Binus 38 Detecting the Browser Version 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. <HTML> <BODY> <H1>Detecting the Browser Type</H1> <HR width=100%> <BR> <% strUA = Request.ServerVariables("HTTP_USER_AGENT") Response.Write "The User Agent string is <B>" & strUA & " </B><P>" If InStr(StrUA, "MSIE") Then Response.Write "To upgrade your browser go to " _ & "<A HREF=" & chr(34) & "http://www.microsoft.com/ie/" _ & chr(34) & ">http://www.microsoft.com/ie/</A></P>" intVersion = CInt(Mid(strUA, InStr(StrUA,"MSIE") + 5, 1)) If intVersion >=4 then Response.Write "You can use Microsoft Dynamic HTML" End If 14. 15. 16. 17. 18. 19. 20. End If %> </BODY> </HTML> 2004 Tau Yenny, SI - Binus 39 Detecting the Browser Version 2004 Tau Yenny, SI - Binus 40 ServerVariables Collection Detecting the Browser Language “HTTP_ACCEPT_LANGUAGE” contains a language code, which was selected when the browser was installed or is hard-coded into the user’s locale-specific version. Example of language code are en-us (English, United States), de-at (German, Austrian) and es-pe (Spanish, Peru). A language code can also be generic and omit the dialect identifier. We can detect the language code and load an appropriate localespecific, language-specific or geographically-specific version of our pages automatically. 2004 Tau Yenny, SI - Binus 1. 2. 3. 4. 5. 6. 7. 8. <HTML> <BODY> <H1>Detecting the Browser Language</H1> <HR width=100%> <BR> <% strLocale = LCase(Request.ServerVariables("HTTP_ACCEPT_LANGUAGE")) Response.Write "The Browser Language code is <B>" & strLocale & " - " 9. 10. 11. 12. 13. 14. 15. Select Case strLocale Case "en-gb" : Response.Write "English, United Kingdom" Case "en-us" : Response.Write "English, United States" Case "es-pe" : Response.Write "Spanish, Peru" Case "id" : Response.Write "Indonesian" case Else : Response.Write "Another Language" End Select 16. 17. 18. 19. Response.Write "</B>" %> </BODY> </HTML> 2004 Tau Yenny, SI - Binus 41 42 ServerVariables Collection Other Useful ServerVariables Values Check if the visitor accessed our site through the default port 80 or a different one. We can query the user name if we force our users to log on and be authenticated by our server. “AUTH_USER” Return the authenticated user string. “SERVER_NAME” Return the server name string. 2004 Tau Yenny, SI - Binus 43 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. <HTML> <BODY> <H1>Detecting the Browser</H1> <HR width=100%> <BR> <% Response.Write "PORT : " & Request.ServerVariables("SERVER_PORT") & "<BR>" If Request.ServerVariables("SERVER_PORT") = "80" Then Response.Write "Default PORT" Else Response.Write "Another PORT" End If %> </BODY> </HTML> 2004 Tau Yenny, SI - Binus