Tomcat 内で実行しているときに JSR223 スクリプトで発生している問題を理解しようとしています。私は Java スクリプト エンジンを使用していますが、問題はより一般的に当てはまると思います (リファレンス JS エンジンでも同様の問題が見られました)。評価のために渡すスクリプトの最初の行は次のとおりです。
import javax.servlet.http.*;
これは次のメッセージで失敗します。
package javax.servlet.http does not exist
したがって、Java スクリプト エンジンのソース コードを掘り下げると、なぜこれが起こっているのかがわかります。スクリプト テキストを JavaCompiler に渡し、取得したものをクラスパスとして指定しますjava.class.path
が、Tomcat はクラスローダーとクラスパスに関して独自の処理を行うためです。が含まれているのは だけです$CATALINA_HOME/bin/bootstrap.jar
。
スクリプト エンジンが使用するクラスパスをオーバーライドすることは可能ですが、そうすると次の問題が発生します。つまり、Tomcat が使用しているクラスパスを実行時に発見するにはどうすればよいでしょうか。
ここで明らかな何かが欠けているに違いないように思えます。私が知る限り、これは Web アプリケーションであらゆる種類の本格的なスクリプトを実行しようとする人に起こるからです。それでも私は議論のために何時間も検索しましたこのエリアでは、質問をする人すら見つかりません...