[ Previous ] [ Contents ] [ Index ] [ Next ]

Example 4: redirect

The following example script shows how to use an AOLserver simple response command (in this case, ns_returnredirect) and the equivalent code when sending raw data to the client.

This example can be found in the examples/tcl/redirect.tcl file.

    
    # Example 4: Implementing redirects with ns_respond and
    # ns_write
    #
    # /example/not_here uses ns_respond to return an HTTP
    #   redirect to /example/finaldest.
    # /example/not_here2 does the same thing using ns_write
    # /example/not_here3 does the same thing with
    #   ns_returnredirect
    #
    # Things to notice:
    #
    # * When you use ns_write, you need to compose the
    #   entire response.
    #
    # * "ns_conn location" returns the http://hostname
    #   part of the URL that you can use to generate
    #   fully qualified URLs.
    #
    # * ns_returnredirect is a lot simpler than either
    #   ns_respond or ns_write.
    
    ns_register_proc GET /example/finaldest finaldest
    ns_register_proc GET /example/not_here not_here
    ns_register_proc GET /example/not_here2 not_here2
    ns_register_proc GET /example/not_here3 not_here3
    
    proc not_here {conn ignore} {
      set headers [ns_set new myheaders]
      ns_set put $headers Location \
    	  [ns_conn location $conn]/example/finaldest
      ns_respond $conn -status 302 -type text/plain \
    	  -string "Redirection" -headers $headers
    }
    
    proc not_here2 {conn context} {
      set content \
    "<HTML><HEAD><TITLE>Redirection</TITLE></HEAD><BODY>
    <H1>Redirection</H1>The actual location of what 
    you were looking for is
    <A HREF=\"[ns_conn location $conn]/example/finaldest\">
    here.</A>
    </BODY></HTML>"
    
      ns_write $conn \
    "HTTP/1.0 302 Document follows
    MIME-Version: 1.0
    Content-Type: text/html
    Content-Length: [string length $content]
    Location: [ns_conn location $conn]/example/finaldest
    
    $content"
    }
    
    proc finaldest {conn context} {
      ns_return $conn 200 text/plain \
    	  "You have arrived at the final destination."
    }
    
    proc not_here3 {conn context} {
      ns_returnredirect $conn \
    	  [ns_conn location $conn]/example/finaldest
    }
    
    

Top of Page

[ Previous ] [ Contents ] [ Index ] [ Next ]
Copyright © 1998-99 America Online, Inc.