如何访问在tomcat上运行的项目中的文件夹

时间:2014-08-25 13:14:14

标签: java gwt

我的项目war文件夹中有一个文件夹,所以它在开发模式下运行正常。 但是当我尝试在我的localHost上运行相同的应用程序时。 它说“FileNotFound”。

我使用这条适用于开发模式的路径: String filePath =“mydata /”;

现在在tomcat上运行时我将使用什么路径?

我也尝试将文件夹放在Tomcat Bin文件夹中并使用相同的filePath,但没有运气!

请指导。

代码:

@SuppressWarnings( “串行”) 公共类GreetingServiceImpl扩展了RemoteServiceServlet实现         GreetingService {

String filePath = "./cdata/";

public CountryDTO getCountryDataFromFile(String selectedCountry)     {

    Gson mydata = new Gson();
    CountryDTO dto = null;
    System.out.println("test");
    try 
    {
        String line;
        File f = new File(filePath + selectedCountry + ".txt");

        BufferedReader jsonReader = new BufferedReader(new FileReader(f));

/// RPC调用

void getJSONDataFromFile(String mAdministrativeArea,AsyncCallback asyncCallback);

//客户端,我的代码被称为

mAdministrativeAreaA.addValueChangeHandler(new ValueChangeHandler(){

        @Override
        public void onValueChange(ValueChangeEvent<String> changedSubRegion) {
            mAdministrativeArea= changedSubRegion.getValue();
            System.out.println("going to rpc");
            addrService.getJSONDataFromFile(mAdministrativeArea, new AsyncCallback<CountryDTO>() {

                @Override
                public void onSuccess(CountryDTO json) {


                    json.setFmt( selectedCountry.getFmt() );

                    GUIfromFormat(json, ResultType.STATE_OR_PROVINCE);
                }

1 个答案:

答案 0 :(得分:0)

在开发模式下运行webapp时,很可能当前文件夹是项目根目录。

当您运行webapp(不是来自IDE)时,您无法猜测当前文件夹,因为它可能因操作系统,操作系统,服务器等因素而异。

您可以使用ServletContext.getRealPath()查找路径基础文件的路径/位置。

如果你打电话:

String path = ServletContext.getRealPath("/");

这将返回Web应用程序的根文件夹,该文件夹包含特殊的"WEB-INF"文件夹(以及可选的"META-INF"文件夹)。知道这个文件夹是一个很好的起点,你可以从这里开始导航(向上 - 父文件夹或向下 - 子文件夹)。

当然,如果您尝试访问的文件/资源​​位于Web文件夹之外,它在生产期间将无法使用,您必须将其放在Web文件夹下,以便与Web应用程序一起部署代码。

获取ServletContext

你说这是异步调用的服务器端。然后它是一个servlet。我没有看到您的所有代码,可能是RemoteServiceServlet

无论是什么情况,如果存在基础Servlet,您可以从中获取ServletContext(通过HttpServletRequest.getServletContext()),然后您拥有ServletContext.getRealPath()

您也可以使用ServletContext获取ServletContextListener。以下是如何操作:Getting ServletContext at webapp startup

另一种方法

如果您将文件/资源​​放在源文件夹中,则可以访问它们ClassName.getResource()ClassName.getResourceAsStream()方法。无论代码(Java类)是来自.class文件还是来自jar文件等,这些方法总能为您提供适当的资源。

将资源放在类文件旁边还有一个好处,即资源会自动随代码移动(在重新部署代码时会自动部署它们)。