玩转tomcat之让世界变的更简单

来源:互联网 发布:淘宝服装摆拍视频教程 编辑:程序博客网 时间:2024/04/29 05:23

           在web应用的开发中,我们经常做的工作可能就是 修改 -- 打包 -- 查看 -- 修改 。。。。。。 ,经过n多次的修改和之后我们完成了我们的工作,可是你肯定也被这打包的事弄的精疲力尽了。也许打包耗费的时间比我们修改的时间还要多,而且那还是一件无聊的事,那么为什么不让事情变的更简单一些呢 。

         事情是可以变的更简单的,因为我们有嵌入式Tomcat  。。。。。。

/**
 * Author : crazy_rain
 * Date : 2007-03-12
 * Description :EmbeddedTomcat ,快速部属和修改web应用的利器
 */
public class EmbeddedTomcat {
    private static final Log log = LogFactory.getLog(EmbeddedTomcat.class);
    private String webRoot = "";                                     //WEB应用程序路径
    private String contextPath = "";                                 // WEB上下文名称
    private boolean reloadable = true;                               //是否允许热替换
    private boolean isRuning;                                        //服务器是否正在运行
    private Embedded tomcat;                                         //嵌入式Tomcat

    /**
     * 创建 EmbeddedTomcat
     *
     * @param webRoot     web应用的根路径
     * @param contextPath 应用的上下文路径
     */
    public EmbeddedTomcat(String webRoot, String contextPath) {
        this.webRoot = webRoot;
        this.contextPath = contextPath;
    }

    /**
     * 创建 EmbeddedTomcat
     *
     * @param webRoot     web应用的根路径
     * @param contextPath 应用的上下文路径
     * @param reloadable  是否允许热交换
     */
    public EmbeddedTomcat(String webRoot, String contextPath, boolean reloadable) {
        this(webRoot, contextPath);
        this.reloadable = reloadable;
    }

    /**
     * 启动Tomcat
     */
    public void run() {
        log.debug("EmbeddedTomcat is starting ...");
        if (webRoot.equals("") || contextPath.equals("")) {
            throw new IllegalArgumentException("webRoot or contextPath is empty , place check ...");
        }
        //创建内嵌式tomcat
        tomcat = new Embedded();
        //创建并设置tomcat引擎
        Engine engine = tomcat.createEngine();
        tomcat.setCatalinaHome(webRoot);
        //创建服务主机
        Host host = tomcat.createHost("localhost", webRoot);
        //创建上下文
        Context context = tomcat.createContext(contextPath, webRoot);
        //设置是否允许热替换
        context.setReloadable(reloadable);
        host.addChild(context);
        engine.addChild(host);
        engine.setDefaultHost(host.getName());
        engine.setName("EmbeddedTomcat");
        tomcat.addEngine(engine);
        Connector connector = null;
        try {
            connector = tomcat.createConnector(InetAddress.getLocalHost(), 8080, false);
        } catch (UnknownHostException e) {
            log.debug("UnknownHostException ...", e);
        }
        //设置资源编码
        if (null != connector) {
            connector.setURIEncoding("GBK");
        }
        tomcat.addConnector(connector);
        try {
            //启动 Tomcat
            tomcat.start();
        } catch (LifecycleException e) {
            log.debug("LifecycleException ...", e);
        }
        isRuning = true;
        log.debug("EmbeddedTomcat is running ...");
    }

    /**
     * 关闭 EmbeddedTomcat
     */
    public void stop() {
        if (!isRuning) {
            throw new IllegalStateException("tomcat is not running ...");
        }
        try {
            tomcat.stop();
            isRuning = false;
        } catch (LifecycleException e) {
            log.debug("LifecycleException ocurred while stop tomcat ...", e);
        }
    }

    //for demo :)
    public static void main(String args[]) {
        EmbeddedTomcat tomcat = new EmbeddedTomcat("D://projects//NetStore", "/NetStore");
        tomcat.run();
    }
}