在开发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)运行结果: