2014-11-07 44 views
3

我有以下controller method它成功發送xml文本到spring mvc應用程序的Web瀏覽器。問題在於它只是將文本發送到瀏覽器而不是格式化,因此瀏覽器中的輸出只是一堆混雜在一起的未格式化文本。 如何調整以下controller method,以便它還將xsl樣式表style.xsl發送到用戶的網絡瀏覽器,並使用戶網絡瀏覽器中的內容成功格式化爲style.xsl服務xsl除了XML到網絡瀏覽器

這是我到目前爲止有:

@RequestMapping(value = "actionName.xml", method = RequestMethod.GET) 
public HttpEntity<byte[]> getXml(ModelMap map, HttpServletResponse response) { 
    String xml = ""; 
    String inputpath = "path\\to\\"; 
    String filename = "somefile.xml"; 
    String filepluspath = inputpath+filename; 
    StreamSource source = new StreamSource(filepluspath); 
    try { 
     StringWriter writer = new StringWriter(); 
     StreamResult result = new StreamResult(writer); 
     TransformerFactory tFactory = TransformerFactory.newInstance(); 
     Transformer transformer = tFactory.newTransformer(); 
     transformer.transform(source,result); 
     xml = writer.toString(); 
    } catch (Exception e) {e.printStackTrace();} 
    byte[] documentBody = xml.getBytes(); 
    HttpHeaders header = new HttpHeaders(); 
    header.setContentType(new MediaType("application", "xml")); 
    header.setContentLength(documentBody.length); 
    return new HttpEntity<byte[]>(documentBody, header); 
} 
+0

請注意['application/xml'在MediaType中預先定義](http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/http/MediaType.html#APPLICATION_XML ) 已經。另外,如果「somefile.xml」是靜態的,配置Spring將其作爲靜態資源而不是讀寫控制器內的響應會更容易和更高效。 – kryger 2014-11-07 00:55:13

+0

@kryger你是說如果我要刪除一行'header.setContentType(new MediaType(「application」,「xml」));'? – CodeMed 2014-11-07 01:19:53

+0

你可以用'header.setContentType(MediaType.APPLICATION_XML)'替換它; – kryger 2014-11-07 10:12:40

回答

1

直接回答你的問題是「你不能」 - 有沒有辦法在一個HTTP響應發送兩個資源。

您可以在XML文件的標題鏈接到XSLT文件你返回:

<?xml-stylesheet href="style.xsl" type="text/xsl"?> 

這將使得用戶的瀏覽器嘗試下載並應用./style.xsl的數據,那麼你的服務器將需要揭露它。

更新:樣式表的URI可以是任意的;如果只想在頁面上查看時應用樣式,則可以使其與您的文檔服務的URI相關。如果您@RequestMapping解析到類似http://your-server.com/app/actionName.xml你可以一個靜態資源http://your-server.com/app/static/style.xsl添加到您的應用程序,並通過

<?xml-stylesheet href="static/style.xsl" type="text/xsl"?> 

引用它或者,您也可以嵌入XSLT直接導入XML數據,而不是擔心URL映射,但這是另一個問題(already answered, by the way)的主題。

相關問題