Метод getJspApplicationContext (ServletContext) undefined для типа JspFactory

Это то, что я получил на экране браузера при попытке запустить JSP файл.

Метод getJspApplicationContext (ServletContext) undefined для типа JspFactory

StackTrace:

org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:92)         org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:330)         org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:439)         org.apache.jasper.compiler.Compiler.compile(Compiler.java:334)         org.apache.jasper.compiler.Compiler.compile(Compiler.java:312)         org.apache.jasper.compiler.Compiler.compile(Compiler.java:299)         org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:586)         org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:317)         org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)         org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)         javax.servlet.http.HttpServlet.service(HttpServlet.java:856)

И исключение яшмы бросается в окно Tomcat, когда я его запускал.

Ответы

Ответ 1

Метод getJspApplicationContext (ServletContext) undefined для типа JspFactory

Этот метод Tomcat 6.0).

Вы указали неверную версию сервлета в web.xml. JSP 2.1 идет рука об руку с Servlet 2.5, поэтому ваш web.xml должен быть объявлен как минимум по спецификации Servlet 2.5 (для этого вам все равно нужен сервлет-контейнер Servlet 2.5/JSP 2.1).

Вы дублировали старые версии приложений для конкретных приложений в webapp /WEB-INF/lib, например servlet-api.jar, jsp-api.jar и т.д. Вы должны никогда делать это. Это приведет только к столкновению при загрузке. Избавьтесь от них в своем веб-проекте и оставьте/отложите их там на сервере приложений.

Ответ 2

<dependency>
   <groupId>javax.servlet</groupId>
   <artifactId>servlet-api</artifactId>
   <version>${servlet.version}</version>
   <scope>provided</scope>
</dependency> 

также устраняет проблемы

Ответ 3

Метод getJspApplicationContext (ServletContext) равен undefined для тип JspFactory

Это также может произойти, когда ваш проект требует ссылки на время выполнения сервера:

  • Щелкните правой кнопкой мыши на своем проекте в Eclipse "Project Explorer"
  • Выберите "Путь сборки:: Настроить путь сборки"
  • Перейдите на вкладку "Библиотеки".
  • Нажмите "Добавить библиотеку"
  • Выберите "Время выполнения сервера" и нажмите "Далее"
  • Выберите "Apache Tomcat 7" или независимо от версии вашего сервера.

Примечание. Эта ошибка также может произойти для сборки ANT, и в этом случае вам нужно ссылаться на целевую среду выполнения в файле ANT build.xml... Ниже приведены ссылки на локальную установку tomcat и используются его "lib" папки при выполнении компиляции:

<project name="tomcat-demo" default="compile" basedir=".">
    <property name="tomcat-home" value="/path/to/your/tomcat/apache-tomcat-7" />

    <path id="project-classpath">
        <fileset dir="WebContent/WEB-INF/lib" includes="*.jar" />
        <fileset dir="${tomcat-home}/bin" includes="*.jar" />
        <fileset dir="${tomcat-home}/common/lib" includes="*.jar" />
        <fileset dir="${tomcat-home}/server/lib" includes="*.jar" />
    </path>
   ...
</project>

Отвязано этот URL:

Ответ 4

Для Maven мне также пришлось добавить зависимость jsp-api как предоставленную банку следующим образом: (Некоторая другая зависимость тянула ее, я никогда не мог понять, какой из них, но это исправлено)

<dependency>
  <groupId>javax.servlet</groupId>
  <artifactId>servlet-api</artifactId>
  <version>2.5</version>
  <scope>provided</scope>
</dependency>   
<dependency>
  <groupId>javax.servlet</groupId>
  <artifactId>jsp-api</artifactId>
  <version>2.0</version>
  <scope>provided</scope>
</dependency>