0

私は Eclipse Helios を使用して、Tomcat 5.5 で実行される JSP と POJO をプログラムしています。次のように org.apache.catalina.connector.Response クラスを使用しようとしています:

org.apache.catalina.connector.* をインポートします。... 応答 resp = (応答) r;

ここで、r は HttpServletResponse のインスタンスです。Eclipse は警告を出さず、プロジェクトは正常にコンパイルされます。ただし、このコードを含むページを参照すると、次のエラーが表示されます。

java.lang.ClassNotFoundException: org.apache.catalina.connector.Response

何がうまくいかないのか考えていますか?

私もこの方法で試してみましたが、同じ結果でした。

org.apache.catalina.connector.Response resp = (org.apache.catalina.connector.Response) r;

ありがとう、

イアン

4

3 に答える 3

1

ClassNotFoundException は、クラスがコンパイル時には使用可能であったが、実行時には使用できなかったことを意味します。したがって、ソース コードにどのようにインポートするかに違いはありません。

確認していませんが、Tomcat が Web アプリに内部クラスへのアクセスを許可していない可能性は十分にあります。そして、私がチェックしなかった理由は、たとえそれができたとしても、それは悪い考えだと知っているからです. 実装ではなく、API (この場合、javax.servlet.* の下のもの) にコーディングする必要があります。

于 2011-03-07T03:38:58.617 に答える
1

明らかに、Tomcat の設計者は、Web アプリケーションがその内部クラスを取得するのは良い考えではないと考えています。考えられる理由は次のとおりです。

  • コードが Tomcat に依存するようになります。
  • 内部の詳細に変更が加えられると、コードが壊れやすくなります。つまり、Tomcat のバージョンに依存します。
  • Tomcat スタックまたは webapp コンテキスト内の他のものは、Response オブジェクトが期待するクラスではなくラッパーであることを意味することを行う可能性があります。

コードを「機能する」ように変更するには、おそらく Tomcat JAR ファイルをいじる必要があります。これにより、移植性がさらに低下します。自分の喉を切り裂くのに役立つ可能性のある詳細については、ここを参照してください。これは Tomcat 5.5 固有のものであることに注意してください ... Tomcat 6.0 バージョンのページは異なります。


org.apache.catalina.connector.Response にしたい理由は、クライアントに送信される前に HTTP 応答ヘッダーの内容を読み取るためです。

分かりました。おそらく、カスタム バルブを実装する必要があります。(これは Tomcat 固有のものです。) または、既存の Valve 実装の 1 つがあなたのために仕事をするかどうかを確認してください。

于 2011-03-07T03:56:34.650 に答える
0

そのクラスは使えないと思います。あなたが何をしようとしているのかはわかりませんが、HttpServletResponse を使用すれば問題ありません。

于 2011-03-07T03:32:54.907 に答える