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)執行結果: