Метод 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 причины этой проблемы:
Вы используете слишком старую версию контейнера JSP (например, вам нужен как минимум Tomcat 6.0).
Вы объявили неверную версию сервлета в
web.xml
, JSP 2.1 идет рука об руку с сервлетом 2.5, поэтому вашweb.xml
по крайней мере, должен быть объявлен в соответствии со спецификацией Servlet 2.5 (для этого вам все еще нужен сервлет-контейнер Servlet 2.5 / JSP 2.1).Вы продублировали библиотеки старых версий приложений, специфичных для сервера приложений, в веб-приложение
/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: