Question

Je sais que c'est une erreur commune, mais supportez-moi. J'ai poursuivi le problème CLASSPATH et je ne pense pas que ce soit le problème. Je reçois une erreur comme celle-ci.

./src/process.java:2: package javax.servlet does not exist
import javax.servlet.*;

J'ai installé Tomcat et le SDK Java et je sais que Tomcat est censé fournir l'API de servlet. Mais quel fichier recherche-t-il exactement?

J'ai les paramètres suivants: JAVA_HOME = / usr / java / jdk1.6.0_16 CLASSPATH = / usr / share / java; / usr / share / java / tomcat6

Le répertoire de base de tomcat: / usr / share / tomcat6 Dans ce répertoire, / usr / share / tomcat6 / lib est simplement un lien symbolique vers / usr / share / java / tomcat6

tomcat6-servlet-2.5-api-6.0.18.jar est dans / usr / share / java / tomcat6, dois-je ajouter quelque chose à propos de javac pour qu'il utilise cette bibliothèque? Y a-t-il une autre bibliothèque dont j'ai besoin?

Pour rappel, j'essaie de lancer un servlet Hello World. Le code est le suivant:

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");

}
}

Lorsque je compile cela avec javac, les erreurs suivantes (parmi lesquelles il s’agit de la cause première) sont générées:

./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.*;
^

J'ai essayé de spécifier le chemin d'accès aux classes sur la ligne de commande également avec l'option -cp, mais j'ai obtenu les mêmes résultats.

Était-ce utile?

La solution

Vous devez définir votre chemin d'accès aux classes afin qu'il pointe spécifiquement sur votre fichier JAR:

CLASSPATH=/usr/share/java/tomcat/tomcat6-servlet-2.5-api-6.0.18.jar

Lorsque vous spécifiez un dossier dans classpath, il est uniquement utilisé pour localiser toutes les classes de ce dossier. Les JAR sont en eux-mêmes des bibliothèques (des dossiers empaquetés, si vous voulez) et doivent donc être listés individuellement. Ainsi, par exemple, vous pourriez faire quelque chose comme:

CLASSPATH=/some/location/myjar1.jar:/other/location/myjar2.jar:/some/classes/folder

auquel cas toutes les classes du répertoire myjar1.jar , myjar2, jar et / some / classes / folder seront à votre disposition . Si vous aviez myjar3.jar dans / some / classes / folder , la déclaration ci-dessus NOT l'ajouterait au chemin de classe.

Mettre à jour Comme McDowell a été souligné, Java 6 autorise caractères génériques dans le chemin d'accès aux classes permettant de récupérer tous les fichiers jar du dossier spécifié. Les caractères génériques ne fonctionnent que pour les JAR , les classes ne sont pas capturées, sauf si le dossier est à nouveau spécifié sans caractère générique. Les caractères génériques ne sont pas non plus récursifs. Donc:

CLASSPATH=/loc1/*:/loc1:/loc2/*

rendrait tous les fichiers JAR et toutes les classes du dossier / loc1 et tous les fichiers JAR (mais pas les classes) du dossier / loc2 disponibles. Les fichiers JAR imbriqués plus profonds ( /loc1/nested/some.jar ) ne seront pas récupérés.

Autres conseils

Vous écrivez quelque chose dans la console ou dans le fichier * .bat.

  

SET CLASSPATH = C: \ java \ apache-tomcat-7.0.53 \ lib \ servlet-api.jar

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top