Метод 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>