52

So I had my project working perfectly and I decided to install a new hard drive (SSD) and now I cannot get it to run correctly.

I am using Intellij and am having all of these imports have issues.

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;

They are saying cannot resolve symbol.

Also in my web.xml I have this.

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

it states

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

Im going to include my web.xml just in case someone needs it.

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

This is the error I am getting now.

   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)

I was also using apache tomcat 8 at first then I thought that might be the issue and I changed it to 7 then to 6. If you need anything else please let me know!

here is the POM.xml as requested.

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

10
  • 1
    do you have the servlet-api.jar in your classpath?
    – SparkOn
    Commented Aug 31, 2014 at 5:23
  • To be honest I am not 100 percent sure how to check that.... I mean I see there are 3 different xml files in my library folder by that name Maven_javax_el_el_api_2_2, Maven_javax_servlet_jsp_jsp_api_2_1, Maven_javax_servlet_jstl_1_2, and Maven_javax_servlet_servlet_api_2_5
    – Justin
    Commented Aug 31, 2014 at 6:55
  • I Just clicked on Packages and it shows that I have under JavaServerFaces -> Libraries -> javax -> servlet -> There is a Filter Interface.... and under the http there is a interface for HttpServletRequest. I also hit compile on the single class that is having the issues and it is now telling me that java: package javax.servlet does not exist.
    – Justin
    Commented Aug 31, 2014 at 7:19
  • Do you have the JSF library in your tomcat classpath? in the deployed war under "WEB-INF/libs/" or in tomcat lib folder?
    – Jens
    Commented Aug 31, 2014 at 8:31
  • if you are using maven posting pom.xml will be helpfulor specify the libraries you are using
    – SparkOn
    Commented Aug 31, 2014 at 8:55

9 Answers 9

57

As somebody mentioned it above - these libraries are part of an application server so they should not be deployed to the server as other libraries like Spring and so on. You need reference them as a provided resource.

If you are not using Maven for your project (i.e. tutorials etc.) you can go to your Project Structure settings / Modules / your module / Dependencies .. and down under the list of dependendcies is a small plus symbol (+) where you can select "Library" and after that the popup with Application Server Libraries will show. It should be selected as provided afterwards.

Application Server Libraries Dialog

1
  • Hi, thank you for this answer it helped me a lot. However I had to first mark the library scope as "Compile" in order to be able to import it in my source code. And after that I came back and changed the scope to "Provided"
    – Moussa
    Commented Apr 20, 2022 at 10:00
31

The servlet-api.jar is part of your server (Tomcat in this case). You need to either state a reference to that jar in your POM and mark it in 'provided' scope or (if you are not using maven for some reason) you need to add it to your classpath (the libraries of your web module in your project).

The chances are perhaps that your Tomcat installation forder or maven repo is different after your HD reinstall. It seems to be like an environmental issue.

4
  • 1
    I added it to my class path manually and it did resolve the Intellij red imports but then if I compiled the code it would say that the javax.servlet is not a valid reference. Or something along those lines. Saying it couldnt find the javax.servlet
    – Justin
    Commented Aug 31, 2014 at 15:39
  • Also tried reinstalling Intellij. To no avail. Going to try to reinstall JDK and maven and see what happens since I am just doing anything possible.
    – Justin
    Commented Aug 31, 2014 at 15:40
  • Reinstalling had no effect.
    – Justin
    Commented Aug 31, 2014 at 15:52
  • 1
    be sure to check the Output Layout tab under Module Settings>Artifacts - it turned out that I needed to manually remove the Tomcat/lib jars from WEB-INF/lib. Intellij automatically added those jars to the output artifact under WEB-INF/lib when I included the global Tomcat libs as a module dependency - even when they were indicated as "Provided" Commented Feb 14, 2016 at 21:23
6

What worked for me is click download/sources and documentation -> reload maven projects from here enter image description here

1
  • reload the maven works for me. Commented Jun 22, 2022 at 14:29
5

I found the same issue and just fixed it today. Although i have declared javax.servlet-api in my pom.xml but still got the issue. Then I fixed it by adding javax.servlet-api:3.10.jar file into project's class path.

enter image description here

4

You use into terminal mvn clean install

This command download all dependency, after, you go to "Maven Project" and take "Reimport All Maven Project"

enter image description here enter image description here

2

It appears that something was messed up in importing the project. I made a new project and just copied everything over and it worked perfectly. Importing was making it where the jar files could not be found. Not sure why.... Thanks for the help everyone!

1

I know that my answer to this question is a bit late, but, in my case, it was precisely because of the lack of SDK.

I solved the problem by configuring this in the "Project Structure" menu.

So, like me, others may also have the same problem in the future and that was the simplest way to solve.

File/Project structure...

1

add this in your gradle file

implementation 'org.springframework.boot:spring-boot-starter-web'

0

In my list of modules (ctrl+shift+alt+s and navigate to modules), my tomcat's scope was set to runtime. I switched it to compile time and it worked.

Not the answer you're looking for? Browse other questions tagged or ask your own question.