在Eclipse Dynamic Web Project中放置静态文件目录的位置

时间:2013-03-19 17:24:17

标签: eclipse jsp static

我使用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。请帮我解决这个问题。

1 个答案:

答案 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应用程序。

以下是有关如何Tomcat- Web Application deploy Architecture

的示例屏幕截图

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
    }
}