2014-08-31 3 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 

Im собирается включить мой 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

у вас есть сервлет-api.jar в вашем пути к классам? – SparkOn

+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

+0

Я просто нажал на пакеты и он показывает, что у меня есть JavaServerFaces -> Libraries -> javax -> servlet -> Существует интерфейс фильтра ... и под http есть интерфейс для HttpServletRequest. Я также попал в компиляцию по отдельному классу, который имеет проблемы, и теперь он говорит мне, что java: package javax.servlet не существует. – Justin

ответ

17

сервлет-api.jar является частью вашего сервера (Tomcat в данном случае). Вам нужно либо указать ссылку на эту банку в своей POM и пометить ее в области «предоставлено», либо (если по какой-то причине вы не используете maven) вам нужно добавить ее в свой путь к классам (библиотеки вашего веб-модуля в вашем проект).

Вероятно, возможно, что ваш установщик Tomcat или maven repo отличается после переустановки HD. Это похоже на экологическую проблему.

+0

Я добавил его к своему пути класса вручную, и он разрешил импорт Intellij, но если я скомпилировал код, он сказал бы, что javax.servlet не является допустимой ссылкой. Или что-то вдоль этих линий. Сказать, что не удалось найти javax.servlet – Justin

+0

Также попытался переустановить Intellij. Но безрезультатно. Попытка переустановить JDK и maven и посмотреть, что происходит, поскольку я просто делаю все возможное. – Justin

+0

Переустановка не имела никакого эффекта. – Justin

2

Похоже, что что-то было испорчено при импорте проекта. Я сделал новый проект и просто скопировал все, и он работал отлично. Импорт выполнялся там, где файлы jar не могли быть найдены. Не знаю, почему .... Спасибо за помощь всем!

1

Я нашел ту же проблему и только что зафиксировал ее сегодня. Хотя я объявил javax.servlet-api в моем pom.xml, но все еще получил эту проблему. Затем я исправил его, добавив файл javax.servlet-api: 3.10.jar в путь к классу проекта.

enter image description here

9

Как кто-то говорил об этом выше - эти библиотеки являются частью сервера приложений, поэтому они не должны быть развернуты на сервере других библиотек, как Spring и так далее. Вам нужно ссылаться на них как на предоставленный ресурс.

Если вы не используете Maven для своего проекта (т. Е. Учебники и т. Д.), Вы можете перейти к настройкам вашей структуры проекта/модулям/вашему модулю/зависимостям .. и вниз под списком зависимостей - это небольшой символ плюса (+), где вы можете выбрать «Библиотека», после чего появится всплывающее окно с библиотеками серверов приложений. Его следует выбрать, как указано ниже.

Application Server Libraries Dialog

+0

работал со мной !! Спасибо! @ Jiří Vlašimský –

Смежные вопросы