ASP
  Home arrow ASP arrow Page 2 - How to Create ASP Applications Without Wri...
Dev Articles Forums 
ADO.NET  
Apache  
ASP  
ASP.NET  
C#  
C++  
ColdFusion  
COM/COM+  
Delphi-Kylix  
Design Usability  
Development Cycles  
DHTML  
Embedded Tools  
Flash  
Graphic Design  
HTML  
IIS  
Interviews  
Java  
JavaScript  
MySQL  
Oracle  
Photoshop  
PHP  
Reviews  
Ruby-on-Rails  
SQL  
SQL Server  
Style Sheets  
VB.Net  
Visual Basic  
Web Authoring  
Web Services  
Web Standards  
XML  
Dedicated Servers  
Moblin 
JMSL Numerical Library 
IBM® developerWorks 
Sun Developer Network 
Weekly Newsletter
 
Developer Updates  
Free Website Content 
 RSS  Articles
 RSS  Forums
 RSS  All Feeds
Write For Us Get Paid 
Request Media Kit
Contact Us 
Site Map 
Privacy Policy 
Support 
 USERNAME
 
 PASSWORD
 
 
  >>> SIGN UP!  
  Lost Password? 
ASP

How to Create ASP Applications Without Writing ASP Code
By: Robert Gelb
  • Search For More Articles!
  • Disclaimer
  • Author Terms
  • Rating: 4 stars4 stars4 stars4 stars4 stars / 11
    2003-02-23

    Table of Contents:
  • How to Create ASP Applications Without Writing ASP Code
  • How it Works
  • Troubleshooting
  • Conclusion

  • Rate this Article: Poor Best 
      ADD THIS ARTICLE TO:
      Del.ici.ous Digg
      Blink Simpy
      Google Spurl
      Y! MyWeb Furl
    Email Me Similar Content When Posted
    Add Developer Shed Article Feed To Your Site
    Email Article To Friend
    Print Version Of Article
    PDF Version Of Article
     
     
    ADVERTISEMENT


    How to Create ASP Applications Without Writing ASP Code - How it Works


    (Page 2 of 4 )

    So, how does this work? Let us start with basic facts. You will need one VB project. You will need a separate class for each page. That sounds like a lot of work especially if you have a large site. However, these classes are fairly small with no properties, one method and only several functions. Moreover, the classes are similar to each other, so there is going to be a lot of cut & paste. You will also need one ASP file. As this is where the users first touch your web site, it is here where we start to code. Create a file called exec.asp and add lines below to it.

    <%@ Language=VBScript %>
    <%
    dim oInstance, sClass, sProject

    sClass = Request.QueryString("cls")
    sProject = Request.QueryString("prj")

    set oInstance = Server.CreateObject(sProject & "." & sClass)
    oInstance.ProcessRequest
    set oInstance = nothing
    %>


    From here on out, that is all ASP you will ever have to write. Say goodbye to it, spit on it, cuss at it and generally get all the anger out of your system before proceeding.

    Let's analyse what this ASP script is doing. It expects two items in the QueryString collection: cls and prj. Then it puts them together to form a class string and attempts to create an object. So for instance, if you type in on the browser line:

    http://www.mysite.com/exec.asp?prj=MyProject&cls=View

    ...the ASP file assumes that you have a COM DLL with a class string called MyProject.View.

    Futher down, notice the line oInstance.ProcessRequest. The ASP file assumes that the created object has a Public method called ProcessRequest. So obviously all the processing will go on in ProcessRequest method.

    So far, so good - we need to create a class for each page and there should be a standard Public method called ProcessRequest...easy enough.

    You maybe wondering at this point - how exactly am I going to get access to the ASP intrinsic objects? Well, because our COM object is being created with Server.CreateObject instead of CreateObject, the intrinsic objects will be available (with a little bit of code) in their full glory.

    Now create a new ActiveX DLL project. Call the project "MyProject". Call the class "View".

    Add the following to the class (you will have to add this to every single class that will be created the ASP script).

    Option Explicit
    Private mobjContext As ASPTypeLibrary.ScriptingContext
    Private Const conHTMLTokenPrefix = "{|"
    Private Const conHTMLTokenSuffix = "|}"
    Public Sub OnStartPage(objContext As ASPTypeLibrary.ScriptingContext)
      Set mobjContext = objContext
    End Sub
    Public Sub OnEndPage()
      Set mobjContext = Nothing
    End Sub
    Public Sub ProcessRequest()
      On Error GoTo errProcessRequest

      'Your code goes here
      '...

      exitPoint:
      'generic exit point
      Exit Sub
    errProcessRequest:
      'write out the error to the browser
      Call mobjContext.Response.Write(Err.Description)
      GoTo exitPoint
    End Sub


    Let's analyze this piece of code. The way ASP's Server.CreateObject works is that it looks for OnStartPage and OnEndPage methods to pass in the ASP context object (intrinsic objects, in other words). Once ASP passes in the object context intrinsic objects (Request, Response, Server, Application, Session) are available under the mobjContext super object. For instance, to write out a line of code you would use the following in the ProcessRequest sub.

    mobjContext.Response.Write "My Test Line"

    Pretty cool, huh? Keep in mind, you can place breakpoints in your ActiveX DLL and use the full power of the Visual Basic debugger.

    Now you are probably thinking, the great thing about ASP was that I could create HTML page in my favorite editor and then intersperse VBScript code into it. Do I have to write HTML out one line at a time using this approach? Absolutely not - it would defeat the whole purpose of Rapid Application Development. In fact, our approach is relatively easy to implement.

    We can achieve this ease by use of HTML templates. Let me explain. Let's say we have a page that has to be populated by the list of employees. So our final HTML page would look like this:

    <html>
     <body>
      <font size=5><b>Employee List</b></font>
      <br>
        <select size="5">
          <option>John</option>
          <option>Mary</option>
          <option>Sam</option>
          <option>Claudia</option>
        </select>
      </body>
    </html>
    Employee List


    Obviously, we can't just send out a hard-wired list, as our employee list may change. So we then create a template. We replace the hardwired names with a tag, our engine will understand.

    <html>
    <body>
    <h1>Employee List</h1>
    <select>
      {|EMPLOYEE LIST|}
    </select>
    </body>
    </html>


    So in our code, we will get the list of employees from the database, read in this template, replace the EMPLOYEE LIST tag with our real employee list and send the text out using mobjContext.Response.Write method. Easy enough? But wait, there is more. You can wrap the whole process of reading templates and replacing tags into a reusable class (one is provided with the download).

    So here is how the final draft of the ProcessRequest method will look like:

    Public Sub ProcessRequest()
      Dim objTemplate As clsTemplateManager
      Dim strReturn As String

      '******************************************
      'normally this code should be encapsulated
      'in another object or module
      Dim oConn As New ADODB.Connection
      Dim oRs As New ADODB.RecordSet
      Dim sList As String

      'open a connection to an Access database
      oConn.Open Provider="Microsoft.Jet.OLEDB.3.51;;Data Source=" & _
        App.Path & "\Sample.mdb"
      'populate the recordset with the names
      oRs.Open "select * from tblNames", oConn

      'build an HTML list
      Do While Not oRs.EOF
         sList = sList & "<option value=" & oRs!ID & ">" & _
         oRs!Name & "</option>"

         oRs.MoveNext
       Loop
      Set oRs = Nothing
      Set oConn = Nothing
      '******************************************

      'Template Manager
      Set objTemplate = New clsTemplateManager
      With objTemplate
        'Add values and Tokens
        .TokenAdd sList, "EMPLOYEE LIST"

        'Set Template Name and Tokens
        .TemplatePath = App.Path & "\Templates" & "\SeeName.htm"
        .TokenPrefix = gconHTMLTokenPrefix
        .TokenSuffix = gconHTMLTokenSuffix

        'Combine tokens and template and return HTML page
        strReturn = .WriteResponse
      End With

      ' Write out the page
      Call mobjContext.Response.Write(strReturn)

      exitPoint:
      'generic exit point
      Exit Sub
    errProcessRequest:
      'write out the error to the browser
      Call mobjContext.Response.Write(Err.Description)
      GoTo exitPoint
    End Sub


    Here is a quick explanation on how to get this setup working on your computer.
    1. Make sure you have IIS or PWS installed and working.
    2. Then under c:\inetpub\wwwroot folder create a new directory called Sample. Unzip the downloaded project into this directory. Double-click on the MyProject.vbp file and click Run.
    3. Open your favorite browser and go to http://localhost/Sample
    4. That's all there is to it. Now you can place breakpoints in your VB code, learn how the code works and debug at will. The templates are location in the \Sample\Templates folder.
    5. What does the downloaded program do? Included with the download there is a simple access database With a single table. This table contains a list of employees. This application lets you manipulate the names of employees.

    More ASP Articles
    More By Robert Gelb


     

    ASP ARTICLES

    - Central Scoreboard with Flash and ASP
    - Calorie Counter Using WAP and ASP
    - Creating PGP-Encrypted E-Mails Using ASP
    - Be My Guest in ASP
    - Session Replacement in ASP
    - Securing ASP Data Access Credentials Using t...
    - The Not So Ordinary Address Book
    - Adding and Displaying Data Easily via ASP an...
    - Sending Email From a Form in ASP
    - Adding Member Services in ASP
    - Removing Unconfirmed Members
    - Trapping HTTP 500.100 - Internal Server Error
    - So Many Rows, So Little Time! - Case Study
    - XDO: An XML Engine Class for Classic ASP
    - Credit Card Fraud Prevention Using ASP and C...







    © 2003-2008 by Developer Shed. All rights reserved. DS Cluster 2 hosted by Hostway