FrontPage 新規 編集 検索 一覧 ヘルプ

ASP

ASPメモの目次

ASP(Active Server Pages)とは

Microsoft IIS/PWS上で動作するサーバサイドスクリプト技術です。ASPでは、サーバがHTML内に埋め込んだ特殊タグを実行する機能を有しています。CGIに比べてアクセスするたびにプロセスが増えることはなく非常に軽く動作します。IIS/PWSを利用するなら使わない手はない技術です。また、主に利用される言語は、VBScript、JScriptですが、PerlScriptやCOBOLScriptなど色々な言語で動作します。

このページでは、VBScriptでの使い方、メモを記述します。

デフォルトの使用言語

VBScriptをデフォルトの使用言語にする場合、先頭に以下のように記述します。

 <% @LANGUAGE="VBSCRIPT" %>

※IISでは、サービスマネージャを使って指定することができます。

ASPの書き方

サーバ側で実行するスクリプトは、scriptタグのrunat属性をServerにするか、<% ... %>で囲みます。

 <SCRIPT language="VBScript" runat="Server">
 ...
 </SCRIPT>
 <% ... %>

また、変数、式の値をブラウザに返すには、<%= 変数名 %> とイコール付きで指定するのが簡単です。

 <% @LANGUAGE="VBSCRIPT" %>
 <% Option Explicit %>
 <html>
 <body>
 <% Dim strHead
 strHead = "はろ〜ん" %>
 <h1><%= strHead %></h1>
 </body>
 </html>

環境変数の表示

環境変数を表示するASPのサンプルです。Perlで同様に表示するものがPWSのページにあります。

 <% @LANGUAGE="VBSCRIPT" %>
 <% Option Explicit %>
 <HTML>
 <HEAD>
 <TITLE>環境変数一覧</TITLE>
 <STYLE>
 body { text-align: center; }
 table, th, td { border: 1px double navy; }
 th { background-color: teal; color: white; }
 td {font-weight: bold; color: gray; }
 h1 { color: navy; }
 </STYLE>
 </HEAD>
 <BODY>
 <H1>環境変数一覧</H1>
 <TABLE>
 <%
 Dim strKey
 For Each strKey in Request.ServerVariables 
     Response.Write "<TR><TH>" & strKey & "</TH><TD>" & _
             Request.ServerVariables(strKey) & "&nbsp;</TD></TR>"
 Next
 %>
 </TABLE>
 </BODY>
 </HTML>

MsgBoxを使いたい

ASPのサーバサイドスクリプトではMsgBoxは使うことができません。デバグなどで使いたい場合は、WScript.ShellオブジェクトのPopup を利用するとよいでしょう。サーバ上で実行されるので使い方には十分注意してください。

 <%  @LANGUAGE="VBSCRIPT" %>
 <%  Option Explicit %>
 <!--#include File="adovbs.inc"-->
 <html>
 <head>
 <title>ASPでのポップアップ表示サンプル</title>
 </head>
 <body>
 <%
 Dim objRec
 Set objRec = Server.CreateObject("ADODB.Recordset")
 objRec.CursorLocation = adUseClient
 objRec.Open "運送会社", "File Name=" & Server.MapPath("nw.udl")
 Set objRec.ActiveConnection = Nothing
 
 Print objRec.GetString
 
 objRec.Close
 Set objRec = Nothing
 
 Function Print(str)
     Dim objWS
     Set objWS = Server.CreateObject("WScript.Shell")
     objWS.Popup str
 End Function
 %>
 </body>
 </html>

タイプライブラリ

METADATAタグでTypelibの宣言を行います。書式は以下。

 <!--METADATA TYPE="TypeLib"
     FILE="タイプライブラリファイルの絶対パス"
     UUID="タイプ ライブラリの汎用一意識別子"
     VERSION="メジャーバージョン番号.マイナーバージョン番号"
     LCID="ロケール識別子"
 -->

参考:TypeLibrary宣言

FILEかUUIDのどちらか一方は必ず記述します。タイプライブラリは共通で利用するものなので通常global.asaで宣言しますが、.asp内で個別に宣言しても利用できます。

ライブラリID

 <!-- METADATA TYPE="TypeLib" UUID="00000205-0000-0010-8000-00AA006D2EA4"-->

か、ファイル名

 <!-- METADATA TYPE="TypeLib" FILE="C:\Program Files\Common Files\System\ado\msado15.dll"-->

や、

 <!-- METADATA TYPE="TypeLib" FILE="C:\Program Files\Common Files\System\ado\msado25.tlb"-->

のように記述します。上記はすべてADO2.5のタイプライブラリを宣言しています。

この他にASP内に定数ファイルをSSIでインクルードしてもOKです。

 <!--#include file="adovbs.inc"-->

この場合、カレントに adovbs.inc をコピーしてください。

ImageMagickを利用した画像変換

掲示板に質問があったので、ちょっとサンプルを作ってみました。このサンプルは結構実用的です。指定ディレクトリ以下のファイルを読み込み、サムネイルを作成します。そして作成したサムネイルを表示し元画像へリンクをはります。

 <%  @LANGUAGE="VBSCRIPT" %>
 <%
 Option Explicit
 
 Const ALBUM_DIR     = "photo"
 Const ALBUM_THUMB   = "thumb"
 Const SCALE         = "10%"
 
 Dim objImg
 Set objImg = Server.CreateObject("ImageMagickObject.MagickImage.1")
 
 Dim objFS, objFolder
 Set objFS = Server.CreateObject("Scripting.FileSystemObject")
 Set objFolder = objFS.GetFolder(Server.MapPath(ALBUM_DIR))
 MakeThumb objFolder
 
 Set objImg = Nothing
 
 Sub MakeThumb(objFolder)
     Dim objFile, objSubFolder
 
     For Each objFile In objFolder.Files
         objImg.Convert "-resize", SCALE, objFile.Path, _
                 objFS.BuildPath(Server.MapPath(ALBUM_THUMB), objFile.Name)
     Next
     For Each objSubFolder In objFolder.SubFolders
         MakeThumb objSubFolder
     Next
 End Sub
 
 %>
 <HTML>
 <HEAD>
 <TITLE>サンプルアルバム</TITLE>
 </HEAD>
 <BODY>
 <H1>アルバム</H1>
 <%
 Dim objFile
 For Each objFile In objFolder.Files
     Response.Write "<A href =" & ALBUM_DIR & "/" & objFile.Name & ">"
     Response.Write "<IMG src=" & ALBUM_THUMB & "/" & objFile.Name & " border=0>"
     Response.Write "</A>" & vbCrLf
 Next
 Set objFile   = Nothing
 Set objFolder = Nothing
 Set objFS     = Nothing
 %>
 </BODY>
 </HTML>

処理を中断する

VBSでは、WScript.Quit で処理を中断することができますが、ASPでは?ASPで処理を中断するには、

 Response.End

と書きます。このメソッドは、スクリプトの処理を止めてバッファの内容を即送信します。これ以降のプログラムは処理されません。

1行置きに色を変えるアルゴリズム

よくテーブルの背景色なんかで使われますよね。実際処理は簡単で、If 文を使えば誰でも書けると思います。

For で I をインクリメントしつつ、

 If I Mod 2 = 1 Then
    ' Color1を使う処理
 Else
    ' Color2を使う処理
 End If

とか。I Mod 2(剰余) は Iが偶数の時に0、奇数の時に1になるので、0,1,0,1,0,1,0・・・と変化しうまくいきます。

今回紹介するこのテクニックは、If文を使わない方法です。:-)

 N = 1 - N

という式を使います。この式を使うと、Nの値は0の時1となり1の時に0になります。ループで使うと、0,1,0,1,0,1・・・ ということになります。:-)

 <%
 Option Explicit
 ' color.asp - 1行ずつ背景色を変える
 
 Dim Datas, Color, Data, N
 Datas  = Array("Hoge", "Fuga", "Bar", "Puni", "Pen", "Mona", "Foo")
 Color = Array("#CCCCFF", "#EEEEFF")
 
 ' ここからテーブル作成
 Response.Write "<TABLE>"
 For Each Data In Datas
     N = 1 - N
     Response.Write "<TR><TD bgcolor=""" & Color(N) & """>" & Data & "</TD></TR>"
 Next
 Response.Write "</TABLE>"
 %>

配列を使うとこのようにスッキリかけます。:-)

N = X - N とかすれば、X,0,X,0,X ・・・ となり色々応用がききます。工夫してNの値をそのままカラー値として使用することもできますが、カラー値に関して言えば、解り辛くなるので止めた方がいいでしょう。

※実は私の一番大好きなアルゴリズムなのでした。:-)

Yesterday Today Total