¿Cómo importo la API javax.servlet en mi proyecto Eclipse?

320

Quiero desarrollar con Servlets en Eclipse, pero dice que el paquete javax.servletno se puede resolver. ¿Cómo puedo agregar un javax.servletpaquete a mi proyecto Eclipse?

tom
fuente
Estoy tratando de ejecutar un servlet de tipo hola simple, normalmente si quisiera hacer una interfaz gráfica de usuario importaría Java ...... swing. *; no puedo encontrar la importación correcta para un servlet
tom

Respuestas:

415

Asegúrese de tener el servidor y Eclipse correctos

Asegúrese de utilizar al menos Eclipse IDE para desarrolladores Enterprise Java (con Enterprise ). Contiene herramientas de desarrollo para crear proyectos web dinámicos e integrar fácilmente servletcontainers (esas herramientas son parte de Web Tools Platform, WTP). Si ya tenía Eclipse IDE para Java (sin Enterprise) e instaló manualmente algunos complementos relacionados, es probable que no se haya realizado correctamente. Es mejor que lo tire a la basura y tome el verdadero Eclipse IDE para Enterprise Java One.

También debe asegurarse de que ya tiene instalado un contenedor de servlet en su máquina que implementa al menos la misma versión de API de Servlet que el contenedor de servlet en el entorno de producción, por ejemplo Apache Tomcat , Oracle GlassFish , JBoss AS / WildFly , etc. Por lo general, solo descargar el archivo ZIP y extraerlo es suficiente. En el caso de Tomcat, no descargue el formato EXE, solo para entornos de producción basados ​​en Windows. Consulte también ao Varios puertos (8005, 8080, 8009) requeridos por el servidor Tomcat en localhost ya están en uso .

Un servletcontainer es una implementación concreta de la API de Servlet. Tenga en cuenta que la descarga del SDK de Java EE en Oracle.com básicamente contiene GlassFish. Entonces, si ya ha descargado Java EE SDK, entonces básicamente ya tiene GlassFish. También tenga en cuenta que, por ejemplo, GlassFish y JBoss AS / WildFly son más que un contenedor de servlet, también admiten JSF, EJB, JPA y todas las demás fantasías de Java EE. Consulte también ao ¿Qué es exactamente Java EE?


Integre el servidor en Eclipse y asócielo con Project

Una vez que haya instalado Eclipse para Enterprise Java y un contenedor de servlet en su máquina, realice los siguientes pasos en Eclipse:

  1. Integrar servletcontainer en Eclipse

    a. Vía Vista de servidores

    • Abra la vista Servidores en el cuadro inferior.

    • Haga clic derecho allí y elija Nuevo> Servidor .

    • Elija la marca y la versión de servletcontainer adecuadas y recorra el asistente.

      ingrese la descripción de la imagen aquí

    si. O, a través de las preferencias de Eclipse

    • Abra Ventana> Preferencias> Servidor> Entornos de tiempo de ejecución .

    • Puede Agregar , Editar y Eliminar servidores aquí.

      ingrese la descripción de la imagen aquí

  2. Servidor asociado con proyecto

    a. En nuevo proyecto

    • Abra el Navegador / Explorador de proyectos en el lado izquierdo.

    • Haga clic derecho allí y elija Nuevo> Proyecto y luego en el menú Web> Proyecto web dinámico .

    • En el asistente, establezca Target Runtime en el servidor integrado.

      ingrese la descripción de la imagen aquí

    si. O, en proyecto existente

    • Haga clic derecho en el proyecto y elija Propiedades .

    • En la sección Tiempos de ejecución seleccionados, seleccione el servidor integrado.

      ingrese la descripción de la imagen aquí

    De cualquier manera, Eclipse tomará automáticamente las bibliotecas del contenedor de servlets en la ruta de compilación. De esta forma, podrá importar y utilizar la API de Servlet.


Nunca cargue archivos JAR sueltos específicos del servidor

En cualquier caso, no debería tener la necesidad de jugar en la propiedad Build Path del proyecto. Usted debe, sobre todo, no manualmente copiar / descarga / mover / incluir la servletcontainer específica individuo bibliotecas como servlet-api.jar, jsp-api.jar, el-api.jar, j2ee.jar,javaee.jar , etc. sólo conduciría a la futura portabilidad, compatibilidad, rutas de clases y mantenibilidad problemas, debido a que su aplicación web no funcionaría cuando es desplegado en un contenedor de servlet de una marca / versión diferente de la que originalmente se obtuvieron esas bibliotecas.

En caso de que esté utilizando Maven, debe asegurarse absolutamente de que las bibliotecas específicas de servletcontainer que ya proporciona el tiempo de ejecución de destino estén marcadas como <scope>provided</scope>.

Aquí hay algunas excepciones típicas que puedes obtener cuando tiras basura /WEB-INF/libo incluso /JRE/lib,/JRE/lib/ext , etc, con bibliotecas servletcontainer-específicos en un intento descuidado como para corregir los errores de compilación:

BalusC
fuente
44
@BalusC Si estoy usando Apache Ant para construir mi proyecto, ¿cómo incluyo dinámicamente la carpeta /lib(servlet-api.jar & jsp-api.jar) del contenedor de servlets? ¿O necesito codificar la ruta de acceso a la carpeta / lib como - <property name="tomcat.home" value="D:\\Program Files\\Apache Software Foundation\\apache-tomcat-6.0.36"/>etc
kaustav datta
1
@BalusC ¿por qué los proyectos maven creados con arquetipo maven-archetype-webappno incluyen el JAR de servlet-api como una dependencia? El proyecto tiene un index.jsp con error de compilación. (Eclipse de Luna Identificación del Cuerpo: 20140612-0.600, JDK 8, m2eclipse)
Arun
1
Las servlet-apidependencias de @arun son proporcionadas por los entornos de tiempo de ejecución de Servlet como Tomcat, Wildfly, Glassfish, etc. Nunca lo incluya como parte de su aplicación, ya que existe una buena posibilidad de que choque con el entorno.
pide el
@BalusC, 1) ¿Es javax.servlet-api-3.1.0.jar igual a tomcat8 / lib / servlet-api.jar? Descompilo los dos frascos, luego encuentro que las clases / interfaces son iguales. 2) ¿Es javax.servlet-api-3.1.0.jar container-neutral (no bibliotecas específicas de servletcontainer)?
gfan
@gfan: el problema técnico no es si las bibliotecas proporcionadas por el contenedor son "neutrales al contenedor" sino la prioridad y el orden de carga de clases. Si las bibliotecas proporcionadas por el contenedor son cargadas por el cargador de clases incorrecto (por ejemplo, a través del cargador de clases webapp), las cosas pueden causar estragos, incluso si es "coincidentemente" exactamente la misma versión. Simplemente no proporcione bibliotecas proporcionadas por contenedores desde lugares duplicados fuera del contenedor. Período.
BalusC
220

import javax.servlet

PASO 1

Vaya a las propiedades de su proyecto (con Alt+ Entero clic derecho)

PASO 2

verifique Apache Tomcat v7.0 en Targeted Runtime y funciona.

prayagupd
fuente
2
Me ayudó a agregar mi tiempo de ejecución JBOSS. Mi lista estaba vacía
abarcan el
2
Esta fue la solución para mí. Había configurado tomcat 6.0 como mi entorno de implementación (como servidor en eclipse), pero no especifiqué como mi entorno de tiempo de ejecución ... Supongo que eso significa que podría encontrar los archivos .jars en mi carpeta tomcat / lib en tiempo de ejecución, pero no en tiempo de compilación.
Paul
¡Gracias! Pero, ¿cómo puedo eliminar copias de servidores mu? Tengo Apache Tomcat v7.0 (2) y (3) que quiero eliminar. Alguien sabe como?
Robben
No me ayudó a resolver el problema The import javax.servlet cannot be resolved.
mrgloom
1
¡Esto funciona! Gracias, @mrgloom, es posible que desee eliminar el servidor y crear un nuevo servidor en su host local
Freddie Fabregas
81

Pequeña diferencia de Hari:

Haga clic derecho en el proyecto ---> Propiedades ---> Ruta de compilación de Java ---> Agregar biblioteca ... ---> Tiempo de ejecución del servidor ---> Apache Tomcat ----> Finalizar.

ivanLam
fuente
3
Hola ivanLam, ¿Apache Tomcat no se muestra después de Server Runtime? ¡Qué hacer ahora!
Sandeep Pattanaik
15

Incluya servlet-api.jar desde la carpeta lib de su servidor.ingrese la descripción de la imagen aquí

Hacer este paso

ingrese la descripción de la imagen aquí

sarath
fuente
1
La solución no funciona para mí, aún obteniendo un error inferior. Un contenedor secundario falló durante el inicio java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Error al iniciar el componente [StandardEngine [Catalina] .StandardHost [localhost] .StandardContext [/ messenger]]
Maya Mohite
13

Agregue la dependencia javax.servlet en pom.xml. Su problema será resuelto

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.0.1</version>
    <scope>provided</scope>
</dependency>
Zeeshan Akhter
fuente
12

Solución rápida: esto funcionó en Eclipse: haga clic con el botón derecho en el proyecto -> Propiedades -> Ruta de compilación de Java (pestaña) -> Agregar JAR externos -> ubique la implementación del servlet api jar (si Tomcat - se llama servlet-api.jar) -> haga clic en Aceptar. Eso es !!

Hari Gudigundla
fuente
14
Con referencia a la anterior BalusC puesto no copiar manualmente / descarga / mover / incluye las bibliotecas individuales servletcontainer-específicos como servlet-api.jar, jsp-api.jar, el-api.jar, j2ee.jar, javaee.jar, etc. Sería sólo conducen a la futura portabilidad, compatibilidad, ruta de clase y los problemas de mantenimiento.
Aniket Kulkarni
5

simplemente puede copiar servlet-api.jary copiar los archivos jar en la carpeta lib, que está en WEB-INF. entonces simplemente limpie y construya su proyecto, sus errores serán resueltos.

  **OR**

puede agregar directamente archivos jar a la biblioteca siguiendo estos pasos.

  1. Haga clic derecho en el proyecto.
  2. Ir a propiedades.
  3. Vaya a Java Build Path.
  4. Seleccione la opción Agregar biblioteca de las pestañas.
  5. Agregar archivos jar
  6. dar ruta de su servlet-api.jararchivo.
  7. Limpia y construye tu proyecto.
Mitul Maheshwari
fuente
Downvoting, con referencia a la anterior BalusC correos y comentarios Aniket Kulkarni, copiar manualmente Nunca / descarga / mover / incluye las bibliotecas individuales servletcontainer-específicos como servlet-api.jar, jsp-api.jar, javaee.jar, etc. sólo conduciría a problemas de portabilidad futuro, compatibilidad, rutas de clases y mantenibilidad.
el-teedee
5

Sé que esta es una publicación anterior. Sin embargo, observé otra instancia en la que en el proyecto ya se ha agregado Tomcat, pero aún recibimos este error. Hice esto para resolver eso:
Alt + Enter
Facetas del proyecto
A la derecha, junto a los detalles, hay otra pestaña "Tiempos de ejecución". El servidor Tomcat instalado aparecerá allí. Seleccionarlo
¡Guarde la configuración y HECHO!

Espero que esto ayude a alguien.

KNP
fuente
3

De wikipedia .

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class HelloWorld extends HttpServlet {
  public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
    PrintWriter out = response.getWriter();
    out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 " +
                "Transitional//EN\">\n" +
                "<html>\n" +
                "<head><title>Hello WWW</title></head>\n" +
                "<body>\n" +
                "<h1>Hello WWW</h1>\n" +
                "</body></html>");
  }
}

Esto, por supuesto, solo funciona si ha agregado la servlet-api.jarruta de compilación de Eclipse. Normalmente, su servidor de aplicaciones (por ejemplo, Tomcat ) tendrá el archivo jar correcto.

Juha Syrjälä
fuente
3

Para proyectos maven, agregue la siguiente dependencia:

<!-- https://mvnrepository.com/artifact/javax.servlet/servlet-api -->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.0.1</version>
    <scope>provided</scope>
</dependency>

Referencia

Para proyectos de gradle:

dependencies {
providedCompile group: 'javax.servlet', name: 'javax.servlet-api', version: '3.0.1'
}

o descargue javax.servlet.jary agregue a su proyecto.

Joby Wilson Mathews
fuente
2

Recibí una excepción de puntero nulo durante la creación del proyecto relacionado con el "Módulo web dinámico".

Para que el proyecto se compile (es decir, para javax.servletimportar con éxito) tuve que ir a las Propiedades del proyecto , elegir Facetas del proyecto en la barra lateral, marcar Módulo web dinámico y hacer clic en Aplicar .

Sorprendentemente, esta vez la faceta "Módulo web dinámico" se instaló correctamente y la importación comenzó a funcionar.

Ivan Vučica
fuente
2

En mi caso, cuando fui a la pantalla Targetted Runtimes , Tomcat 7 no estaba en la lista (deshabilitado) a pesar de estar instalado.

Para solucionarlo, tuve que ir a Preferencias-> Servidor-> Entornos de tiempo de ejecución y luego desinstalar y reinstalar Tomcat 7.

Paul LeBeau
fuente
2

Muchos de nosotros desarrollamos en Eclipse a través de un proyecto Maven. Si es así, puede incluir las dependencias de Tomcat en Maven a través de los tomcat-servlet-apiy tomcat-jsp-apijar. Existe uno para cada versión de Tomcat. Por lo general, agregar estos con alcance provideda su POM es suficiente. Esto mantendrá su construcción más portátil.

Si actualiza Tomcat en el futuro, simplemente actualice la versión de estos frascos también.

Erica Kane
fuente
0

Sobre todo, nunca debe copiar / descargar / mover / incluir manualmente las bibliotecas individuales de servletcontainer como servlet-api.jar

@BalusC,

Preferiría usar las clases exactas que utilizará mi aplicación en lugar de las proporcionadas por Eclipse (cuando me siento como un desarrollador paranoico).

Otra solución sería usar Eclipse "Configurar ruta de compilación"> Bibliotecas> Agregar tarros externos y agregar la API de servlet de cualquier contenedor que elija usar.

Y siga la solución de @kaustav datta cuando use ant para construir: tenga una propiedad como tomcat.home o weblogic.home. Sin embargo, introduce otra restricción de que el desarrollador debe instalar Weblogic en su máquina local si se utiliza weblogic. ¿Alguna otra solución más limpia?

Excepción en tiempo de ejecución
fuente
0

Esta podría ser también la razón. Se me ocurrió seguir pom.xml.

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
        </exclusion>
    </exclusions>
</dependency>

El problema no resuelto se debió a la exclusión de spring-boot-starter-tomcat. Simplemente elimine la <exclusions>...</exclusions>dependencia, resolverá el problema, pero asegúrese de hacerlo también excluirá el servidor Tomcat incorporado.

Si también necesita un servidor Tomcat incrustado, puede agregar la misma dependencia con compile scope.

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
    <scope>compile</scope>
</dependency>
Muhammad Usman
fuente