3

特定のバージョンのjsp-apiおよびservlet-apijarファイルを使用してプロジェクトをビルドおよびパッケージ化しています。ここで、Tomcat、WAS、Weblogicなどの任意のアプリケーションサーバーにWebプロジェクトをデプロイするときに、これらのjarをロードする必要があります。

私がtomcatで見た動作は、これらのAPIのパッケージ化されたバージョンが問題のあるクラスと一緒にロードされていないというメッセージを表示することです。

これらのサーバー設定または動作をオーバーライドする方法はありますか?

私の懸念は、サーバーのデフォルトの動作を許可すると、サーバーごとに、または同じアプリサーバーのバージョンごとに異なる動作が許可される可能性があることです。

4

4 に答える 4

3
  1. この Web アプリケーションをインストールするサーバーを制御できる場合は、コア jar を自分のものに置き換えることができます。
  2. さらに、アプリ サーバーの起動時に jar を追加できます。

アップデート:

2 番目の部分については、アプリケーション サーバー自体の起動ファイルを変更する必要があります。

手元にインストールはありませんが、ディレクトリ $YOUR_APPSERV/bin にたくさんのスクリプト (.cmd または .sh ファイル) があるとします。

それらのいくつかはアプリサーバーを起動し、他のいくつかはそれを構成するのに役立ちます。

コマンドラインが次のようになるように、これらのいずれかを変更する必要があります。

(Windows のインストールを想定)

java -Xbootclasspath/p:c:\cutomjars\myJar.jar;customjars\myOtherJar.jar ..................... // the rest of the normal command line.

-bootclasspath/p は、アプリのクラスパスに jar を追加します

-bootclasspath/a は、アプリのクラスパスに jar を追加します

このオプションを使用すると、JVM 内の任意のクラスを jar で指定されたクラスでオーバーライドできるため、必要に応じて java.lang.String を置き換えることもできます。

それが一つのアプローチです。残念ながら、-Xbootclasspath は Sun JVM のオプションです (つまり、JRockit にはそれがなく、IBM の VM にも彼の名前はありません)。

すべての拡張機能があるフォルダーを宣言する別のオプションがありました。さらに、jre には ext ディレクトリがあります。

アプリケーション サーバーの bin ディレクトリを詳しく調べて、各スクリプトが何に使用されているかを調べてください。

このトピックのより正式な説明は次のとおりです。http://java.sun.com/j2se/1.5.0/docs/tooldocs/findingclasses.html

お役に立てば幸いです。

ところで、私はこれを何年も前に行って、CORBA パッケージを非常に古いバージョンに置き換えていました。したがって、これは確実に機能します。

于 2008-11-28T06:47:01.290 に答える
1

わかりやすくするために、答えを2つに分けました

Tushu、2 つのお知らせがあります。

良い点は、以前の投稿で説明した手順を使用して、Tomcat のサーブレット API を 2.5 から 2.3 に置き換えることができたことです (以下のスクリーンショット)。

悪いニュース (そして、私は以前にこれを推測する必要がありました) tomcat が起動しません。それは明らかです。servlet-api.jar は tomcat のコアであり、バージョンはそこに存在するいくつかの機能に依存します。交換するとエンジンがかからなくなります。

私が示した解決策は、1 つまたは 2 つのクラスの動作を変更するために機能しますが、システム全体を置き換えるものではありません。

だから、あなたが持っている唯一のオプションは次のとおりです。

  1. サーブレットの仕様を満たすサーブレット コンテナーで実行する アプリをアップグレードする
  2. 新しい仕様でそのままテストします。可能性はあります (非パブリック クラスにリンクしていない場合)、アプリは引き続き機能します。
  3. (私は過去にこれを行いました)正確に必要なクラスを含む新しいjarを作成し(アプリを適切に実行するために必要なクラスは1つだけだとしましょう)、そのクラスをコンテナに追加します。

これがテストjspです

Servlet version: <%=application.getMajorVersion()%>.<%=application.getMinorVersion()%>

変更されていないバージョンの出力:

無修正版 http://img89.imageshack.us/img89/9822/87694136ld9.png

修正版:

修正版 http://img241.imageshack.us/img241/7842/86370197ev3.png

変更されたカタリナ スタートアップのスクリーンショット

差分出力 http://img246.imageshack.us/img246/3333/30172332tp7.png

Tomcat スタックトレース

SEVERE: Servlet.service() for servlet jsp threw exception

javax.servlet.ServletException: javax.servlet.jsp.JspFactory.getJspApplicationContext(Ljavax/servlet/ServletContext;)Ljavax/servlet/jsp/JspApplicationContext;

at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:275)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)

at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)

at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)

at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)

at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)

at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)

at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)

at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)

at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)

at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)

at java.lang.Thread.run(Thread.java:619)
于 2008-12-02T20:21:05.890 に答える
0

JRockit は -Xbootclasspath を使用できます。コマンド ライン リファレンスを参照してください

于 2008-11-29T14:03:43.253 に答える
0

他のオプションは使用することです

-Djava.endorsed.dirs

JVMの起動時

于 2009-01-09T00:19:25.720 に答える