web-dev-qa-db-fra.com

IntelliJ IDEA ne peut pas résoudre l'importation javax.servlet. *;

Mon projet fonctionnait donc parfaitement et j'ai décidé d'installer un nouveau disque dur (SSD). Je n'arrive pas à le faire fonctionner correctement.

J'utilise Intellij et toutes ces importations ont des problèmes.

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.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

Ils disent ne peuvent pas résoudre le symbole.

J'ai aussi ceci dans mon web.xml.

<filter>
    <filter-name>LoginFilter</filter-name>
    <filter-class>com.mkyong.LoginFilter</filter-class>
</filter>

il est dit

com.mkyong.LoginFilter is not assignable to javax.servlet.Filter

Je vais inclure mon fichier web.xml au cas où quelqu'un en aurait besoin.

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns="http://Java.Sun.com/xml/ns/javaee" 
xmlns:web="http://Java.Sun.com/xml/ns/javaee/web-app_2_5.xsd" 
xsi:schemaLocation="http://Java.Sun.com/xml/ns/javaee 
http://Java.Sun.com/xml/ns/javaee/web-app_2_5.xsd" 
id="WebApp_ID" version="2.5">

<display-name>JavaServerFaces</display-name>

<resource-ref>
<description>MySQL Datasource example</description>
<res-ref-name>jdbc/mkyongdb</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>


<!-- Change to "Production" when you are ready to deploy -->
<context-param>
<param-name>javax.faces.PROJECT_STAGE</param-name>
<param-value>Development</param-value>
</context-param>

<!-- Welcome page -->
<welcome-file-list>
<welcome-file>faces/default.xhtml</welcome-file>
</welcome-file-list>

<!-- JSF mapping -->
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>

  <!-- Map these files with JSF -->
 <servlet-mapping>
  <servlet-name>Faces Servlet</servlet-name>
  <url-pattern>/faces/*</url-pattern>
 </servlet-mapping>

 <servlet-mapping>
   <servlet-name>Faces Servlet</servlet-name>
   <url-pattern>*.jsf</url-pattern>
 </servlet-mapping>

<servlet-mapping>
  <servlet-name>Faces Servlet</servlet-name>
  <url-pattern>*.faces</url-pattern>
</servlet-mapping>

<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.xhtml</url-pattern>
</servlet-mapping>

<filter>
    <filter-name>LoginFilter</filter-name>
    <filter-class>com.mkyong.LoginFilter</filter-class>
</filter>
<!-- Set the login filter to secure all the pages in the /secured/* path of the application  -->
<filter-mapping>
    <filter-name>LoginFilter</filter-name>
    <url-pattern>/secured/*</url-pattern>
</filter-mapping>

<!-- By default go to secured welcome page -->
<welcome-file-list>
    <welcome-file>secured/welcome.xhtml</welcome-file>
</welcome-file-list>

</web-app>

C'est l'erreur que j'obtiens maintenant.

   javax.servlet.ServletException: Servlet.init() for servlet Faces Servlet threw exception
org.Apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.Java:504)
org.Apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.Java:79)
org.Apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.Java:610)
org.Apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.Java:534)
org.Apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.Java:1081)
org.Apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.Java:658)
org.Apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.Java:277)
    org.Apache.Tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.Java:2381)
    org.Apache.Tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.Java:2370)
    Java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.Java:1142)
    Java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.Java:617)
    org.Apache.Tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.Java:61)
    Java.lang.Thread.run(Thread.Java:745)
root cause

Java.lang.IllegalStateException: Application was not properly initialized at startup, could not    find Factory: javax.faces.context.FacesContextFactory
javax.faces.FactoryFinder$FactoryManager.getFactory(FactoryFinder.Java:800)
javax.faces.FactoryFinder.getFactory(FactoryFinder.Java:302)
javax.faces.webapp.FacesServlet.init(FacesServlet.Java:186)
org.Apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.Java:504)
org.Apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.Java:79)
org.Apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.Java:610)
org.Apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.Java:534)
org.Apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.Java:1081)
org.Apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.Java:658)
org.Apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.Java:277)
org.Apache.Tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.Java:2381)
org.Apache.Tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.Java:2370)
Java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.Java:1142)
Java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.Java:617)
org.Apache.Tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.Java:61)
Java.lang.Thread.run(Thread.Java:745)

J'utilisais aussi Apache Tomcat 8 au début, puis je me suis dit que c'était peut-être le problème et je l'ai changé en 7, puis en 6. Si vous avez besoin d'autre chose, faites-le-moi savoir!

voici le POM.xml comme demandé.

  <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>com.mkyong.common</groupId>
 <artifactId>JavaServerFaces</artifactId>
 <packaging>war</packaging>
 <version>1.0-SNAPSHOT</version>
 <name>JavaServerFaces Maven Webapp</name>
 <url>http://maven.Apache.org</url>

<repositories>
 <repository>
   <id>Java.net.m2</id>
   <name>Java.net m2 repo</name>
   <url>http://download.Java.net/maven/2</url>
 </repository>
</repositories>

<dependencies>

  <dependency>
      <groupId>org.springframework.security</groupId>
      <artifactId>spring-security-web</artifactId>
      <version>3.2.5.RELEASE</version>
  </dependency>

<!-- MySQL database driver -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-Java</artifactId>
    <version>5.1.9</version>
</dependency>

<!-- Spring framework --> 
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring</artifactId>
    <version>2.5.6</version>
</dependency>

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-web</artifactId>
    <version>2.5.6</version>
</dependency>


<!-- For Servlet Container like Tomcat -->
<!-- http://download.Java.net/maven/2 -->
<dependency>
  <groupId>com.Sun.faces</groupId>
  <artifactId>jsf-api</artifactId>
  <version>2.1.0-b03</version>
</dependency>



<!-- EL 2.2 to support method parameter in EL -->
<dependency>
  <groupId>org.glassfish.web</groupId>
  <artifactId>el-impl</artifactId>
  <version>2.2</version>
</dependency>


<!-- http://repo1.maven.org/maven2/ -->
<dependency>
  <groupId>javax.servlet</groupId>
  <artifactId>jstl</artifactId>
  <version>1.2</version>
</dependency>

  <dependency>
      <groupId>javax.servlet.jsp</groupId>
      <artifactId>jsp-api</artifactId>
      <version>2.1</version>
  </dependency>

  <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>servlet-api</artifactId>
      <version>2.5</version>
  </dependency>


</dependencies>


 <build>
   <finalName>JavaServerFaces</finalName>

  <plugins>
     <plugin>
       <groupId>org.Apache.maven.plugins</groupId>
       <artifactId>maven-compiler-plugin</artifactId>
       <version>2.3.1</version>
       <configuration>
           <source>1.6</source>
           <target>1.6</target>
       </configuration>
   </plugin>
</plugins>

28
Justin

Servlet-api.jar fait partie de votre serveur (Tomcat dans ce cas). Vous devez soit indiquer une référence à ce fichier dans votre POM et le marquer dans le champ "fourni", soit (si vous n'utilisez pas maven pour une raison quelconque) vous devez l'ajouter à votre chemin de classe projet).

Il est possible que votre installation de Tomcat avec forder ou maven repo soit différente après la réinstallation de votre disque dur. Cela ressemble à une question environnementale.

21
Filip

Comme quelqu'un l'a mentionné ci-dessus - ces bibliothèques font partie d'un serveur d'applications, elles ne doivent donc pas être déployées sur le serveur, contrairement à d'autres bibliothèques telles que Spring, etc. Vous devez les référencer en tant que ressource fournie. 

Si vous n'utilisez pas Maven pour votre projet (c.-à-d. Tutoriels, etc.), vous pouvez aller à vos paramètres de structure de projet/Modules/votre module/Dépendances .. et sous la liste des dépendances se trouve un petit sélectionnez "Bibliothèque" et ensuite, la fenêtre contextuelle contenant les bibliothèques du serveur d'applications apparaîtra. Il devrait être sélectionné comme prévu par la suite. 

 Application Server Libraries Dialog

18
Jiri Vlasimsky

J'ai trouvé le même problème et je viens de le réparer aujourd'hui. Bien que j’ai déclaré javax.servlet-api dans mon fichier pom.xml mais que j’ai toujours eu le problème. Ensuite, je l'ai corrigé en ajoutant le fichier javax.servlet-api: 3.10.jar dans le chemin d'accès aux classes du projet.

 enter image description here

2
Luan Vo

Il semble que quelque chose ait été gâché lors de l'importation du projet. J'ai fait un nouveau projet et juste copié le tout et cela a fonctionné parfaitement. L'importation permettait de ne pas trouver les fichiers jar. Je ne sais pas pourquoi .... Merci à tous pour votre aide!

2
Justin

Vous utilisez dans le terminal mvn clean install  

Cette commande télécharge toutes les dépendances, après, vous allez dans "Projet Maven" et prenez "Réimporter tout Projet Maven"

enter image description hereenter image description here

1
Yani Morales