最近、私はASPにMVCアーキテクチャを実装しようとする予定です。誰かが私に尋ねたに違いない:ASPが排除された、なぜ私はまだそれを勉強しているのですか?私もこれを知っています。 MicrosoftはASP 3.0を放棄し、ASP.NETに切り替えて以来、ASPはPHPとJSPに遅れをとっており、ほぼ同時に開始されました。閉じたソース上のオープンソースの利点は、PHPやASPのようなものです。 ASPは、それが排除され、誰もそれを保存できないと言います。ただし、ASPは中国市場、特に中小企業の一部のアプリケーションで非常に広いことは注目に値します。単純なCMSは問題なく、展開するのは簡単です。一部の古いWindowsシステムでは、.NETフレームワークのインストールを直接実行する必要はないため、フレームワークを準備する必要があります。ただし、これは実験的なフレームワークであり、ASPがPHPと同様のMVCアーキテクチャを実装できるかどうかを確認するためだけです。
さて、多くのことを言った後、トピックに目を向けましょう。この問題の理由は、ASPファイルを動的に含める必要があるためです。ご存知のように、ASPには1つの含まれるメソッド、つまりSSI(サーバー側が含まれる)のみがあります。これは基本的に次の2つのタイプに分割されます。
コードコピーは次のとおりです。
<! - #include file = "sample.asp" - >
<! - #include virtual = "sample.asp" - >
基本的に、これら2つのタイプの最初のものはさらに使用されます。 #include virtualには、仮想ディレクトリで使用できる仮想パスが含まれています。しかし、これらは両方とも静的です。動的に含めたい場合は、次のように書くことはできません。
コードコピーは次のとおりです。
<! - #include file = "<%= myvar%>" - >
<! - #include virtual = "<%= myvar%>" - >
上記の執筆方法は正しくありません。 ASPがスクリプトエンジンを起動する前に#includeディレクティブが実行される前に実行されることを理解できます<%%>タグを実行します。言い換えれば、#includeはASPの作業ではなく、IISの翻訳作業などのサーバー側プログラムであるため、ASPコードに注意を払うことはできません。
実装する方法は、include_once、要求、require_onceをダイナミックにPHPと同様のスクリプトメソッドを含めますか? ASPサーバーオブジェクトの方法:Server.Executeを見てみましょう。すべてのASP機能を検索すると、この関数がDynamic Includeに最も似ていることがわかります。実験を行うことができます:
sample.inc.asp
コードコピーは次のとおりです。
<%
Response.Write「Hello World!」
%>
test.asp
コードコピーは次のとおりです。
<%
server.execute "sample.inc.asp"
Response.Write「I Am test.asp!」
%>
実際の出力は「hello world!i are test.asp!」である必要があります。これは、server.executeが動的包含でうまく機能することを示していますが、クラスや関数を含める場合はどうなりますか?次に、次の実験を行います。
sample.class.asp
コードコピーは次のとおりです。
<%
クラスサンプル
エンドクラス
%>
test.asp
コードコピーは次のとおりです。
<%
server.execute "sample.class.asp"
Response.Write TypeName(eval( "新しいサンプル"))
%>
直接実行すると、エラー「Microsoft VBScriptランタイムエラー '800A01FA'クラスが定義されていません:「サンプル」」、結果は非常に残念です、なぜこれが起こるのですか? MSDNを調べて、この説明を見つけました。「#includeを使用してファイルが呼び出しページに含まれている場合、実行された.aspはそれを使用しません。たとえば、呼び出しページに含まれるファイルにサブルーチンがあるかもしれませんが、実行された.aspはサブルーチン名を認識しません。」私が遭遇した問題とは少し異なるようです。 Server.executeコードは分離されていますか?次に、次の実験を実行します。