在尝试为我的web.xml使用XML架构而不是弃用的DOCTYPE声明时,我收到了以下JasperException:
HTTP Status 500 - The absolute uri: http://java.sun.com/jsp/jstl/core
cannot be resolved in either web.xml or the jar files deployed with this
application
如果我使用此web.xml,应用程序将编译:
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>Archetype Created Web Application</display-name>
</web-app>
但是,如果我使用这个web.xml,我会得到JasperException:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1">
<display-name>CourseManagementJDBC</display-name>\
</web-app>
知道为什么只有弃用的格式才有效?
注意:这是针对Maven项目,并且正确声明了JSTL依赖项,以及JSP中的标记库:
的pom.xml:
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
JSP:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
他们都是正确的;什么给了?
答案 0 :(得分:0)
我终于找到了解决方案。默认情况下,出于某种原因(我想知道原因),Maven生成动态Web模块2.3版。 DTD当然是Servlet 2.3的标准,可能无法解析或评估我的基于XML的web.xml
文件。
我仍然没有100%清楚为什么将web.xml
更改为XSD会导致关于JSTL的JasperException,尽管我认为这与在Servlet 2.3之后的某些时候将JSTL与JSP集成有关 - 如果可能,请有人纠正或详细说明。
请参阅:https://stackoverflow.com/a/4928309/2879303
现在解决方案:
右键单击您的Maven项目,然后选择属性
导航至Project Facets并取消选中动态Web模块。应用 变化。
从版本下拉框中选择最新版本(截至 写作,这是3.1)。重新选择动态网络模块。应用更改。
右键单击您的Maven项目,然后选择 Maven - &gt;的更新 项目强>
您的项目现在应该能够正确解释web.xml
使用XSD声明。