javax.servletのインポートの失敗
質問
これは一般的なエラーであることは承知していますが、ご容赦ください。私はCLASSPATHの問題を追求しましたが、それが問題だとは考えていません。このようなエラーが表示されます。
./src/process.java:2: package javax.servlet does not exist
import javax.servlet.*;
TomcatとJava SDKをインストールしましたが、TomcatがサーブレットAPIを提供することになっています。しかし、それは正確にどのファイルを探していますか?
次の設定があります。 JAVA_HOME = / usr / java / jdk1.6.0_16 CLASSPATH = / usr / share / java; / usr / share / java / tomcat6
tomcatのベースディレクトリ:/ usr / share / tomcat6 このディレクトリでは、/ usr / share / tomcat6 / libは単に/ usr / share / java / tomcat6へのシンボリックリンクです
tomcat6-servlet-2.5-api-6.0.18.jarは/ usr / share / java / tomcat6にありますが、このライブラリを使用するためにjavacに伝える必要があるものは他にありますか?他に必要なライブラリはありますか?
背景として、hello world servletを実行しようとしています。コードは次のとおりです。
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class process extends HttpServlet {
public void doGet( HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
PrintWriter out = response.getWriter();
out.println("Hello World");
}
}
これをjavacでコンパイルすると、次のエラーが表示されます(これは根本的な原因です):
./src/process.java:2: package javax.servlet does not exist
import javax.servlet.*;
^
./src/process.java:3: package javax.servlet.http does not exist
import javax.servlet.http.*;
^
コマンドラインでも-cpオプションを使用してクラスパスを指定しようとしましたが、同じ結果になりました。
解決
JARを具体的に指すようにクラスパスを設定する必要があります。
CLASSPATH=/usr/share/java/tomcat/tomcat6-servlet-2.5-api-6.0.18.jar
クラスパスでフォルダーを指定すると、そのフォルダー内のすべてのクラスを見つけるためにのみ使用されます。 JAR自体はクラスのライブラリ(必要に応じてパッケージ化されたフォルダ)であるため、個別にリストする必要があります。したがって、たとえば、次のようなことができます:
CLASSPATH=/some/location/myjar1.jar:/other/location/myjar2.jar:/some/classes/folder
この場合、 myjar1.jar
、 myjar2、jar
、および / some / classes / folder
ディレクトリのすべてのクラスが利用可能になります。 / some / classes / folder
に myjar3.jar
がある場合、上記の宣言はクラスパスに NOT を追加しません。
更新 McDowell が指摘したように、Java 6では指定されたフォルダー内のすべてのjarを取得するクラスパス内のワイルドカード。ワイルドカードは JAR でのみ機能し、クラスはワイルドカードなしでフォルダを再度指定しない限り、 ピックアップされません。ワイルドカードも再帰的ではありません。だから:
CLASSPATH=/loc1/*:/loc1:/loc2/*
は、 / loc1
フォルダー内のすべてのjarとすべてのクラス、および / loc2
フォルダー内のすべてのjar(クラスではない)を使用可能にします。より深いネストされたjar( /loc1/nested/some.jar
)は取得されません。
他のヒント
コンソールまたは* .bat-fileに何かを記述します。
SET CLASSPATH = C:\ java \ apache-tomcat-7.0.53 \ lib \ servlet-api.jar