我使用Eclipse创建了一个动态Web项目。我有几个java程序,我放在“Java Resources / src”文件夹中。这些程序使用我放在“Lucene
”文件夹中的WebContent/WEB-INF/lib
个库。 Java程序需要访问一些文本文件和一个包含由Lucene
生成的索引文件的目录。我将这些静态文件放在eclipse中的WebContent
下,以便它们出现在导出的WAR文件中。
我通过直接在Java程序中引用这些静态文件来访问它们。
BufferedReader br = new BufferedReader(new FileReader("abc.txt"));
// abc.txt位于Eclipse项目的WebContent文件夹中。
在JSP页面中,我调用java程序(包含上面一行),但它显示FileNotFoundException
。请帮我解决这个问题。
答案 0 :(得分:3)
您无法直接从Java访问webapp中可用的资源。
来自/src/YourClass.java
的文件在编译时位于/WEB-INF/classes/
下。因此,当您尝试访问BufferedReader br = new BufferedReader(new FileReader("abc.txt"));
。
根据您给出的示例,在“/ WEB-INF / classes / abc.txt”中搜索“abc.txt”。
使用servletContext.getRealPath("/");
返回Web应用程序webapps
目录的路径,然后您可以使用此路径访问资源。
注意: servletContext.getRealPath("/");
返回的路径还取决于您部署Web应用程序的方式。默认情况下,eclipse使用自己的内部机制来部署Web应用程序。
以下是有关如何
的示例屏幕截图Servlet代码:
import java.io.File;
import java.io.IOException;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class StaticTestServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private ServletContext servletContext;
private String rootPath;
public StaticTestServlet() {
super();
// TODO Auto-generated constructor stub
}
@Override
public void init(ServletConfig config) throws ServletException {
// TODO Auto-generated method stub
super.init(config);
servletContext = config.getServletContext();
rootPath = servletContext.getRealPath("/");
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
System.out.println("In Get and my path: " + rootPath + "documents"); // documents is the direcotry name for static files
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
System.out.println("In Post and my path: " + rootPath + "documents"); // documents is the direcotry name for static files
}
}