0

過去 3 日間、この問題に対する単一の答えを見つけることができませんでした。サーブレットで独自のクラスを使用できるようにする必要があります。

私のファイル階層が正しいと確信しています:

|-WEB-INF/
|---classes/
|------com/
|---------myProject/
|------------user/
|---------------User.java
|---------------Location.java
|---------------Comment.java
|------------servlet/
|---------------DoComment.java

User.java、Location.java、および Comment.java は 1 つのパッケージで定義されているcom.myProject.userため、Java プロジェクトのメイン ルートに移動して、次のようにコンパイルする必要があります。

/var/lib/tomcat6/webapps/ROOT/WEB-INF/classes$ sudo javac com/myProject/user/Location.java
/var/lib/tomcat6/webapps/ROOT/WEB-INF/classes$ sudo javac com/myProject/user/User.java
/var/lib/tomcat6/webapps/ROOT/WEB-INF/classes$ sudo javac com/myProject/user/Comment.java

ただし、コンパイルでクラスパスを使用するとjavac、他のオブジェクトを識別できません (cannot find symbolエラー)。

/var/lib/tomcat6/webapps/ROOT/WEB-INF/classes$ sudo javac -cp /usr/share/tomcat6/lib/servlet-api.jar com/myProject/servlet/DoComment.java

助けてください!

4

3 に答える 3

0

問題が解決しました!

com.myProject.userパッケージの JAR ファイルを作成し、 WEB-INF/lib. コロンで区切られた 2 つのクラスパスを使用してサーブレットをコンパイルしたよりも。

コードは次のとおりです。

/var/lib/tomcat6/webapps/ROOT/WEB-INF/classes$ sudo jar cvf myproject-user.jar com/myProject/user/User.class com/myProject/user/Location.class com/myProject/user/Comment.class
/var/lib/tomcat6/webapps/ROOT/WEB-INF/classes$ mv myproject-user.jar ../lib/myproject-user.jar
/var/lib/tomcat6/webapps/ROOT/WEB-INF/classes$ sudo service tomcat6 restart
/var/lib/tomcat6/webapps/ROOT/WEB-INF/classes$ sudo javac -cp /usr/share/tomcat6/lib/servlet-api.jar:../lib/myproject-user.jar com/myProject/servlet/DoComment.java

durron597に感謝します。回答を組み合わせたkwiknessが正解でした。良い1日を。

于 2013-05-03T11:32:24.893 に答える
0

コンパイルされたJavaクラスが期待される場所にJavaソースを配置しています。ソースをコンパイルしてから、現在配置している場所にクラス ファイル (.class と .java) を追加してみてください。

これが機能するには、クラスに依存関係がないこと、およびクラスのパッケージ宣言がそれらを配置するフォルダー階層と一致していることを確認する必要があります。

それでも、これは通常、Web プロジェクトをまとめる方法ではありません。クラスを JAR にパッケージ化し、その JAR を WEB-INF/lib フォルダーに配置することをお勧めします。

JAR の作成の詳細については、http: //docs.oracle.com/javase/tutorial/deployment/jar/build.htmlを参照してください。

于 2013-05-02T21:43:02.503 に答える
0

javac マンページから:

-cp classpath
CLASSPATH 環境変数のユーザー クラス パスを上書きして、ユーザー クラス パスを設定します。CLASSPATH も -class-path も指定されていない場合、ユーザー クラス パスは現在のディレクトリで構成されます。

基本的に、-cp フラグを使用するとクラスパスがオーバーライドされるため、クラスパスで必要なすべてのクラスを指定する必要があります。クラスパス エントリの区切り文字は a:で、ワイルドカードを使用できます。

于 2013-05-02T21:19:47.967 に答える