1. 程式人生 > >JavaWeb之Jetty和Tomcat內嵌伺服器實現

JavaWeb之Jetty和Tomcat內嵌伺服器實現

在開發Java web專案時候,有時候需要使用內嵌伺服器作為來執行web程式。

現在介紹Java中常用的兩種伺服器Tomcat和jetty,實現web伺服器的內嵌.

 1.Jetty伺服器的內嵌

      Jetty是一個Java實現的開源的servlet容器,它既可以像Tomcat一樣作為一個完整的Web伺服器和Servlet容器,同時也可以嵌入在Java應用程式中,在Java程式中呼叫Jetty。

     步驟:

     (1).首先下載jetty的jar包。

              我下載的是jetty-9.1.2.v20140210版本,

             下載地址:

             http://central.maven.org/maven2/org/eclipse/jetty/jetty-distribution/9.1.2.v20140210/jetty-distribution-             

             9.1.2.v20140210.zip

     (2).新建Java專案

              專案結構:

     (3).解壓,新增libs資料夾下除了資料夾其他所有的jar包和 lib/jsp資料夾下所有jar包到專案中去

      (4).編寫jetty啟動類

import org.eclipse.jetty.server.Connector;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.ServerConnector;
import org.eclipse.jetty.util.thread.QueuedThreadPool;
import org.eclipse.jetty.webapp.WebAppContext;

import java.io.File;


public class Main {

    public static void main(String[] args) {
        System.out.println("initJetty.........");
        initJetty();
    }

    public static  void initJetty() {
        try {
            QueuedThreadPool threadPool = new QueuedThreadPool();
            threadPool.setMaxThreads(300);
            threadPool.setMinThreads(3);

            Server server = new Server(threadPool);// 建立jetty web容器
            server.setStopAtShutdown(true);// 在退出程式是關閉服務

            // 建立聯結器,每個聯結器都是由IP地址和埠號組成,連線到聯結器的連線將會被jetty處理
            ServerConnector connector = new ServerConnector(server);// 建立一個聯結器
            connector.setHost("127.0.0.1");// ip地址
            connector.setPort(8080);// 連線的埠號
            connector.setName("connector0");
            server.addConnector(connector);// 新增連線

            // 配置服務
            WebAppContext context = new WebAppContext();// 建立服務上下文
            context.setContextPath("/");// 訪問服務路徑 http://{ip}:{port}/
            context.setConfigurationDiscovered(true);
            context.setClassLoader(Thread.currentThread().getContextClassLoader());
            String baseDir = Thread.currentThread().getContextClassLoader()
                    .getResource("").getPath();
//            context.setWar("WebRoot");
            context.setDescriptor(baseDir + File.separator + "/WEB-INF/web.xml");// 指明服務描述檔案,就是web.xml
            // context.setDescriptor("/E:/workspace/strutsDemo/target/classes/\\/WEB-INF/web.xml");//
            // 指明服務描述檔案,就是web.xml
            context.setResourceBase(System.getProperty("user.dir")
                    + "/WebContent");// 指定服務的資源根路徑,配置檔案的相對路徑與服務根路徑有關
            server.setHandler(context);// 新增處理try {
            server.start();// 開啟服務
            server.join();
        } catch (Exception e) {
            e.printStackTrace();
            System.exit(1);
        }
    }
}
        (5)執行結果:

2.Tomcat伺服器的內嵌

      Tomcat是一個Java實現的開源的servlet容器可以嵌入在Java應用程式中,在Java程式中呼叫Jetty。

     步驟:

     (1).首先下載Tomcat的jar包。

              我下載的是apache-tomcat-8.5.23-embed.zip版本,

             下載地址:

http://mirror.bit.edu.cn/apache/tomcat/tomcat-8/v8.5.23/bin/embed/apache-tomcat-8.5.23-embed.zip

     (2).新建Java專案

              專案結構:

     (3).解壓,新增libs資料夾下除了資料夾其他所有的jar包和 lib/jsp資料夾下所有jar包到專案中去

             

      (4).編寫jetty啟動類

import org.apache.catalina.LifecycleException;
import org.apache.catalina.core.AprLifecycleListener;
import org.apache.catalina.core.StandardServer;
import org.apache.catalina.startup.Tomcat;

import javax.servlet.ServletException;
import java.io.File;

public class EmbeddedTomcat {

    private static Tomcat tomcat;

    public static Tomcat getTomcat() {
        return tomcat;
    }

    private static StandardServer server;

    private static AprLifecycleListener listener;

    public static void main(String[] args) throws LifecycleException, ServletException {
        tomcat = new Tomcat();
        // 主機名,或ip
        tomcat.setHostname("localhost");
        // 設定埠,80為預設埠
        tomcat.setPort(8989);
        // tomcat用於儲存自身的資訊,可以隨意指定,最好包含在專案目錄下
        tomcat.setBaseDir(".");
        // 建立server參照tomcat檔案結構
        server = (StandardServer) tomcat.getServer();
        listener = new AprLifecycleListener();
        server.addLifecycleListener(listener);
        // 將appBase設為本專案所在目錄
        //tomcat.getHost().setAppBase(".");
        tomcat.getHost().setAppBase(
                System.getProperty("user.dir") + File.separator + ".");

        // 第二個引數對應docBase為web應用路徑,目錄下應有WEB-INF,WEB-INF下要有web.xml
        tomcat.addWebapp("", "WebContent");

        // 啟動tomcat
        tomcat.start();
        // 維持
        tomcat.getServer().await();

    }

}

      (5)執行結果: