Jetty 是一个用 Java 实现、开源、基于标准的,并且具有丰富功能的Http 服务器和Web 容器,可以免费的用于商业行为。Jetty这个项目成立于1995 年,现在已经有非常多的成功产品基于Jetty,比如Apache Geromino, JBoss, IBM Tivoli,Cisco SESM 等。Jetty 可以用来作为一个传统的Web 服务器,也可以作为一个动态的内容服务器,并且Jetty 可以非常容易的嵌入到Java 应用程序当中。
在很多开源项目发布的时候都会用jetty来作为服务器,我们把它用来做 demo、开发、调试的服务器还是很不错的,下面简要介绍jetty的两种应用方式。
项目目录结构如下:
直接上代码:
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import org.mortbay.jetty.Connector;
import org.mortbay.jetty.Server;
import org.mortbay.jetty.nio.SelectChannelConnector;
import org.mortbay.jetty.webapp.WebAppContext;
import org.mortbay.xml.XmlConfiguration;
import org.xml.sax.SAXException;
public class JettyTest {
public static void main(String[] args) throws Exception {
startJettyMethodT();
}
public static void startJettyMethodT()
throws SAXException, IOException, FileNotFoundException, Exception {
Server server = new Server();
// 指定自定义的jetty.xml路径
XmlConfiguration configuration = new XmlConfiguration(
new FileInputStream("e:/hadoopws/jettytest/WebRoot/etc/jetty.xml"));
configuration.configure(server);
server.start();
}
public static void startJettyMethodO() {
// 这个就是你的项目发布时候的名字
String jetty_home = "jettytest";
try {
Server server = new Server();
Connector connector = new SelectChannelConnector();
connector.setPort(9991);
server.setConnectors(new Connector[] { connector });
WebAppContext webapp = new WebAppContext();
webapp.setContextPath("/" + jetty_home);// 上下文路径 比如说/jettytest
webapp.setResourceBase("./WebRoot");// 你的资源文件所在的路径 一般都在这下面
// webapp.setDefaultsDescriptor("./WebRoot/etc/webdefault.xml");
server.setHandler(webapp);
server.start();
server.join();
} catch (Exception e) {
e.printStackTrace();
}
}
}
jetty.xml
<?xml version="1.0"?>
<!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN" "http://jetty.mortbay.org/configure.dtd">
<Configure id="Server" class="org.mortbay.jetty.Server">
<Set name="ThreadPool">
<New class="org.mortbay.thread.QueuedThreadPool">
<Set name="minThreads">10</Set>
<Set name="maxThreads">200</Set>
<Set name="lowThreads">20</Set>
<Set name="SpawnOrShrinkAt">2</Set>
</New>
</Set>
<Call name="addConnector">
<Arg>
<New class="org.mortbay.jetty.nio.SelectChannelConnector">
<Set name="host">
<SystemProperty name="jetty.host" default="localhost" />
</Set>
<Set name="port">
<SystemProperty name="jetty.port" default="9090" />
</Set>
<Set name="maxIdleTime">30000</Set>
<Set name="Acceptors">2</Set>
<Set name="statsOn">false</Set>
<Set name="confidentialPort">8443</Set>
<Set name="lowResourcesConnections">5000</Set>
<Set name="lowResourcesMaxIdleTime">5000</Set>
</New>
</Arg>
</Call>
<Set name="handler">
<New id="Handlers" class="org.mortbay.jetty.handler.HandlerCollection">
<Set name="handlers">
<Array type="org.mortbay.jetty.Handler">
<Item>
<New id="RequestLog" class="org.mortbay.jetty.handler.RequestLogHandler" />
</Item>
<Item>
<New class="org.mortbay.jetty.webapp.WebAppContext">
<Set name="contextPath">/jettytest</Set>
<Set name="war">./WebRoot</Set><!--你的web应用根目录 -->
</New>
</Item>
</Array>
</Set>
</New>
</Set>
<Ref id="RequestLog">
<Set name="requestLog">
<New id="RequestLogImpl" class="org.mortbay.jetty.NCSARequestLog">
<Set name="filename">
<SystemProperty name="jetty.logs" default="./WebRoot/logs" />/yyyy_mm_dd.request.log
</Set>
<Set name="filenameDateFormat">yyyy_MM_dd</Set>
<Set name="retainDays">90</Set>
<Set name="append">true</Set>
<Set name="extended">true</Set>
<Set name="logCookies">false</Set>
<Set name="LogTimeZone">GMT</Set>
</New>
</Set>
</Ref>
<Set name="stopAtShutdown">true</Set>
<Set name="sendServerVersion">true</Set>
<Set name="sendDateHeader">true</Set>
<Set name="gracefulShutdown">1000</Set>
</Configure>
调用页面: