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) & " </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="ロケール識別子"
-->
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の値をそのままカラー値として使用することもできますが、カラー値に関して言えば、解り辛くなるので止めた方がいいでしょう。
※実は私の一番大好きなアルゴリズムなのでした。:-)
{{edit 更新履歴}}