Как получить доступ к папке в проекте, который запущен на tomcat

1

У меня есть папка в моей папке военных проектов, поэтому она отлично работает в режиме разработки. Но когда я пытаюсь запустить одно и то же приложение на моем localHost. Он говорит "FileNotFound".

Я использую этот путь, который работает в режиме разработки: String filePath = "mydata/";

Теперь, какой путь я буду использовать при работе на tomcat?

Я также попытался поместить папку в папку Tomcat Bin Folder и использовать тот же файл, но не повезло!

Пожалуйста, направляйте.

Код:

@SuppressWarnings ("serial") открытый класс 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 (новый 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
    Вы пробовали String filePath = "./mydata/"; ?
  • 0
    Ваш режим разработки не на вашем локальном хосте?
Показать ещё 8 комментариев
Теги:
gwt

1 ответ

0

Когда вы запускаете ваш webapp в режиме разработки, скорее всего, ваша текущая папка является корнем проекта.

Когда вы запускаете свой webapp в прямом эфире (то есть не из вашей IDE), вы не можете угадать текущую папку, поскольку она может отличаться от ОС к ОС, от сервера к серверу и т.д.

Вы можете использовать ServletContext.getRealPath(), чтобы узнать путь/местоположение к базовому файлу пути.

Если вы звоните:

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

Это вернет корневую папку вашего веб-приложения, папку, которая содержит специальную папку "WEB-INF" (и, возможно, папку "META-INF"). Знание этой папки является хорошей отправной точкой, вы можете перейти отсюда (вверху - родительская или папка вниз - дочерняя).

Конечно, если файл/ресурс, к которому вы пытаетесь получить доступ, находится за пределами веб-папки, он не будет доступен во время производства, вы должны поместить его под свою веб-папку, чтобы он был развернут вместе с кодом вашего веб-приложения.

Получение ServletContext

Вы сказали, что это серверная сторона асинхронного вызова. Тогда это сервлет. Я не вижу весь ваш код, возможно, это RemoteServiceServlet?

В любом случае, если есть основной Servlet, вы можете получить из него ServletContext (через HttpServletRequest.getServletContext()), тогда у вас есть ServletContext.getRealPath().

Также вы можете получить ServletContext с помощью ServletContextListener. Вот как это сделать: Получение ServletContext при запуске webapp

Другой подход

Если вы поместите свои файлы/ресурсы в свою исходную папку, вы можете получить к ним доступ ClassName.getResource() и ClassName.getResourceAsStream(). Эти методы всегда вернут вам правильный ресурс независимо от того, исходит ли код (класс Java) из файла .class или из файла jar и т.д.

Помещение ваших ресурсов рядом с вашими файлами классов также имеет то преимущество, что ваши ресурсы будут автоматически перемещаться с кодом (они будут автоматически развернуты при повторном развертывании вашего кода).

  • 0
    спасибо, ServletContext не разрешим, Вы можете посмотреть мой код выше, где я пытаюсь найти путь
  • 0
    Вопрос в том, откуда вызывается ваш код? С сервлетом? От слушателя?
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню