使用嵌入式web服务器

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();
    }

}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值