q9989 发表于 2017-2-25 13:29:46

启动jetty方式

  一、不使用jetty.xml配置文件启动

package hb.test.jetty;
import java.io.FileNotFoundException;
import java.io.IOException;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.webapp.WebAppContext;
import org.xml.sax.SAXException;
public class SimpleServerStart {
public static void main(String[] args) {
try {
// 服务器的监听端口
Server server = new Server(8080);
// 关联一个已经存在的上下文
WebAppContext context = new WebAppContext();
// 设置描述符位置
context.setDescriptor("./web/WEB-INF/web.xml");
// 设置Web内容上下文路径
context.setResourceBase("./web");
// 设置上下文路径
context.setContextPath("/myproject");
context.setParentLoaderPriority(true);
server.setHandler(context);
// 启动
server.start();
server.join();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
}

  二、通过配置文件启动jetty

package hb.test.jetty;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.handler.ContextHandlerCollection;
import org.eclipse.jetty.webapp.WebAppContext;
import org.eclipse.jetty.xml.XmlConfiguration;
import org.xml.sax.SAXException;
public class SimpleServerConfig {
public static void main(String[] args) {
try {
// 创建一个默认服务器对象
Server server = new Server();
// server.setHandler(new DefaultHandler());
// 初始化server对象的属性,这些属性全部来至于xmlconfig文件的配置,有点类似于spring通过配置文件获取对象
XmlConfiguration config = new XmlConfiguration(new FileInputStream("./jetty/etc/jetty.xml"));
config.configure(server);
// 给创建的server服务器配置处理的handler对象,可以通过xmlconfig配置,也可以手动配置,下面代码是手动配置完成的
ContextHandlerCollection handler = new ContextHandlerCollection();
// 创建一个webapp对象
WebAppContext webapp = new WebAppContext();
// 一定要有反斜杠,表示当前工程的上下文
webapp.setContextPath("/myjetty");
webapp.setDefaultsDescriptor("./jetty/etc/webdefault.xml");
webapp.setResourceBase("./web");
webapp.setDescriptor("./web/WEB-INF/web.xml");
handler.addHandler(webapp);
server.setHandler(handler);
server.start();
server.join();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
}

  配置jetty.xml文件,使用jetty9,需要添加如下标签。

    <Call name="addConnector">
<Arg>
<New class="org.eclipse.jetty.server.ServerConnector">
<Arg name="server"><Ref refid="Server" /></Arg>
<Arg name="factories">
<Array type="org.eclipse.jetty.server.ConnectionFactory">
<Item>
<New class="org.eclipse.jetty.server.HttpConnectionFactory">
<Arg name="config"><Ref refid="httpConfig" /></Arg>
</New>
</Item>
</Array>
</Arg>
<Set name="host"><Property name="jetty.host" /></Set>
<Set name="port"><Property name="jetty.port" default="8080" /></Set>
<Set name="idleTimeout">30000</Set>
</New>
</Arg>
</Call>


<?xml version="1.0"?>
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_0.dtd">
<!-- =============================================================== -->
<!-- Documentation of this file format can be found at:            -->
<!-- http://wiki.eclipse.org/Jetty/Reference/jetty.xml_syntax      -->
<!--                                                               -->
<!-- Additional configuration files are available in $JETTY_HOME/etc -->
<!-- and can be mixed in. See start.ini file for the default         -->
<!-- configuration files.                                          -->
<!--                                                               -->
<!-- For a description of the configuration mechanism, see the       -->
<!-- output of:                                                      -->
<!--   java -jar start.jar -?                                        -->
<!-- =============================================================== -->
<!-- =============================================================== -->
<!-- Configure a Jetty Server instance with an ID "Server"         -->
<!-- Other configuration files may also configure the "Server"       -->
<!-- ID, in which case they are adding configuration to the same   -->
<!-- instance.If other configuration have a different ID, they   -->
<!-- will create and configure another instance of Jetty.            -->
<!-- Consult the javadoc of o.e.j.server.Server for all            -->
<!-- configuration that may be set here.                           -->
<!-- =============================================================== -->
<Configure id="Server" class="org.eclipse.jetty.server.Server">
<!-- =========================================================== -->
<!-- Configure the Server Thread Pool.                           -->
<!-- The server holds a common thread pool which is used by      -->
<!-- default as the executor used by all connectors and servlet-->
<!-- dispatches.                                                 -->
<!--                                                             -->
<!-- Configuring a fixed thread pool is vital to controlling the -->
<!-- maximal memory footprint of the server and is a key tuning-->
<!-- parameter for tuning.In an application that rarely blocks -->
<!-- then maximal threads may be close to the number of 5*CPUs.-->
<!-- In an application that frequently blocks, then maximal      -->
<!-- threads should be set as high as possible given the memory-->
<!-- available.                                                -->
<!--                                                             -->
<!-- Consult the javadoc of o.e.j.util.thread.QueuedThreadPool   -->
<!-- for all configuration that may be set here.               -->
<!-- =========================================================== -->
<Arg name="threadpool">
<New id="threadpool" class="org.eclipse.jetty.util.thread.QueuedThreadPool">
<Arg name="minThreads" type="int">10</Arg>
<Arg name="maxThreads" type="int">200</Arg>
<Arg name="idleTimeout" type="int">60000</Arg>
<Set name="detailedDump">false</Set>
</New>
</Arg>
<!-- =========================================================== -->
<!-- Add shared Scheduler instance                               -->
<!-- =========================================================== -->
<Call name="addBean">
<Arg>
<New class="org.eclipse.jetty.util.thread.ScheduledExecutorScheduler"/>
</Arg>
</Call>
<!-- =========================================================== -->
<!-- Http Configuration.                                       -->
<!-- This is a common configuration instance used by all         -->
<!-- connectors that can carry HTTP semantics (HTTP, HTTPS, SPDY)-->
<!-- It configures the non wire protocol aspects of the HTTP   -->
<!-- semantic.                                                   -->
<!--                                                             -->
<!-- This configuration is only defined here and is used by      -->
<!-- reference from the jetty-http.xml, jetty-https.xml and      -->
<!-- jetty-spdy.xml configuration files which instantiate the    -->
<!-- connectors.                                                 -->
<!--                                                             -->
<!-- Consult the javadoc of o.e.j.server.HttpConfiguration       -->
<!-- for all configuration that may be set here.               -->
<!-- =========================================================== -->
<New id="httpConfig" class="org.eclipse.jetty.server.HttpConfiguration">
<Set name="secureScheme">https</Set>
<Set name="securePort"><Property name="jetty.secure.port" default="8443" /></Set>
<Set name="outputBufferSize">32768</Set>
<Set name="requestHeaderSize">8192</Set>
<Set name="responseHeaderSize">8192</Set>
<Set name="sendServerVersion">true</Set>
<Set name="sendDateHeader">false</Set>
<Set name="headerCacheSize">512</Set>
<!-- Uncomment to enable handling of X-Forwarded- style headers
<Call name="addCustomizer">
<Arg><New class="org.eclipse.jetty.server.ForwardedRequestCustomizer"/></Arg>
</Call>
-->
</New>
<Call name="addConnector">
<Arg>
<New class="org.eclipse.jetty.server.ServerConnector">
<Arg name="server"><Ref refid="Server" /></Arg>
<Arg name="factories">
<Array type="org.eclipse.jetty.server.ConnectionFactory">
<Item>
<New class="org.eclipse.jetty.server.HttpConnectionFactory">
<Arg name="config"><Ref refid="httpConfig" /></Arg>
</New>
</Item>
</Array>
</Arg>
<Set name="host"><Property name="jetty.host" /></Set>
<Set name="port"><Property name="jetty.port" default="8080" /></Set>
<Set name="idleTimeout">30000</Set>
</New>
</Arg>
</Call>

<!-- =========================================================== -->
<!-- Set the default handler structure for the Server            -->
<!-- A handler collection is used to pass received requests to   -->
<!-- both the ContextHandlerCollection, which selects the next   -->
<!-- handler by context path and virtual host, and the         -->
<!-- DefaultHandler, which handles any requests not handled by   -->
<!-- the context handlers.                                       -->
<!-- Other handlers may be added to the "Handlers" collection,   -->
<!-- for example the jetty-requestlog.xml file adds the          -->
<!-- RequestLogHandler after the default handler               -->
<!-- =========================================================== -->
<Set name="handler">
<New id="Handlers" class="org.eclipse.jetty.server.handler.HandlerCollection">
<Set name="handlers">
<Array type="org.eclipse.jetty.server.Handler">
<Item>
<New id="Contexts" class="org.eclipse.jetty.server.handler.ContextHandlerCollection"/>
</Item>
<Item>
<New id="DefaultHandler" class="org.eclipse.jetty.server.handler.DefaultHandler"/>
</Item>
</Array>
</Set>
</New>
</Set>
<!-- =========================================================== -->
<!-- extra server options                                        -->
<!-- =========================================================== -->
<Set name="stopAtShutdown">true</Set>
<Set name="stopTimeout">5000</Set>
<Set name="dumpAfterStart">false</Set>
<Set name="dumpBeforeStop">false</Set>
</Configure>

  三,自定义server启动jetty

package hb.test.jetty;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import org.apache.commons.lang.StringUtils;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.handler.ContextHandlerCollection;
import org.eclipse.jetty.webapp.WebAppContext;
import org.eclipse.jetty.xml.XmlConfiguration;
import org.xml.sax.SAXException;
public class JettyCustomServer extends Server {
private String xmlConfigPath;
private String contextPath;
private String warPath;
private String resourceBase = "./web";
private String webXmlPath = "./web/WEB-INF/web.xml";
public JettyCustomServer(String xmlConfigPath, String contextPath,
String resourceBase, String webXmlPath) {
this(xmlConfigPath, contextPath, resourceBase, webXmlPath, null);
}
public JettyCustomServer(String xmlConfigPath, String contextPath) {
this(xmlConfigPath, contextPath, null, null, null);
}
public JettyCustomServer(String xmlConfigPath, String contextPath,
String warPath) {
this(xmlConfigPath, contextPath, null, null, warPath);
}
public JettyCustomServer(String xmlConfigPath, String contextPath,
String resourceBase, String webXmlPath, String warPath) {
super();
if (StringUtils.isNotBlank(xmlConfigPath)) {
this.xmlConfigPath = xmlConfigPath;
readXmlConfig();
}
//判断是否是根据jetty的发布目录启动工程
if (StringUtils.isNotBlank(warPath)) {
this.warPath = warPath;
if (StringUtils.isNotBlank(contextPath)) {
this.contextPath = contextPath;
applyHandle(true);
}
} else {//自定义web工程的上下文及工程所在的位置
if (StringUtils.isNotBlank(resourceBase))
this.resourceBase = resourceBase;
if (StringUtils.isNotBlank(webXmlPath))
this.webXmlPath = webXmlPath;
if (StringUtils.isNotBlank(contextPath)) {
this.contextPath = contextPath;
applyHandle(false);
}
}
}
/**
*
* @param warDeployFlag
*/
public void applyHandle(Boolean warDeployFlag) {
ContextHandlerCollection handler = new ContextHandlerCollection();
WebAppContext webapp = new WebAppContext();
webapp.setContextPath(contextPath);
webapp.setDefaultsDescriptor("./jetty/etc/webdefault.xml");
if (!warDeployFlag) {
webapp.setResourceBase(resourceBase);
webapp.setDescriptor(webXmlPath);
} else {
webapp.setWar(warPath);
}
handler.addHandler(webapp);
super.setHandler(handler);
}
public void readXmlConfig() {
try {
XmlConfiguration config = new XmlConfiguration(new FileInputStream(
this.xmlConfigPath));
config.configure(this);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
public void startServer() {
try {
super.start();
System.out.println("current thread:"
+ super.getThreadPool().getThreads() + "| idle thread:"
+ super.getThreadPool().getIdleThreads());
super.join();
} catch (Exception e) {
e.printStackTrace();
}
}
public String getXmlConfigPath() {
return xmlConfigPath;
}
public void setXmlConfigPath(String xmlConfigPath) {
this.xmlConfigPath = xmlConfigPath;
}
public String getContextPath() {
return contextPath;
}
public void setContextPath(String contextPath) {
this.contextPath = contextPath;
}
public String getWarPath() {
return warPath;
}
public void setWarPath(String warPath) {
this.warPath = warPath;
}
public String getResourceBase() {
return resourceBase;
}
public void setResourceBase(String resourceBase) {
this.resourceBase = resourceBase;
}
public String getWebXmlPath() {
return webXmlPath;
}
public void setWebXmlPath(String webXmlPath) {
this.webXmlPath = webXmlPath;
}
}


package hb.test.jetty;
public class JettyServerStart {
public static void main(String[] args) {
JettyCustomServer server = new JettyCustomServer("./jetty/etc/jetty.xml","/testContext");
server.startServer();
}
}
页: [1]
查看完整版本: 启动jetty方式