2013-04-28 22 views
48

stavo cercando di implementare un filtro di accesso nella mia web app con JSF 2, seguendo questa guida:errore: pacchetto javax.servlet non esiste

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

dopo che ho compilato la mia filtro e aggiunto il. classe in "web-inf/classes" (come dice la guida) il filtro ha funzionato, ma ho messo l'url sbagliato per reindirizzare alla pagina di login in modo da eliminare il filter.class dalla cartella (web-inf/classes) e provato per compilare di nuovo il progetto, ma non è riuscito, e da allora im ottenere ottenere "pacchetto javax.servlet non esiste"

è strano perché prima stava funzionando un d ho javax.servlet nel mio pom.xml .. ho provato a pulire il progetto, ma niente.

questa è la mia classe di 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 <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. 
    } 
} 

questo è l'errore:

\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 

mia 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> 
+0

Utilizzare un nome di pacchetto valido come nell'esempio. Scrivi "pacchetto com.example;" invece di "pacchetto Bean;". Inoltre suggerisco per quanto riguarda le convenzioni di denominazione Java per iniziare il nome della tua classe con una lettera maiuscola (Filtro al posto di filtro). Ricevi ancora il messaggio di errore? –

+0

il nome del pacchetto è ok, è generato automaticamente in intellij quando creo una nuova classe all'interno della cartella "Bean", tutti i miei problemi sono iniziati dopo aver compilato filtro.java e aggiunto il filtro.class generato in web-inf/classes , dal momento che ho fatto questo im ottenendo questo errore. – user1462933

+0

Si prega di consultare questo collegamento per quanto riguarda le convenzioni di denominazione del pacchetto: http://docs.oracle.com/javase/tutorial/java/package/namingpkgs.html –

risposta

105

La dipendenza javax.servlet manca nella vostra pom.xml. Aggiungere quanto segue alla dipendenze-Node:

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

ho questo uno:.. javax.servlet jstl 1,2 in ogni caso, prima ho provato ad aggiungere quello che mi stai dicendo e ho ottenuto lo stesso errore .. ora ho aggiunto questo: javax JavaEE-api 6,0 vaso fornito e ha funzionato. aarggh, la cosa strana è che ha funzionato prima senza quello. grazie per il vostro aiuto – user1462933

+0

Ho aggiunto tale dipendenza al mio POM come-è, @Matthias, ma sto ancora ottenendo gli errori 'simbolo mancante' per quelle classi. Qualche trucco che dovrei sapere? –

+0

@KevinMeredith hai trovato una soluzione? In caso contrario, puoi pubblicare lo stacktrace completo? –

3

Ho solo messo questo codice nel mio pom.xml e ho eseguito il comando Maven installazione.

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

0

Nel mio caso, la migrazione di un app Primavera 3.1 fino a 3.2.7, la mia soluzione era simile a Matthias di, ma un po 'diverso - così perché mi sto documentando qui:

In il mio POM ho trovato questa dipendenza e lo cambiò 6,0-7,0:

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

Poi più tardi nel POM ho aggiornato questo plugin 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> 
0

La risposta fornita da @Matthias Herlitzius è per la maggior parte corretta. Solo per ulteriore chiarezza.

Il vaso servlet-api è meglio lasciare al server di gestire see here for detail

Detto questo, la dipendenza da aggiungere può variare in base al server/contenitore. Ad esempio in Wildfly la dipendenza sarebbe

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

Quindi, è necessario verificare come il contenitore ha fornito l'implementazione della servlet.

-3

forse non esiste javaee-api-7.0.jar. scaricare questo barattolo e sul progetto destra clik

  1. sul progetto tasto destro del mouse
  2. percorso di generazione
  3. Configura percorso di generazione
  4. Aggiungi Vasi esterni
  5. JavaEE-api-7.0.jar scegliere
  6. Applicare e finire
1

Ho anche avuto bisogno di importare javaee-api.

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

A meno che non mi sono l'errore seguente:

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