2014-11-04 71 views
0

我在jsp页面中选择了xml文件,然后在servlet的post方法中转换这些文件并在html页面上显示数据。但它不工作,当我选择一个XML文件,并验证我得到下面的错误错误404 - 在Java中将XML转换为HTML时未找到

"Error 404 - Not Found". 

下面是java代码:

@WebServlet(name = "Validation", urlPatterns = { "/validation" }) 
public class Validation extends HttpServlet { 
    private static final String CONTENT_TYPE = "text/html; charset=windows-1252"; 
    static Document document; 

    public void init(ServletConfig config) throws ServletException { 
     super.init(config); 
    } 

    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 

       DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
       try { 
        String xmlfile=request.getParameter("fichier"); 
        String xsltfile="C:\\Documents and Settings\\Administrateur\\Bureau\\test\\EDI3\\EDI"; 
        File stylesheet = new File(xmlfile); 
        File datafile = new File(xsltfile); 

        DocumentBuilder builder = factory.newDocumentBuilder(); 
        document = builder.parse(datafile); 

        // Use a Transformer for output 
        TransformerFactory tFactory = TransformerFactory.newInstance(); 
        StreamSource stylesource = new StreamSource(stylesheet); 
        Transformer transformer = tFactory.newTransformer(stylesource); 

        DOMSource source = new DOMSource(document); 
        StreamResult result = new StreamResult(System.out); 
        transformer.transform(source, result); 
       } catch (TransformerConfigurationException tce) { 
        // Error generated by the parser 
        System.out.println("\n** Transformer Factory error"); 
        System.out.println(" " + tce.getMessage()); 

        // Use the contained exception, if any 
        Throwable x = tce; 

        if (tce.getException() != null) { 
         x = tce.getException(); 
        } 

        x.printStackTrace(); 
       } catch (TransformerException te) { 
        // Error generated by the parser 
        System.out.println("\n** Transformation error"); 
        System.out.println(" " + te.getMessage()); 

        // Use the contained exception, if any 
        Throwable x = te; 

        if (te.getException() != null) { 
         x = te.getException(); 
        } 

        x.printStackTrace(); 
       } catch (SAXException sxe) { 
        // Error generated by this application 
        // (or a parser-initialization error) 
        Exception x = sxe; 

        if (sxe.getException() != null) { 
         x = sxe.getException(); 
        } 

        x.printStackTrace(); 
       } catch (ParserConfigurationException pce) { 
        // Parser with specified options can't be built 
        pce.printStackTrace(); 
       } catch (IOException ioe) { 
        // I/O error 
        ioe.printStackTrace(); 
       } 
    } 
} 

任何指导或教程,可以让我明白的地方我会错误的赞赏。

+1

我没有开发servlet,但我期望输出被写入某个附加到'HttpServletResponse响应'的流,而不是'System.out'。所以试试'StreamResult result = new StreamResult(response.getOutputStream());'。通常,XSLT使用命名空间处理XML,因此您可能需要使用可识别名称空间的DocumentBuilderFactory。另一方面,XSLT处理器的实现者通常会说他们的本地树模型比W3C DOM好,所以不要使用DOMSource考虑使用SAXSource或StreamSource。 – 2014-11-04 14:43:52

回答

0
   response.setContentType(CONTENT_TYPE); 
       StreamResult result = new StreamResult(response.getWriter()); 
       transformer.transform(source, result); 

内容类型已经设置了编码。响应可以使用getOutputStream()或上面的文本写入二进制数据,并进行编码。