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

Posted

技术标签:

【中文标题】如何访问在tomcat上运行的项目中的文件夹【英文标题】:How to access a folder in a project which is running on tomcat 【发布时间】:2014-08-25 13:14:13 【问题描述】:

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

我使用这条适用于开发模式的路径: 字符串文件路径 = "mydata/";

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

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

请指导。

代码:

@SuppressWarnings("serial") 公共类 GreetingServiceImpl 扩展 RemoteServiceServlet 实现 问候服务

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);
                

【问题讨论】:

你试过String filePath = "./mydata/";吗? 你的开发模式不在你的本地主机上? 请告诉我们您是如何访问该文件的 你在使用servlet吗? 试过:filePath = "./mydata/",但还是不行,我应该把这个文件夹放在war文件夹还是我的tomcat Bin文件夹中?目前它在两个地方 【参考方案1】:

当您在开发模式下运行 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()

您还可以使用ServletContextListener 获取ServletContext。操作方法如下:Getting ServletContext at webapp startup

另一种方法

如果您将文件/资源​​放在源文件夹中,您可以通过ClassName.getResource()ClassName.getResourceAsStream() 方法访问它们。无论代码(Java 类)是来自 .class 文件还是来自 jar 文件等,这些方法都会始终为您提供正确的资源。

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

【讨论】:

谢谢,ServletContext 是不可解析的,你可以看看我上面的代码,我正在尝试获取路径 问题是你的代码是从哪里调用的?来自 Servlet?来自听众? 使用异步调用..刚刚编辑了我的代码,请看一下..(它的GWT框架) 添加了有关获取ServletContext 的更多信息。

以上是关于如何访问在tomcat上运行的项目中的文件夹的主要内容,如果未能解决你的问题,请参考以下文章

Tomcat正常启动,可以访问tomcat主页,却不能访问webapp中的项目的jsp文件,这是啥原因?

本地开发的java项目发布在本地的tomcat上,如何让本地项目可以外网访问

javaWeb项目已经通过myeclipse部署到tomcat webapps中,但是项目文件夹中的jsp页面却访问不到?

如何让tomcat服务器运行在80端口,并且无需输入项目名即可访问项目

tomcat8.5一个端口运行多个项目

Tomcat设置只需IP加端口访问项目网站