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

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

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

Трассировки стека:

org.apache.jasper.compiler.DefaultErrorHandler.javacError (DefaultErrorHandler.java:92) org.apache.jasper.compiler.ErrorDispatcher.javacError (ErrorDispatcher.java:330) org.apache.jasperTCompile.JDateTCCile.GileCile.JileClayCile. 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:31ache.j.ap.j.ap.p.asap.per.jap.per.jap.per.jap.per.jap.per.jap.per.jap.per.jap.per.j.ap.serg.per.j.ap.p.JspServlet.serviceJspFile(JspServlet.java:342) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267) javax.servlet.http.HttpServlet.service(HttpServlet.java:8)

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

4 ответа

Решение

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

Этот метод был введен в JSP 2.1. Есть 3 причины этой проблемы:

  1. Вы используете слишком старую версию контейнера JSP (например, вам нужен как минимум Tomcat 6.0).

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

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

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

также исправляет проблемы

Для Maven мне также пришлось добавить зависимость jsp-api в качестве предоставленного jar, например так: (Какая-то другая зависимость вытягивала ее, я никогда не мог понять, какая именно, но это исправило ее)

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

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

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

  • Щелкните правой кнопкой мыши свой проект в Eclipse в "Project Explorer"
  • Выберите "Путь сборки | Настроить путь сборки"
  • Нажмите на вкладку "Библиотеки"
  • Нажмите "Добавить библиотеку"
  • Выберите "Server Runtime" и нажмите "Next"
  • Выберите "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:

Другие вопросы по тегам