我不是熟悉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内部有任何方式以相关的方式引用这个位置而不是绝对的方式。
提前致谢
答案 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
构造函数。请注意,您不希望在此处向用户提供免费统治,因为这样做会允许对整个服务器进行读取访问。