【 定義系三種の神器 】

1. スクリプトのデリミタ
2. インクルード
3. global.asa

<% と %>
  • ASP はなにも指定しなければ、HTMLのみを記述する静的ページとなります

  • <% はスクリプトの始まりを示し、%> はスクリプトの終わりを示します

  • 通常、「HTML に スクリプトが埋め込まれた」と表現されますが、プログラマ
    は、スクリプト以外は Response.Write されている と考えるべきです


  • 使用パターンは、目的別に考えるといくつかあります
  • 1) ノーマル
  • <%
    	スクリプト記述
    %>
    <HTML>
    <BODY>
    </BODY>
    </HTML>
    
  • 2) つぎはぎ
  • <% if a = b then %>
    	HTML タグ
    <% else %>
    	HTML タグ
    <% end if %>
    
  • 3) 埋め込み
  • <INPUT type=text name=Field value="<%= Request.Form("Field") %>">
    
  • 4) All Script
  • <%
    function MyFunction
    	関数処理記述
    end function
    %>
    
  • 5) コメント
  • <% '********************* クライアントに表示されないコメント %>
    <INPUT type=submit name=send value="送信">
     
    

    外部ファイルの取り込み
  • C の#include に近い機能です。コードが評価される前に外部ファイルの取り
    込みが行なわれます。プリプロセスのようなものになります

  • 上記理由により、インクルードされるファイル名は動的に変更できません。ま
    た、HTML 内に記述する必要があります。これは、.asp 以外の拡張子を持
    つ stm、.shtm、および .shtml といった SSI を目的としたファイルに記述す
    る為です

  • インクルードされるファイルの拡張子は特に決まっていませんが、.inc が推
    奨されています

  • インクルードされるファイルの中にさらにインクルードの記述を行なうネスト
    は可能ですが、無限ループを起こすようなネストにはエラーで対処されます


  • 指定方法1 ( 相対パス )
  • <!-- #include file ="headers\header1.inc" -->
    
  • 指定方法2 ( 仮想ディレクトリからの完全な仮想パス )
  • <!-- #include virtual ="/myapp/footer.inc" -->
    
  • インターネット インフォメーション サービス スナップインで [親のパスを有効にする] オプションをオンに
    している場合は、キーワード file を構文 (..\) と共に使用して、親ディレクトリ (1 つ上のディレクトリ)
    のファイルをインクルードすることもできます

  • 何れも、/ と \ を使用できます。後述の SCRIPT タグの src 属性での使用も同じです
  • 動的な結果変更
  • 指定するファイル名は変更できませんが、処理結果を変更する事は可能です


  • <%
    	if True then
    		%><!-- #include file ="typea.inc" --><%
    	else
    		%><!-- #include file ="typeb.inc" --><%
    	end if
    %>
    
  • 処理結果とは、あくまで HTTP 出力の結果であって インクルードされないという事ではありません

  • 使用方法として言うならば、スクリプト内で HTML を埋め込む 処理です


  • スクリプトのみをインクルードする
     
    <SCRIPT language="VBScript" runat=SERVER src="func.vbs"></SCRIPT>
    


  • この方法では、サーバとクライアントでスクリプト処理を共有する事ができます。その場面は限定されています
    が、標準化の一部として利用する価値はあります


  • IIS の定義毎にひとつ
  • アプリケーションという単位で一つ持つ事ができますが、省略する事ができます

  • 考え方としては、アプリケーションの初期化ファイルといった位置づけで良いと
    思います

  • プログラマがこの中身を書く事は稀ですが、何が書かれているかをアプリケーシ
    ョンの仕様を知る目的で知る義務はあります


  • 仕様
  • 以下のものが記述できます
  • アプリケーション イベント
  • セッション イベント
  • <OBJECT> 宣言
  • TypeLibrary 宣言



  • 以下はその一例です
  • <OBJECT RUNAT=Server SCOPE=Application ID=OraSession PROGID="OracleInProcServer.XOraSession"></OBJECT>
    <SCRIPT LANGUAGE=VBScript RUNAT=Server> 
     
    Sub Application_OnStart
     
    	OraSession.CreateDatabasePool 1,40,200,"SV", "SYSTEM/MANAGER", 0
     
    	Application( "HomeUrl" ) = "/"
    	Application( "DefUrl" ) = "/def"
    	Application( "IncUrl" ) = "/inc"
    	Application( "CssUrl" ) = "/css"
    	Application( "CsvUrl" ) = "/csv"
    	Application( "ImageUrl" ) = "/image"
    	Application( "GlobalUrl" ) = "/global"
    	Application( "SessionUrl" ) = "/session"
    	Application( "Domain" ) = "mydomin.com"
    	Application( "DelPath" ) = "D:\session"
     
    End Sub
     
    Sub Session_OnStart
     
    	Dim SessionValue(10)
     
    	SessionValue(0) = ""
    	SessionValue(1) = ""
    	SessionValue(2) = ""
    	SessionValue(3) = ""
    	SessionValue(4) = ""
    	SessionValue(5) = ""
    	SessionValue(6) = ""
    	SessionValue(7) = ""
    	SessionValue(8) = ""
    	SessionValue(9) = ""
    	Session( "Value" ) = SessionValue
     
    	Session( "OutOption" ) = "FALSE"
     
    End Sub
     
    Sub Session_OnEnd
     
    	Dim	FileSystem
     
    	sPath =  Application( "DelPath" ) & "\" & Session.SessionID & "*.*" 
     
    	Set FileSystem	= Server.CreateObject( "Scripting.FileSystemObject" )
    	On Error Resume Next 
    	FileSystem.DeleteFile sPath
    	On Error Goto 0
     
    End Sub
     
    </SCRIPT>
    
  • Oracle OO4O 用のオブジェクトタグは、Oracle に昔から付いているサンプルですが、アプリーケーション
    全体で参照可能なオブジェクトを作成しています

  • Application_OnStart ではアプリケーションの最初の起動時に Oracle への接続プールを作成し、共通の
    アプリケーション変数を設定しています

  • Session_OnStart では、セッション開始時の規定処理を行ない、Session_OnEnd ではセッション終了時の
    共通処理を行なっています。

  • 特に、Session_OnEnd では、セッションID に依存するファイルシステムの一時ファイルを削除しています
  • TypeLibrary 宣言
  • タイプ ライブラリとは、COM コンポーネントでサポートされるオブジェクトと型
    に関する情報のあるファイルです


  • 以下のコードの結果は、TypeLibrary 宣言 に依存します
  • <%
    	Response.Write adUseClient
    %>
    
  • TypeLibrary 宣言 を行なうと 3 と表示されます
  • <!--METADATA TYPE="TypeLib" FILE="c:\Program Files\Common Files\System\ADO\msado25.tlb" -->