我的项目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);
}
答案 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文件等,这些方法总能为您提供适当的资源。
将资源放在类文件旁边还有一个好处,即资源会自动随代码移动(在重新部署代码时会自动部署它们)。