0

I want to open the stream from xml file, then use xsl tranformation in a jsp file. Everything seems correct, but I dont know why there is an exception when I getOutput from response.

This is my code

<%@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);
}

%>

The exception is : java.lang.IllegalStateException: getOutputStream() has already been called for this response

So how can i get rid of that. Thanks

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}"/>

別の例はこちら

tomcat examples.war Web アプリには jstl が含まれています。

于 2012-05-12T12:11:14.083 に答える
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 に答える
0

JSP が実行されると、応答ライターが開き、最初の文字がテキストとして書き込まれます (すべての <%@page ... %>ディレクティブ間の改行文字)。次に、応答の出力ストリームを開こうとしますが、JSP は既にそれを行っています。

この種の純粋な Java コードは、JSP タグを使用してマークアップを生成するための JSP に入れる必要はありません。そのためにサーブレットを使用します。

于 2012-05-12T11:58:48.003 に答える