修改嵌入式tomcat webapp的配置

时间:2011-12-20 00:41:59

标签: heroku tomcat7

我一直在尝试修改我的heroku应用程序的嵌入式tomcat配置。我已经使用下面的wiki链接安装了heroku app,它配置了一个简单的嵌入式tomcat。

http://devcenter.heroku.com/articles/create-a-java-web-application-using-embedded-tomcat

源代码在这里:

public static void main(String[] args) throws Exception {

    String webappDirLocation = "src/main/webapp/";
    Tomcat tomcat = new Tomcat();

    //The port that we should run on can be set into an environment variable
    //Look for that variable and default to 8080 if it isn't there.
    String webPort = System.getenv("PORT");
    if(webPort == null || webPort.isEmpty()) {
        webPort = "8080";
    }

    tomcat.setPort(Integer.valueOf(webPort));

    tomcat.addWebapp("/", new File(webappDirLocation).getAbsolutePath());
    System.out.println("configuring app with basedir: " + new File("./" + webappDirLocation).getAbsolutePath());

    tomcat.start();
    tomcat.getServer().await();  

}

问题:

  1. 由于我使用的是嵌入式tomcat,如何为我的Web应用程序配置默认会话超时?由于某种原因,似乎默认为30分钟?我想设置为一周的时间。
  2. 如果我从eclipse中启动应用程序,如何设置autodeploy = true以便每次修改java代码时都不必编译并重新启动应用程序?
  3. 有设置我的web.xml和server.xml的方法吗?
  4. 如何运行apache tomcat manager?
  5. 互联网上的文档不是很清楚。你能帮忙吗?

    提前致谢.. 基兰

1 个答案:

答案 0 :(得分:1)

使用Context.setSessionTimeout(int)。 Java文档here。这是相同的Main类,会话超时设置为30天:

package launch;
import java.io.File;
import org.apache.catalina.startup.Tomcat;
import org.apache.catalina.Context;


public class Main {

    public static void main(String[] args) throws Exception {

        String webappDirLocation = "src/main/webapp/";
        Tomcat tomcat = new Tomcat();

        //The port that we should run on can be set into an environment variable
        //Look for that variable and default to 8080 if it isn't there.
        String webPort = System.getenv("PORT");
        if(webPort == null || webPort.isEmpty()) {
            webPort = "8080";
        }

        tomcat.setPort(Integer.valueOf(webPort));

        Context ctx = tomcat.addWebapp("/", new File(webappDirLocation).getAbsolutePath());
        ctx.setSessionTimeout(2592000);
        System.out.println("configuring app with basedir: " + new File("./" + webappDirLocation).getAbsolutePath());

        tomcat.start();
        tomcat.getServer().await();  
    }
}

请注意Context ctx = ...ctx.setSessionTimeout(...)

对于Tomcat Manager,当您以这种方式在应用程序中嵌入Tomcat时,无法使用它。我很好奇你想用Tomcat Manager做什么?

您通常可以通过嵌入API从server.xml执行任何操作。整个嵌入点是您以编程方式配置所有内容。

您仍可以像往常一样设置自己的web.xml。只需将其添加到您传入的目录WEB-INF目录下webappDirLocation即可。但是,我很好奇你想要放在web.xml中的什么?因为您“拥有”主应用程序循环,所以您可以从main方法设置所需的任何配置。我强烈建议在主循环中初始化您需要的所有内容,并为环境特定的任何内容(例如JDBC URL)读取OS环境变量。

最后,对于Eclipse,您不再需要热部署,因为您没有使用容器部署模型。您只需使用“Debug as ...”从Eclipse内部运行应用程序,Eclipse将在您更改时自动编译并重新加载代码。它与热部署并不完全相似。例如,它不会使用新方法签名热重新加载类。但与使用容器相比,循环整个应用程序的速度要快得多,因此总体而言,我发现它的效率更高。