2016-05-13 2 views
0

Я использую tomcat 8, у меня есть функция, которая восстанавливает и обновляет изображение профиля. Файлы находятся во внешней папке. Получено с помощью этого кода в servlet.xmlTomcat context docbase

<Context docBase="C:/assets" path="mywebapp/files"/> 

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

Я также попытался это

<Context docBase="C:/assets" path="mywebapp/files" reloadable="true"/> 

, но до сих пор он не работал

Любые идеи, как не должны перезапустить Tomcat?

+0

«C:/assets» - это ссылка? –

ответ

0

Я считаю, что ваша строка docBase принадлежит серверу.xml, а не servlet.xml. Я также думаю, что ваша переменная пути должна начинаться с ведущей косой черты. Я не знаю, может ли он содержать два уровня, вы можете просто изменить его на путь =/активы

Далее, посмотрите на свой файл context.xml. Если сказано:

<Context antiResourceLocking="true"> 

необходимо обновить контекст до того, как новый файл будет доступен. Если ваш элемент Context не имеет antiResourceLocking = "true", тогда файл должен быть немедленно доступен.

Вы можете перезагрузить контекст программно, без перезагрузки Tomcat, путем выдачи запроса GET на http://localhost:8080/manager/text/reload?path=/assets (если вы измените переменную пути в/активы)

Однако вы, вероятно, необходимо предоставить Authenticator, как это :

Authenticator.setDefault (new Authenticator() { 
     protected PasswordAuthentication getPasswordAuthentication() { 
      return new PasswordAuthentication ("tomcat", "password".toCharArray()); 
     } 
    }); 

    URL url = new URL("http://localhost:8080/manager/text/reload?path=/assets"); 

    try { 
     HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
     conn.setRequestMethod("GET"); 
     conn.getResponseCode(); 

     BufferedReader in = new BufferedReader(
       new InputStreamReader(conn.getInputStream())); 
     String inputLine; 
     StringBuffer response = new StringBuffer(); 

     while ((inputLine = in.readLine()) != null) { 
      response.append(inputLine); 
     } 

     logger.info(response.toString()); 
     in.close(); 

    } catch (Exception e) { 
     logger.error(e.getMessage(), e); 
    }