错误:包javax.servlet不存在

我试图在我的web应用程序中使用jsf 2实现loginfilter,遵循本指南:

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

在编译我的filter,并在“web-inf / classes”(如指南所述)中添加.class后,filter工作,但我把错误的urlredirect到login页面,所以我从文件夹中删除filter.class (networkinginf /类),并试图再次编译该项目,但它失败了,从那时起我得到“包javax.servlet不存在”

这是奇怪的,因为在它工作之前,我有我的pom.xml中的javax.servlet ..我试图清理项目,但没有。

这是我的filter类:

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 <init-param> 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. } } 

这是错误的:

 \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 

我的pom.xml:

 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>Frutemu</groupId> <artifactId>Frutemu</artifactId> <packaging>war</packaging> <version>1.0-SNAPSHOT</version> <name>Frutemu Maven Webapp</name> <url>http://maven.apache.org</url> <repositories> <repository> <id>prime-repo</id> <name>Prime Repo</name> <url>http://repository.primefaces.org</url> </repository> </repositories> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> <dependency> <groupId>javax.ejb</groupId> <artifactId>ejb-api</artifactId> <version>3.0</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.primefaces</groupId> <artifactId>primefaces</artifactId> <version>3.5</version> </dependency> <dependency> <groupId>org.primefaces.themes</groupId> <artifactId>all-themes</artifactId> <version>1.0.9</version> </dependency> <dependency> <groupId>javax.faces</groupId> <artifactId>jsf-api</artifactId> <version>2.0</version> <scope>compile</scope> </dependency> <dependency> <groupId>com.sun.faces</groupId> <artifactId>jsf-impl</artifactId> <version>2.0.2-b10</version> <scope>compile</scope> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> <!-- MySQL database driver --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.21</version> </dependency> <dependency> <groupId>org.glassfish.web</groupId> <artifactId>el-impl</artifactId> <version>2.2.1-b04</version> <scope>provided</scope> </dependency> <!-- OpenJPA framework --> <dependency> <groupId>org.apache.openjpa</groupId> <artifactId>openjpa-all</artifactId> <version>2.2.0</version> </dependency> <dependency> <groupId>com.microsoft.sqlserver</groupId> <artifactId>sqljdbc4</artifactId> <version>4.0</version> </dependency> <dependency> <groupId>net.sf.jasperreports</groupId> <artifactId>jasperreports</artifactId> <version>4.1.2</version> </dependency> </dependencies> <build> <finalName>Frutemu</finalName> <plugins> <!-- Open Jpa --> <plugin> <groupId>org.apache.openjpa</groupId> <artifactId>openjpa-maven-plugin</artifactId> <version>2.2.0</version> <configuration> <includes>**/model/*.class</includes> <addDefaultConstructor>true</addDefaultConstructor> <enforcePropertyRestrictions>true</enforcePropertyRestrictions> </configuration> <executions> <execution> <id>enhancer</id> <phase>process-classes</phase> <goals> <goal>enhance</goal> </goals> </execution> </executions> </plugin> <!-- Plugin para levantar una instancia de Tomcat 7 liviana, única para este proyecto --> <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <version>2.0</version> <configuration> <url>http://127.0.0.1:8080/manager/text</url> <server>TomcatServer</server> <path>/Frutemu</path> </configuration> </plugin> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>jasperreports-maven-plugin</artifactId> <executions> <execution> <goals> <goal>compile-reports</goal> </goals> </execution> </executions> <dependencies> <!--note this must be repeated here to pick up correct xml validation --> <dependency> <groupId>net.sf.jasperreports</groupId> <artifactId>jasperreports</artifactId> <version>4.1.2</version> </dependency> </dependencies> </plugin> </plugins> </build> </project> 

您的pom.xml中缺lessjavax.servlet依赖关系。 将以下内容添加到依赖关系 – 节点:

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

我只把这个代码放在我的pom.xml中,然后执行命令maven install。

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

在我的情况下,将Spring 3.1应用程序迁移到3.2.7,我的解决scheme与Matthias的类似,但有点不同 – 因此我在这里logging它:

在我的POM中,我发现这个依赖关系并将其从6.0更改为7.0:

  <dependency> <groupId>javax</groupId> <artifactId>javaee-web-api</artifactId> <version>7.0</version> <scope>provided</scope> </dependency> 

之后在POM中,我将这个插件从6.0升级到了7.0:

  <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <version>2.1</version> <executions> <execution> ... <configuration> ... <artifactItems> <artifactItem> <groupId>javax</groupId> <artifactId>javaee-endorsed-api</artifactId> <version>7.0</version> <type>jar</type> </artifactItem> </artifactItems> </configuration> </execution> </executions> </plugin> 

@Matthias Herlitzius提供的答案大部分是正确的。 只是为了更清楚。

servlet-api jar最好留给服务器来pipe理, 在这里查看详细信息

这就是说,依赖添加可能会根据您的服务器/容器而有所不同。 例如在蜻蜓的依赖将是

 <dependency> <groupId>org.jboss.spec.javax.servlet</groupId> <artifactId>jboss-servlet-api_3.1_spec</artifactId> <scope>provided</scope> </dependency> 

因此,请仔细检查您的容器如何提供servlet实现。

我也需要导入javaee-api。

  <dependency> <groupId>javax</groupId> <artifactId>javaee-api</artifactId> <version>7.0</version> </dependency> 

除非我有以下错误:

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

也许不存在javaee-api-7.0.jar。 下载这个jar子,并在你的项目上右键

  1. 在你的项目上点右键
  2. build立path
  3. configuration构buildpath
  4. 添加外部jar子
  5. javaee-api-7.0.jarselect
  6. 申请并完成