2014-08-31 252 views
18

所以我讓我的項目工作完美,我決定安裝一個新的硬盤(SSD),現在我無法讓它正常運行。IntelliJ IDEA無法解析導入javax.servlet。*;

我正在使用Intellij,並且所有這些導入都有問題。

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; 

他們說不能解決符號。

也在我的web.xml中,我有這個。

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

它指出

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

,我要去包括我的web.xml文件,以防萬一有人需要它。

<?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> 

這是我現在得到的錯誤。

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) 

我也使用Apache Tomcat 8起初然後我想這可能是這個問題,我改成了7再到6.如果您有什麼需要請讓我知道!

這裏是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>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> 

+1

你在你的類路徑中有servlet-api.jar嗎? – SparkOn 2014-08-31 05:23:18

+0

說實話,我不是100%確定如何檢查....我的意思是我看到有3個不同的xml文件在我的庫文件夾中,名稱爲Maven_javax_el_el_api_2_2,Maven_javax_servlet_jsp_jsp_api_2_1,Maven_javax_servlet_jstl_1_2和Maven_javax_servlet_servlet_api_2_5 – Justin 2014-08-31 06:55:40

+0

我只需點擊Packages和它表明我有JavaServerFaces - > Libraries - > javax - > servlet - >有一個Filter Interface ....並且在http下有一個用於HttpServletRequest的接口。我還打開了具有問題的單個類的編譯,現在它告訴我java:package javax.servlet不存在。 – Justin 2014-08-31 07:19:07

回答

17

該servlet-api.jar文件是服務器(Tomcat的在這種情況下)的一部分。您需要在POM中聲明該jar的引用,並將其標記在'provided'範圍內,或者(如果您因某種原因未使用maven),則需要將其添加到您的classpath中(您的web模塊庫項目)。

您的高清重裝後,您的Tomcat安裝forder或maven repo的機會可能不同。這似乎是一個環境問題。

+0

我手動添加它到我的類路徑,它確實解決了Intellij紅色導入,但是如果我編譯了代碼,它會說javax.servlet不是有效的引用。或類似的規定。說它找不到javax.servlet – Justin 2014-08-31 15:39:38

+0

也試着重新安裝Intellij。無濟於事。試着重新安裝JDK和maven,看看會發生什麼,因爲我只是在做任何可能的事情。 – Justin 2014-08-31 15:40:13

+0

重新安裝沒有效果。 – Justin 2014-08-31 15:52:17

2

在導入項目時看起來有些混亂。我做了一個新項目,只是複製了一切,並且完美運行。導入使得它無法找到jar文件。不知道爲什麼....感謝大家的幫助!

1

我發現了同樣的問題,今天就修好了。雖然我已經在我的pom.xml中聲明瞭javax.servlet-api,但仍然遇到了問題。然後我通過將javax.servlet-api:3.10.jar文件添加到項目的類路徑中來修復它。

enter image description here

9

至於有人提到它上面 - 這些庫的應用程序服務器的一部分,所以他們不應該被部署到服務器上其他的庫如Spring等。您需要將它們作爲提供的資源參考。

如果你沒有爲你的項目使用Maven(即教程等),你可以去你的項目結構設置/模塊/你的模塊/依賴項..並在依賴列表下是一個小加號(+ )您可以在其中選擇「Library」,然後顯示Application Server Libraries的彈出窗口。應該按照以後提供的方式進行選擇。

Application Server Libraries Dialog

+0

對我有用!謝謝! @JiříVlašimský – 2018-03-06 09:59:19