使用JSP在浏览器中显示XML内容

时间:2011-08-18 16:13:59

标签: java html xml jsp

我不是熟悉JSP而是熟悉Java, 我试图仅使用JSP在浏览器中显示XML内容,并提出了这个代码

<%
               InputStreamReader in= new InputStreamReader(new FileInputStream("C:\\Tomcat\\data\\xml\\TmpXML.xml"));
               BufferedReader br = new BufferedReader(in);
               String line = br.readLine();
               while(line!=null){
               out.println(line);
               line = br.readLine();
              }

              %>

它向我展示了完美的XML,但我对此有更多的要求,就像我将有3-4个XML文件,我想显示用户链接,所以当用户点击链接时,它应该获取数据(XML或来自指定位置的任何其他)并且必须在浏览器上显示,因为当前上面的代码正在页面加载时执行。

我尝试做类似

的事情
<%!
                  public void showTempXML(){
                                      InputStreamReader in= new InputStreamReader(new FileInputStream("C:\\Tomcat\\data\\xml\\TmpXML.xml"));
                  BufferedReader br = new BufferedReader(in);
                  String line = br.readLine();
                  while(line!=null){
                   out.println(line);
                   line = br.readLine();
                  }
              } %>

但它显示错误out cannot be resolved

JSP专家组的任何人都可以帮我指导我该怎么做。 另外我的xml文件位置是

Tomcat\\data\\xml\\TmpXML.xml
在我的tomcat directoy内部有任何方式以相关的方式引用这个位置而不是绝对的方式。

提前致谢

1 个答案:

答案 0 :(得分:0)

你可以这样做:

<%@page import="java.util.Arrays"%>
<%@page import="java.io.FileInputStream"%>
<%@page import="java.io.InputStreamReader"%>
<%@page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
    String[] allowedFiles = {"File1.xml", "File2.xml", "File3.xml", "File4.xml"};

    String reqFile = request.getParameter("file");

    if(!Arrays.asList(allowedFiles).contains(reqFile)){
%>
    <html>
        <body>
            <p>Please choose a file:</p>
            <ul>
<%
        for(String file : allowedFiles){
%>
                <li><a href="?file=<%=file%>"><%=file%></a></li>
<%
        }
%>
            </ul>
        </body>
    </html>
<%
    }else{
        response.setContentType("text/xml");
        InputStreamReader in = new InputStreamReader(new FileInputStream(reqFile));
        char[] buffer = new char[2048];
        int read;
        while((read = in.read(buffer)) >= 0){
            out.write(buffer, 0, read);
        }   
    }
%>

基本上,您接受用户想要查看的文件作为参数。如果该参数尚不存在(或无效),则向用户显示选项列表。

请注意,我将XML的读取更改为不使用BufferedReader。在这种情况下,无需搜索XML的各个行,因此只需缓冲固定数量的字符将更有效。如果您不需要担心源XML文件的实际编码与客户端Web浏览器可以显示的内容匹配,您可以通过完全避免使用Reader *类来进一步改进这一点,而只是复制字节 - 尽管这将是在实际的servlet中更适合(而不是编译成servlet的JSP)。

另请注意,在某处您需要包含您要提供的文件的路径。您可以在allowedFiles列表中逐个执行此操作 - 如果您希望从不同路径提供服务,则可以提供帮助,或者您可以在调用期间将基本文件附加到reqFile FileInputStream构造函数。请注意,您希望在此处向用户提供免费统治,因为这样做会允许对整个服务器进行读取访问。