JSTL c:使用xml文件导入奇怪的行为

时间:2014-07-15 04:13:39

标签: spring-mvc jstl

我正在尝试使用c:import导入XML转换的xml文件。我看到了奇怪的行为。当我尝试使用相对引用导入xml文件时,我在变量中得到了非解释的JSP模板文件。

环境:Tomcat 8.09,Spring 3,JSTL 1.2

这是我的页面定义,当域添加到c:import:

时,它可以正常工作
     <%@page contentType="text/html;charset=UTF-8" language="java" %>
<%-- This is the side bar for the admin application --%>

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %>
<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles" %>

<tiles:importAttribute name="currentPage" />
<c:import url="http://localhost:8080/assets/xml/admin/shared/sideBar.xsl" charEncoding="UTF-8" var="xslt" />
<c:import url="http://localhost:8080/assets/xml/admin/shared/sideBar.xml" charEncoding="UTF-8" var="xml" />
<x:transform xml="${xml}" xslt="${xslt}">
    <x:param name="currentPage" value="${currentPage}" />
</x:transform>

但是如果我改变c:import来导入这样的相对链接:

<c:import url="/assets/xml/admin/shared/sideBar.xsl" charEncoding="UTF-8" var="xslt" />
<c:import url="/assets/xml/admin/shared/sideBar.xml" charEncoding="UTF-8" var="xml" />

它打破了,如果我打印出值,我会看到一个奇怪的行为,其中xml&amp; xslt变量包含来自我的一个切片模板的JSP代码(但它没有填充)。我无法解释为什么它甚至试图解析切片模板,我完全禁用了安全性,并且可以在新的浏览器窗口中点击这些URL中的每一个都没问题。

我更喜欢使用相对链接来实现可移植性,所以任何人都可以解释为什么会发生这种情况以及如何修复?

1 个答案:

答案 0 :(得分:0)

如果要导入的文件与嵌入其中的文件位于相同的上下文中,则不必在c:import中指定上下文。因此,对于您的应用程序,如果 assets 是上下文,则可以将import指定为:

    <c:import url="/xml/admin/shared/sideBar.xsl" charEncoding="UTF-8" var="xslt"/>
    <c:import url="/xml/admin/shared/sideBar.xml" charEncoding="UTF-8" var="xml"/>