2012-02-08 146 views

Respuesta

57

Debe agregar la ruta al archivo /lib/servlet-api.jar de Tomcat en el classpath del tiempo de compilación.

javac -cp .;/path/to/Tomcat/lib/servlet-api.jar com/example/MyServletClass.java 

classpath es donde Java necesita buscar las dependencias importadas. De lo contrario, se establecerá de manera predeterminada en la carpeta actual que se incluye como . en el ejemplo anterior. El ; es el separador de ruta para Windows; si está usando un sistema operativo basado en Unix, entonces necesita usar : en su lugar.

+2

cierto, pero en el futuro considere el uso de Maven para solucionar este tipo de problemas para usted – Kris

+7

O simplemente como un IDE de Eclipse. Sin embargo, recomiendo continuar aprendiendo de la manera difícil hasta que casi puedas soñarlo. De lo contrario, será difícil entender cómo funcionan los IDE bajo las coberturas. – BalusC

+0

gracias BalusC. resolvió el problema. – Karadous

6

¿Es un JSP o servlet?

Bueno, estos dos paquetes no están realmente integrados en Java como java.io. En cambio, vienen con el servidor web compatible con Servlet (por ejemplo, Tomcat). Entonces, antes de que el compilador de Java pueda compilar nuestro Servlet, debemos informarle dónde encontrar las clases en estos dos paquetes.

Las clases requeridas normalmente se almacenan en un archivo llamado servlet.jar. La ubicación exacta de este archivo dependerá del software de servidor web particular que utilice, pero en el caso de Tomcat puede encontrarlo en el subdirectorio lib del directorio de instalación principal de Tomcat (por ejemplo, d: \ Program Files \ Apache Group \ jakarta- tomcat-3.2.3 \ lib \ servlet.jar). Para que el compilador de Java pueda compilar Servlets, debe agregar este archivo a la ruta de clase de Java. De forma predeterminada, Java busca clases en el directorio actual (".") Solamente. Por lo tanto, "." es la ruta de clase predeterminada. Si cambia la ruta de clase para incluir el archivo servlet.jar (".; D: ... \ lib \ servlet.jar" en Windows, ".:/Usr /.../ lib/servlet.jar" en Unix), entonces el Servlet debería compilar muy bien.

Puede especificar una ruta de clase que se utiliza cuando se ejecuta javac.exe de la siguiente manera:

d:\javadev> javac -classpath ".;d:\Program Files\Apache Group\ jakarta-tomcat-3.2.3\lib\servlet.jar" MyServlet.java

O en Linux utiliza javac: en lugar de;

server1> javac -classpath ".:./servlet/servlet.jar" MyServlet.java

+0

¿debo hacer esto cada vez que compilo un archivo? Quiero decir que hay una manera de establecer classpath para todo el tiempo que compilo un archivo. – Karadous

+0

Para que compile el archivo, es decir, * .java, debe asegurarse de que servlet.jar esté en la ruta de clases. Tenga en cuenta que los JSP eventualmente se traducen a servlets que, por supuesto, son archivos Java. – Frankline

+0

Alguien tiene el consejo: * "Si está usando Windows Agregar d: \ Archivos de programa \ Apache Group \ jakarta-tomcat-3.2.3 \ lib \ servlet.jar; a JAVA_HOME Variable también hace la magia" * – Pubby

1

Añadir servlet-api.jar en la ruta de clases. Estará disponible en la carpeta lib de Tomcat.

1

JSP y Servlet son Programación del lado del servidor. Como viene como un paquete integrado dentro de un Servidor como Tomcat. La ruta puede ser como sabia

C:\Program Files\Apache Software Foundation\Tomcat 6.0\lib\jsp-api.jar 
C:\Program Files\Apache Software Foundation\Tomcat 6.0\lib\servlet-api.jar 

Sólo desea hacer es añadir esta de la siguiente manera

Right Click> My Computer>Advanced>Environment Variables>System variables 

Do> New..> Variable name:CLASSPATH 
      Variable value:CLASSPATH=.;C:\Program Files\Apache Software Foundation\Tomcat 6.0\lib\servlet-api.jar; 
5

en un entorno Linux el enlace suave al parecer no funciona. debes usar la ruta física. por ejemplo, en mi máquina tengo un enlace suave al /usr/share/tomacat7/lib/servlet-api.jar y el uso de este como mi argumento classpath llevó a una compilación fallida con el mismo error. en su lugar tuve que usar /usr/share/java/tomcat-servlet-api-3.0.jar que es el archivo al que apuntaba el enlace suave.

18

Si está trabajando con el proyecto maven, agregue la siguiente dependencia a su pom.xml

<dependency> 
    <groupId>javax.servlet</groupId> 
    <artifactId>javax.servlet-api</artifactId> 
    <version>3.0.1</version> 
    <scope>provided</scope> 
</dependency> 
+2

El equivalente de Gradle es 'dependencias { grupo de compilación: 'javax.servlet', nombre: 'servlet-api', versión: '2.4'}' – MarkHu

+0

aún no funciona para mí –

+0

Esto funciona para mí, muchas gracias –

0

Esto es lo que encontré. Agregando /usr/local/apache-tomcat-7.0.64/lib/servlet-api.jar en mi variable de entorno como CLASSPATH. OS es iOS.

si se utiliza bash: ~/.bash_profile $CLASSPATH=/usr/local/apache-tomcat-7.0.64/lib/servlet-api.jar

si se utiliza zsh: ~/.zshrc exportación CLASSPATH="usr/local/apache-tomcat-7.0.64/lib/servlet-api.jar"

Fuerza funciona en este momento, ejecute source .bash_profile (o .zshrc) o se puede reiniciar el ordenador y funciona para el usuario actual.

4

Esto es lo que resuelve el problema para mí:

<dependency> 
    <groupId>javax.servlet.jsp</groupId> 
    <artifactId>jsp-api</artifactId> 
    <version>2.2</version> 
    <scope>provided</scope> 
</dependency> 
Cuestiones relacionadas