2016-05-13 3 views
0

Ich benutze Tomcat 8, ich habe eine Funktion, die das Profilbild aufruft und aktualisiert. Die Dateien befinden sich in einem externen Ordner. mit diesem Code in servlet.xml abgerufenTomcat-Kontext docbase

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

Es ist in Ordnung in meinem lokalen Kater arbeiten, aber wenn es in einem Remote-Server den Zugriff auf die neu erstellten Dateien werden nicht angezeigt werden. Ich muss Tomcat auf dem Server neu starten, damit die neuen Bilder angezeigt werden.

Ich habe auch versucht, diese

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

aber noch hat es nicht funktioniert

Irgendwelche Ideen, wie zu haben, um nicht tomcat neu starten?

+0

Ist "C:/Assets" ein Link? –

Antwort

0

Ich glaube, Ihre DocBase-Zeile gehört in server.xml, nicht servlet.xml. Ich denke auch, dass Ihre Pfadvariable mit einem führenden Schrägstrich beginnen muss. Ich weiß nicht, ob es zwei Ebenen enthalten kann, vielleicht möchten Sie es einfach in path =/assets ändern

Als nächstes betrachten Sie Ihre context.xml-Datei. Wenn es heißt

müssen Sie den Kontext neu laden, bevor die neue Datei verfügbar sein wird. Wenn Ihr Context-Element nicht über antiResourceLocking = "true" verfügt, sollte die Datei sofort verfügbar sein.

Sie können den Kontext programmatisch neu zu laden, ohne Tomcat neu starten, indem Sie eine GET-Anforderung an http://localhost:8080/manager/text/reload?path=/assets Ausgabe (vorausgesetzt, Sie Ihre Pfadvariablen ändern/assets)

aber Sie wahrscheinlich eine Authenticator bieten müssen, wie dies :

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); 
    } 
Verwandte Themen