error: el paquete javax.servlet no existe

Estaba intentando implementar un filtro de inicio de sesión en mi aplicación web con jsf 2, siguiendo esta guía:

https://stackoverflow.com/tags/servlet-filters/info

después de que compilé mi filtro y agregué .class en “web-inf / classes” (como dice la guía) el filtro funcionó, pero coloqué el URL incorrecto para redirigirlo a la página de inicio de sesión, así que eliminé el filter.class de la carpeta (web-inf / classes) e intenté comstackr el proyecto nuevamente, pero falló, y desde entonces estoy obteniendo el “paquete javax.servlet no existe”

es raro porque antes estaba funcionando y tengo javax.servlet en mi pom.xml … intenté limpiar el proyecto, pero nada.

esta es mi clase de filtro:

package Bean; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.annotation.WebFilter; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; /** * Created with IntelliJ IDEA. * User: rodrigo * Date: 28-04-13 * Time: 06:54 AM * To change this template use File | Settings | File Templates. */ @WebFilter("/Contenido/*") public class filtro implements Filter { @Override public void init(FilterConfig config) throws ServletException { // If you have any  in web.xml, then you could get them // here by config.getInitParameter("name") and assign it as field. } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException { HttpServletRequest req = (HttpServletRequest) request; LoginBean user = (LoginBean) req.getSession().getAttribute("user"); if (user != null && user.isLoggedIn()) { // User is logged in, so just continue request. chain.doFilter(request, response); } else { // User is not logged in, so redirect to index. HttpServletResponse res = (HttpServletResponse) response; res.sendRedirect(req.getContextPath() + "/Contenido/Login.xhtml"); } } @Override public void destroy() { // If you have assigned any expensive resources as field of // this Filter class, then you could clean/close them here. } } 

este es el error:

 \Users\rodrigo\IdeaProjects\Frutemu\src\main\java\Bean\filtro.java:[5,20] error: package javax.servlet does not exist [ERROR] \Users\rodrigo\IdeaProjects\Frutemu\src\main\java\Bean\filtro.java:[6,20] error: package javax.servlet does not exist [ERROR] \Users\rodrigo\IdeaProjects\Frutemu\src\main\java\Bean\filtro.java:[7,20] error: package javax.servlet does not exist [ERROR] \Users\rodrigo\IdeaProjects\Frutemu\src\main\java\Bean\filtro.java:[8,20] error: package javax.servlet does not exist [ERROR] \Users\rodrigo\IdeaProjects\Frutemu\src\main\java\Bean\filtro.java:[9,20] error: package javax.servlet does not exist [ERROR] \Users\rodrigo\IdeaProjects\Frutemu\src\main\java\Bean\filtro.java:[10,20] error: package javax.servlet does not exist [ERROR] \Users\rodrigo\IdeaProjects\Frutemu\src\main\java\Bean\filtro.java:[11,31] error: package javax.servlet.annotation does not exist 

mi pom.xml:

  4.0.0 Frutemu Frutemu war 1.0-SNAPSHOT Frutemu Maven Webapp http://maven.apache.org   prime-repo Prime Repo http://repository.primefaces.org     junit junit 3.8.1 test   javax.ejb ejb-api 3.0 provided   org.primefaces primefaces 3.5   org.primefaces.themes all-themes 1.0.9   javax.faces jsf-api 2.0 compile   com.sun.faces jsf-impl 2.0.2-b10 compile   javax.servlet jstl 1.2    mysql mysql-connector-java 5.1.21   org.glassfish.web el-impl 2.2.1-b04 provided    org.apache.openjpa openjpa-all 2.2.0   com.microsoft.sqlserver sqljdbc4 4.0   net.sf.jasperreports jasperreports 4.1.2    Frutemu    org.apache.openjpa openjpa-maven-plugin 2.2.0  **/model/*.class true true    enhancer process-classes  enhance       org.apache.tomcat.maven tomcat7-maven-plugin 2.0  http://127.0.0.1:8080/manager/text TomcatServer /Frutemu    org.codehaus.mojo jasperreports-maven-plugin    compile-reports       net.sf.jasperreports jasperreports 4.1.2       

La dependencia javax.servlet falta en su pom.xml. Agregue lo siguiente a las dependencias-Nodo:

  javax.servlet javax.servlet-api 3.0.1 provided  

Solo puse este código en mi pom.xml y ejecuté el comando maven install.

javax.servlet javax.servlet-api 3.0.1 provided

La respuesta proporcionada por @Matthias Herlitzius es en su mayoría correcta. Solo para mayor claridad.

El jar servlet-api es mejor dejarlo en el servidor para administrarlo aquí para detalles

Dicho esto, la dependencia de agregar puede variar de acuerdo con su servidor / contenedor. Por ejemplo, en Wildfly la dependencia sería

  org.jboss.spec.javax.servlet jboss-servlet-api_3.1_spec provided  

Por eso, asegúrate de comprobar cómo tu contenedor ha proporcionado la implementación del servlet.

Necesitaba importar javaee-api también.

   javax javaee-api 7.0  

A menos que tenga el siguiente error:

 package javax.servlet.http does not exist javax.servlet.annotation does not exist javax.servlet.http does not exist ... 

En mi caso, al migrar una aplicación de Spring 3.1 hasta 3.2.7, mi solución fue similar a la de Matthias pero un poco diferente, por lo que la estoy documentando aquí:

En mi POM, encontré esta dependencia y la cambié de 6.0 a 7.0:

   javax javaee-web-api 7.0 provided  

Luego, más tarde en el POM, actualicé este complemento de 6.0 a 7.0:

   org.apache.maven.plugins maven-dependency-plugin 2.1   ...  ...   javax javaee-endorsed-api 7.0 jar       

tal vez no existe javaee-api-7.0.jar. descargue este tarro y en su proyecto haga clic derecho

  1. en su proyecto, haga clic derecho
  2. Construir camino
  3. Configurar ruta de comstackción
  4. Agregar tarros externos
  5. javaee-api-7.0.jar elegir
  6. Aplicar y terminar