Tomcat上下文文档库

时间:2016-05-13 05:28:04

标签: jsp tomcat tomcat8

我使用tomcat 8,我有一个功能,可以检索和更新个人资料图片。这些文件位于外部文件夹中。在servlet.xml中使用此代码检索

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

它在我的本地tomcat中工作正常,但在远程服务器中访问时,新创建的文件没有显示。我必须在服务器中重新启动tomcat,以便显示新图像。

我也试过这个

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

但仍然无法正常工作

任何想法如何不必重新启动tomcat?

1 个答案:

答案 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);
    }