我使用tomcat 8,我有一个功能,可以检索和更新个人资料图片。这些文件位于外部文件夹中。在servlet.xml中使用此代码检索
<Context docBase="C:/assets" path="mywebapp/files"/>
它在我的本地tomcat中工作正常,但在远程服务器中访问时,新创建的文件没有显示。我必须在服务器中重新启动tomcat,以便显示新图像。
我也试过这个
<Context docBase="C:/assets" path="mywebapp/files" reloadable="true"/>
但仍然无法正常工作
任何想法如何不必重新启动tomcat?
答案 0 :(得分:0)
我相信你的docBase行属于server.xml,而不是servlet.xml。我还认为你的路径变量需要以一个前导斜杠开头。我不知道它是否可以包含两个级别,您可能只想将其更改为path = / assets
接下来,查看您的context.xml文件。如果它说
<Context antiResourceLocking="true">
您需要在新文件可用之前重新加载上下文。如果您的Context元素没有antiResourceLocking =&#34; true&#34;,那么该文件应立即可用。
您可以通过向http://localhost:8080/manager/text/reload?path=/assets发出GET请求,以编程方式重新加载上下文,而无需重新启动Tomcat(假设您将路径变量更改为/ 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);
}