프로시저는 특정 작업을 수행하고 값을 반환하는 스크립트 명령 그룹입니다. 사용자가 직접 프로시저를 정의하고 스크립트에서 이들을 반복적으로 호출할 수 있습니다.
프로시저를 호출하는 동일한 .asp 파일에서 프로시저 정의를 입력하거나, 공유 .asp 파일에 공통적으로 사용하는 프로시저를 입력하고 프로시저를 호출하는 다른 .asp 파일에 포함하기 위하여 #include 지시어를 사용할 수 있습니다. 또는 COM 구성 요소에서 그 기능을 캡슐화할 수도 있습니다.
프로시저 정의는 <SCRIPT>와 </SCRIPT> 태그 안에 나타나며 선언한 스크립트 언어의 규칙을 따라야 합니다. 기본 스크립트 언어가 아닌 다른 언어로 프로시저를 작성할 경우에는 <SCRIPT> 요소를 사용합니다. 그러나 기본 스크립트 언어의 프로시저인 경우에는 스크립트 구분 기호(<% 및 %>)를 사용합니다.
HTML <SCRIPT> 태그를 사용하는 경우 스크립트의 서버쪽 처리를 확실히 수행하기 위해 두 가지 속성을 사용해야 합니다. <SCRIPT> 태그를 사용하는 구문은 다음과 같습니다.
<SCRIPT LANGUAGE=JScript RUNAT=SERVER> procedure definition </SCRIPT>
RUNAT=SERVER 속성은 서버에서 스크립트를 처리하도록 웹 서버에 지시합니다. 이 속성을 설정하지 않으면 스크립트는 클라이언트 브라우저에서 처리됩니다. LANGUAGE 속성은 스크립트 블록에 사용된 스크립트 언어를 확인합니다. 서버에 설치한 스크립트 엔진의 대상 언어를 지정할 수 있습니다. VBScript를 지정하려면 VBScript 값을 사용합니다. JScript를 지정하려면 Jscript 값을 사용합니다. LANGUAGE 속성을 설정하지 않으면 스크립트 블록이 기본 스크립트 언어로 해석됩니다.
스크립트 블록에 있는 명령은 선택한 스크립트 언어로 하나 이상의 완전한 프로시저를 형성해야 합니다. 예를 들어, 다음 명령은 JScript 프로시저인 MyFunction을 정의합니다.
<HTML>
<SCRIPT LANGUAGE=JScript RUNAT=SERVER >
function MyFunction()
{
Response.Write("You called MyFunction().")
}
</SCRIPT>
중요 서버쪽 <SCRIPT> 태그 안에 포함하는 스크립트 명령은 완전한 프로시저의 일부여야 합니다. 프로시저의 부분이 아닌 명령은 코드가 다음 순서로 실행되므로 예기치 않은 문제가 발생할 수 있습니다. 기본 언어가 아닌 언어로 된 스크립트 블록은 표시된 순서, 인라인 코드, 기본 언어로 된 스크립트 블록 순으로 실행됩니다. 또한 프로시저 안에서는 ASP 출력 지시어 <%= %>를 사용할 수 없습니다. 대신 Response.Write를 사용하여 내용을 브라우저로 보내십시오.
프로시저를 호출하려면 해당 프로시저 이름을 명령에 포함합니다. VBScript에서 JScript 프로시저를 호출하는 경우에는 프로시저 이름 다음에 괄호를 사용해야 합니다. 프로시저에 인수가 없으면 빈 괄호를 사용합니다. JScript에서 VBScript나 JScript 프로시저를 호출하는 경우에는 항상 프로시저 이름 다음에 괄호를 사용해야 합니다.
또한 VBScript의 경우 프로시저를 호출할 때 Call 키워드를 사용할 수 있습니다. 그러나 호출하는 프로시저에 인수가 필요할 경우에는 괄호 안에 인수 목록을 포함해야 합니다. Call 키워드를 생략할 때는 인수 목록을 묶는 괄호도 생략해야 합니다. Call 구문을 사용하여 기본 제공 함수 또는 사용자 정의 함수를 호출하는 경우 함수의 반환 값은 버려집니다.
다음 예제는 두 개의 다른 스크립트 언어(VBScript와 JScript)를 사용하여 프로시저를 만들고 호출하는 예제입니다.
<%@ LANGUAGE=VBScript %>
<HTML>
<BODY>
<!-- Call the JScript procedure from within VBScript-->
<% call printDate() %>
<!--Call the VBScript procedure from within VBScrip-->
<% Echo %>
<BR>
</BODY>
</HTML>
<%Sub Echo%>
<!--Note: this will not output anything unless the page is called with a query string like http://localhost/test.asp?x=1%20have&y=a%20cunning&z=plan -->
<%
Response.Write "<TABLE BORDER=1>" & _
"<TR><TH>Name</TH><TH>Value</TH></TR>"
Set objQueryString = Request.QueryString
For Each strSelection In objQueryString
Response.Write "<TR><TD>" & strSelection & "</TD><TD>" & _
objQueryString(strSelection) & "</TD></TR>"
Next
Response.Write "</TABLE>"
End Sub
%>
<SCRIPT LANGUAGE=JScript RUNAT=SERVER>
function printDate()
{
var x
x = new Date()
Response.Write(x.toString())
Response.Write("<BR>")
}
</SCRIPT>
참고 JScript 함수에서 VBScript를 호출할 때는 대소문자를 구분하지 않습니다.
VBScript에서 프로시저의 전체 배열을 전달하려면 배열 이름 다음에 빈 괄호를 사용합니다. JScript에서는 빈 대괄호를 사용합니다.