Error de compilación de la línea de comandos javac: el paquete javax.servlet no existe

5 minutos de lectura

Avatar de usuario de Karadous
káradous

Tengo una clase Servlet en la que importo javax.servlet.* y javax.servlet.http.*. Cuando intento compilarlo en el símbolo del sistema, aparece el error

el paquete javax.servlet no existe

Yo uso JDK 1.7.0 y Tomcat 6.0. compilo usando javac. No estoy usando una herramienta de compilación como Maven.

Avatar de usuario de BalusC
BalusC

Debe agregar la ruta a Tomcat’s /lib/servlet-api.jar archivo al classpath de tiempo de compilación.

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

El classpath es donde Java necesita buscar dependencias importadas. De lo contrario, se establecerá de forma 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 cambio.

Si aún enfrenta el mismo error de compilación y está de hecho usando Tomcat 10 o posterior, entonces debería migrar las importaciones en su código fuente desde javax.* a jakarta.*.

import jakarta.servlet.*;
import jakarta.servlet.http.*;

En caso de que quieras seguir usando javax.* por el motivo que sea, entonces debería cambiar a Tomcat 9 o anterior, ya que esa era la última versión que aún usaba el antiguo javax.* espacio de nombres

Ver también:

  • jakarta.servlet.ServletException: Clase [com.practice.MyServlet] no es un servlet
  • ¿Cómo importo la API javax.servlet / jakarta.servlet en mi proyecto Eclipse?
  • ¿Qué es exactamente Java EE?

  • cierto, pero en el futuro considere usar maven para resolver este tipo de problemas por usted

    – Kris

    8 de febrero de 2012 a las 12:44

  • O simplemente un IDE como Eclipse. Sin embargo, recomendaría 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 sábanas.

    – BalusC

    8 de febrero de 2012 a las 12:46

  • Mis disculpas, si tengo más de una clase de servlet, ¿cómo puedo agregarlas para resolver este problema? gracias

    – Alumno

    30 de agosto de 2020 a las 5:30

  • @Alumno: cómo compilar múltiples archivos usando javac

    – BalusC

    30 de agosto de 2020 a las 9:07

Si está trabajando con un 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>

  • El equivalente de Gradle es dependencies { compile group: 'javax.servlet', name: 'servlet-api', version:'2.4' }

    – MarkHu

    15 de diciembre de 2016 a las 1:47


  • Trabajado como un encanto. Gracias.

    – raksheetbhat

    23 de mayo de 2018 a las 12:39

Avatar de usuario de Frankline
franklin

¿Es un JSP o Servlet?

Bueno, estos dos paquetes en realidad no están integrados en Java como lo está java.io. En su lugar, 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 principal de instalación de Tomcat (p. ej., 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 su classpath de Java. De forma predeterminada, Java busca clases en el directorio actual (“.”) únicamente. De este modo, “.” es la vía de acceso de clases predeterminada. Si cambia la vía de acceso de clases para incluir el archivo servlet.jar (“.;d:…\lib\servlet.jar” en Windows, “.:/usr/…/lib/servlet.jar” en Unix ), entonces el Servlet debería compilarse bien.

Puede especificar una vía de acceso de clases para usar cuando 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 javac usa: en lugar de;

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

  • ¿Debo hacer esto cada vez que compilo un archivo? Quiero decir, ¿hay alguna manera de establecer classpath para todo el tiempo que compilo un archivo?

    – Karadous

    8 de febrero de 2012 a las 12:46


  • Para compilar 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 son, por supuesto, archivos Java.

    – Frankline

    8 de febrero de 2012 a las 13:22

  • Alguien tiene el consejo: “Si está utilizando Windows Agregar d:\Program Files\Apache Group\jakarta-tomcat-3.2.3\lib\servlet.jar; a JAVA_HOME Variable también hace la magia”

    – pubis

    29 de abril de 2012 a las 16:21

En un entorno Linux, el enlace suave aparentemente no funciona. debe utilizar la ruta física. por ejemplo, en mi máquina tengo un enlace suave en /usr/share/tomacat7/lib/servlet-api.jar y usar esto como mi argumento classpath condujo 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 apuntó el enlace suave.

Esto es lo que resolvió el problema para mí:

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

Avatar de usuario de Md Rehan
Rehan

Copie el archivo “servlet-api.jar“desde la ubicación SU_RUTA_DE_INSTALACIÓN\tomcat\lib\servlet-api.jar y pegue el archivo en su directorio de Java SU_RUTA_DE_INSTALACIÓN\Java\jdk1.8.0_121\jre\lib\ext

esto funcionará (probado).

Avatar de usuario de Abhendra Singh
abhendra singh

Agregue servlet-api.jar a su classpath. Estará disponible en la carpeta lib de Tomcat.

¿Ha sido útil esta solución?