JasperException:绝对的uri无法解决

时间:2016-01-27 10:23:51

标签: java xml maven

在尝试为我的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" %>

他们都是正确的;什么给了?

1 个答案:

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

现在解决方案:

  1. 右键单击您的Maven项目,然后选择属性

  2. 导航至Project Facets并取消选中动态Web模块。应用 变化。

  3. 从版本下拉框中选择最新版本(截至 写作,这是3.1)。重新选择动态网络模块。应用更改。

  4. 右键单击您的Maven项目,然后选择 Maven - &gt;的更新 项目

  5. 您的项目现在应该能够正确解释web.xml 使用XSD声明。