如何访问在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页面却访问不到?