0

我想从 xml 文件打开流,然后在 jsp 文件中使用 xsl 转换。一切似乎都是正确的,但我不知道为什么当我从响应中获取输出时会出现异常。

这是我的代码

<%@page import="javax.xml.transform.*" %>
<%@page import="javax.xml.transform.stream.*" %>
<%@page import="java.io.*" %>
<%

StreamSource xmlSource = new StreamSource( new File(application.getRealPath("foo/cd.xml")));
StreamSource xsltSource = new StreamSource( new File(application.getRealPath("foo/cd.xsl")));

StreamResult fileResult = new StreamResult(response.getOutputStream());
try {
    // Load a Transformer object and perform the transformation
    TransformerFactory tfFactory = TransformerFactory.newInstance();
    Transformer tf = tfFactory.newTransformer(xsltSource);
    tf.transform(xmlSource, fileResult);
} catch(TransformerException e) {
    throw new ServletException("Transforming XML failed.", e);
}

%>

例外是:java.lang.IllegalStateException: getOutputStream() 已经为此响应调用

那么我该如何摆脱它。谢谢

4

3 回答 3

1

Jstl 包括用于进行 xsl 转换的 jsp 标签。这使您可以选择执行转换而不必担心输出流。

Sun在这里提供了一个转换示例。因此,如果您的战争中有 jstl:

<%@ taglib prefix="x" uri="http://java.sun.com/jstl/xml" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>

<c:import url="foo/cd.xml" var="xmldocument"/>
<c:import url="foo/cd.xsl" var="xslt"/>
<x:transform xml="${xmldocument}" xslt="${xslt}"/>

另一个例子是here

tomcat examples.war Web 应用程序包含 jstl。

于 2012-05-12T12:11:14.083 回答
0

执行 JSP 时,它会打开响应编写器以将其第一个字符写为文本(所有 <%@page ... %>指令之间的换行符)。然后您尝试打开响应的输出流,但 JSP 之前已经完成了它。

这种纯 Java 代码没有理由放在 JSP 中,JSP 的目的是使用 JSP 标签生成标记。使用 servlet 来做到这一点。

于 2012-05-12T11:58:48.003 回答
0

我正在尝试pd40的解决方案,但它不起作用。这些库导入代替了:

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

请参阅:https ://stackoverflow.com/a/19434154/1590763

于 2013-10-17T18:17:42.293 回答