注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

让一切都逝去吧

排骨炖泥菜/猪肝炒苹果/鱼籽狗肉汤/狗头薏米汤

 
 
 

日志

 
 

使用嵌入式web服务器  

2010-10-12 21:27:00|  分类: web |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
jetty7
    使用jetty作为嵌入式web服务器非常简单,而且jetty非常小,启动很快。jetty6的包结构是org.mortbay.jetty.*,到jetty7这个项目已经属于eclipse了,包结构是org.eclipse.jetty.*。
    导入jetty安装目录lib下的jar包后,启动一个jetty服务器可以这样写:
public class SimplestServer
{
    public static void main(String[] args) throws Exception
    {
        Server server = new Server(8080);
        server.start();
        server.join();
    }
}
    这样可以启动一个http服务,但使用返回的是404错误,因为没有处理器来处理指向这个http服务的请求。处理器的编写如下:
import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.eclipse.jetty.server.Request;
import org.eclipse.jetty.server.handler.AbstractHandler;

public class HelloHandler extends AbstractHandler {
  
    /**
     * jetty 7
     */
    @Override
    public void handle(String target,Request baseRequest,HttpServletRequest request,HttpServletResponse response) throws IOException, ServletException {
        response.setContentType("text/html;charset=utf-8");
        response.setStatus(HttpServletResponse.SC_OK);
        baseRequest.setHandled(true);
        //System.out.println("响应请求");
        PrintWriter writer = response.getWriter();
        writer.println("<html>");
        writer.println("<h1>Hello World</h1>");
        writer.println("</html>");
    }
}
    嵌入服务器:
import org.eclipse.jetty.server.Server;

public class JettySample {

    public static void main(String[] args) {
        Server server = new Server(8080);
       
        server.setHandler(new HelloHandler());
        try {
            server.start();
            server.join();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}
    更详细的用法参考:http://wiki.eclipse.org/Jetty/Tutorial/Embedding_Jetty

tomcat6
    准备一份tomcat,解压到目录E:/embeddedtomcat/。
    嵌入tomcat6,需要导入tomcat安装目录下lib目录中的jar包,另外还需导入tomcat安装目录下bin目录中的tomcat-juli.jar包。编码如下:
import java.net.InetAddress;

import org.apache.catalina.Context;
import org.apache.catalina.Engine;
import org.apache.catalina.Host;
import org.apache.catalina.connector.Connector;
import org.apache.catalina.startup.Embedded;

public class EmbeddedTomcat6 {
    private String path = null;
    private Embedded embedded = null;
    private Host host = null;

    public EmbeddedTomcat6() {
    }

    /** 设置Tomcat的根路径 */
    public void setPath(String path) {
        this.path = path;
    }

    /** 返回Tomcat的根路径 */
    public String getPath() {
        return path;
    }

    /** 启动Tomcat服务器 */
    public void startTomcat() throws Exception {

        Engine engine = null;

        // 设置catalina.home系统属性
        System.setProperty("catalina.home", getPath());

        // 创建嵌入式Tomcat服务器
        embedded = new Embedded();

        // 创建Engine实例
        engine = embedded.createEngine();
        engine.setDefaultHost("localhost");

        // 创建默认的Host实例
        host = embedded.createHost("localhost", getPath() + "/webapps");
        engine.addChild(host);

        // 创建ROOT context
        Context context = embedded.createContext("", getPath() + "webapps/ROOT");
        host.addChild(context);

        // 创建examples context
        Context examplesContext = embedded.createContext("/examples", getPath()
                + "webapps/examples");
        host.addChild(examplesContext);
        /****************************************************/
        // 创建simple context
        //Context simple = embedded.createContext("/simple", getPath() + "webapps/simple");
        // 不复制到tomcat下的目录,而使用自定义目录关键在这句
        Context simple = embedded.createContext("/simple", "E:/embeddedtomcat/simple");
        host.addChild(simple);
        /****************************************************/

        // 把Engine实例加入到嵌入式Tomcat服务器
        embedded.addEngine(engine);

        // 创建和安装默认的HTTP connector
        InetAddress addr = null;
        Connector connector = embedded.createConnector(addr, 8080, false);
        embedded.addConnector(connector);

        // 启动嵌入式Tomcat服务器
        embedded.start();
    }

    /** 终止嵌入式Tomcat服务器 */
    public void stopTomcat() throws Exception {
        embedded.stop();
    }

    public static void main(String args[]) {
        try {
            EmbeddedTomcat6 tomcat = new EmbeddedTomcat6();
            String rootpath = "E:/embeddedtomcat/";
            tomcat.setPath(rootpath);
            tomcat.startTomcat();
            Thread.sleep(1000 * 60 * 5); // 睡眠5分钟
            tomcat.stopTomcat();
            System.exit(0);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

tomcat7
    相对于tomcat6,嵌入tomcat7就简单多了,同样将tomcat7解压到目录D:/dev/tomcat-7.0.0/,然后编码如下:
import javax.servlet.ServletException;

import org.apache.catalina.LifecycleException;
import org.apache.catalina.startup.Tomcat;

public class EmbeddedTomcat7 {
    public static void main(String[] args) throws ServletException, LifecycleException, InterruptedException {
        final String CATALINA_HOME = "D:/dev/tomcat-7.0.0/";
        Tomcat tomcat = new Tomcat();
        tomcat.setBaseDir(CATALINA_HOME);
        tomcat.setPort(8080);
        tomcat.addWebapp("", "E:/embeddedtomcat/simple");
        tomcat.start();
        /*
         * 不加上这句的话,tomcat运行出现异常程序就会被终止
         * 加上了这句后,下面的 tomcat.stop(); 会失效,不会停止tomcat
         */
        tomcat.getServer().await();//Keeps Tomcat running until it is shut down
        //Thread.sleep(1000 * 3);
        //tomcat.stop();
    }

}
  评论这张
 
阅读(2495)| 评论(1)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017