我有一个由servlet调用的.jsp
来处理数据。
我试图用本地文件测试它,我的目录目前看起来像这样:
WEB-INF
|----jsp
|----test.jsp
|----data.txt
我的.jsp
甚至无法读取基本文件:
<%
String in = "../data.txt";
BufferedReader br = new BufferedReader(new FileReader(in));
out.println(br.readLine());
%>
我还尝试了很多其他变体:
= "data.txt"
= "./data.txt"
= "/data.txt"
= "file:///data.txt"
= "file://data.txt"
= "WEB-INF/data.txt"
等,并且无法从文件中读取。
我仍然是servlets的新手,所以我可能在这里错过了一个关键的互动,如果有人能够向我展示规范的“你好世界”,我将不胜感激。如何从.jsp
中的WEB-INF
访问文件的版本。
答案 0 :(得分:5)
这里有几个问题。
最重要的是JSP是显示技术。你不应该试图在jsp中做任何事情,而不仅仅是显示环境提供的一些数据(例如servlet设置的HttpResponse
上的属性)。您当然不应该尝试从jsp访问文件系统。
即使是从servlet,你也不应该这样做。您应该将文件放在类路径中,并使用getClass().getClassLoader().getResource
或getResourceAsStream
。可以直接从Web应用程序访问文件系统中的文件,但不建议这样做,也不能移植。
编辑:@ LocHa的答案可能会有效,但你真的不应该这样做。
答案 1 :(得分:0)
您应该使用ServletContext.getRealPath()
来获取文件的实际文件系统路径。
ServletContext
可以从.jsp下访问,名称为application
。
所以你应该这样做:
<%
String in = application.getRealPath("/WEB-INF/data.txt");
BufferedReader br = new BufferedReader(new FileReader(in));
out.println(br.readLine());
%>
答案 2 :(得分:-1)
测试一下:
<%
// application is JSP variable point to ServletContext instance
InputStream is = application.getResourceAsStream("/WEB-INF/data.txt");
BufferedReader b = new BufferedReader( new InputStreamReader( is ));
out.println(br.readLine());
%>