??xml version="1.0" encoding="utf-8" standalone="yes"?>精品久久久中文字幕,超碰在线亚洲,国产中文字幕在线播放http://www.aygfsteel.com/xylz/category/50688.htmlx后端架构、中间g、分布式和高性能RESTful服务zh-cnThu, 12 Apr 2012 03:44:20 GMTThu, 12 Apr 2012 03:44:20 GMT60[深入出Jetty 05] Jetty 模块?/title><link>http://www.aygfsteel.com/xylz/archive/2012/04/12/372999.html</link><dc:creator>imxylz</dc:creator><author>imxylz</author><pubDate>Thu, 12 Apr 2012 01:39:00 GMT</pubDate><guid>http://www.aygfsteel.com/xylz/archive/2012/04/12/372999.html</guid><wfw:comment>http://www.aygfsteel.com/xylz/comments/372999.html</wfw:comment><comments>http://www.aygfsteel.com/xylz/archive/2012/04/12/372999.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/xylz/comments/commentRss/372999.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/xylz/services/trackbacks/372999.html</trackback:ping><description><![CDATA[<!--PageText--> <div class="wmqeeuq" id="wikitext"> <h1><a title="" href="http://www.aygfsteel.com/xylz/archive/2012/03/28/372923.html" target="_blank">Inside in Jetty</a> 8.x 模块?/h1> <p><a title="" href="http://www.aygfsteel.com/xylz/archive/2012/03/28/372923.html" target="_blank">Inside in Jetty</a> 8.x带有一个默认的test环境。我们从q个默认的环境入手? </p> <p class="vspace">首先Q来分析下start.ini里面的配|,q个配置军_启动了哪些模块? </p> <div id="wmqeeuq" class="vspace"></div><pre class="escaped">$ grep -v "#" start.ini|grep -v "^$" OPTIONS=Server,jsp,jmx,resources,websocket,ext,plus,annotations etc/jetty.xml etc/jetty-annotations.xml etc/jetty-deploy.xml etc/jetty-webapps.xml etc/jetty-contexts.xml etc/jetty-testrealm.xml </pre> <p class="vspace">利用上节学到的只是,我们先来分析下用C那些模块? </p><pre class="escaped">java -jar start.jar --list-options </pre> <p class="vspace">查找Server,jsp,jmx,resources,websocket,ext,plus,annotationsq些对应的模块有Q? </p><pre class="escaped">GLOBAL option (Appended Entries) (*) ------------------------------------------------------------- 0: 8.1.2.v20120308 | ${jetty.home}/lib/jetty-util-8.1.2.v20120308.jar 1: 8.1.2.v20120308 | ${jetty.home}/lib/jetty-io-8.1.2.v20120308.jar </pre> <pre class="escaped">Option [Server] (Aggregate) ------------------------------------------------------------- 0: 8.1.2.v20120308 | ${jetty.home}/lib/jetty-xml-8.1.2.v20120308.jar 1: 3.0.0.v201112011016 | ${jetty.home}/lib/servlet-api-3.0.jar 2: 8.1.2.v20120308 | ${jetty.home}/lib/jetty-http-8.1.2.v20120308.jar 3: 8.1.2.v20120308 | ${jetty.home}/lib/jetty-continuation-8.1.2.v20120308.jar 4: 8.1.2.v20120308 | ${jetty.home}/lib/jetty-server-8.1.2.v20120308.jar 5: 8.1.2.v20120308 | ${jetty.home}/lib/jetty-security-8.1.2.v20120308.jar 6: 8.1.2.v20120308 | ${jetty.home}/lib/jetty-servlet-8.1.2.v20120308.jar 7: 8.1.2.v20120308 | ${jetty.home}/lib/jetty-webapp-8.1.2.v20120308.jar 8: 8.1.2.v20120308 | ${jetty.home}/lib/jetty-deploy-8.1.2.v20120308.jar 9: 8.1.2.v20120308 | ${jetty.home}/lib/jetty-servlets-8.1.2.v20120308.jar </pre> <pre class="escaped">Option [jsp] ------------------------------------------------------------- 0: 2.2.0.v201108011116 | ${jetty.home}/lib/jsp/com.sun.el-2.2.0.v201108011116.jar 1: 2.2.0.v201108011116 | ${jetty.home}/lib/jsp/javax.el-2.2.0.v201108011116.jar 2: 1.2.0.v201105211821 | ${jetty.home}/lib/jsp/javax.servlet.jsp.jstl-1.2.0.v201105211821.jar 3: 2.2.0.v201112011158 | ${jetty.home}/lib/jsp/javax.servlet.jsp-2.2.0.v201112011158.jar 4: 2.2.2.v201112011158 | ${jetty.home}/lib/jsp/org.apache.jasper.glassfish-2.2.2.v201112011158.jar 5: 1.2.0.v201112081803 | ${jetty.home}/lib/jsp/org.apache.taglibs.standard.glassfish-1.2.0.v201112081803.jar 6: 3.7.0.M20110909-1335 | ${jetty.home}/lib/jsp/org.eclipse.jdt.core-3.7.1.jar </pre> <pre class="escaped">Option [jmx] ------------------------------------------------------------- 0: 8.1.2.v20120308 | ${jetty.home}/lib/jetty-jmx-8.1.2.v20120308.jar </pre> <pre class="escaped">Option [resources] ------------------------------------------------------------- 0: (dir) | ${jetty.home}/resources </pre> <pre class="escaped">Option [websocket] ------------------------------------------------------------- 0: 8.1.2.v20120308 | ${jetty.home}/lib/jetty-websocket-8.1.2.v20120308.jar </pre> <pre class="escaped">Option [ext] ------------------------------------------------------------- Empty option, no classpath entries active. </pre> <pre class="escaped">Option [plus] ------------------------------------------------------------- 0: 8.1.2.v20120308 | ${jetty.home}/lib/jetty-jndi-8.1.2.v20120308.jar 1: 8.1.2.v20120308 | ${jetty.home}/lib/jetty-plus-8.1.2.v20120308.jar 2: 1.1.0.v201105071233 | ${jetty.home}/lib/jndi/javax.activation-1.1.0.v201105071233.jar 3: 1.4.1.v201005082020 | ${jetty.home}/lib/jndi/javax.mail.glassfish-1.4.1.v201005082020.jar </pre> <pre class="escaped">Option [annotations] ------------------------------------------------------------- 0: 8.1.2.v20120308 | ${jetty.home}/lib/jetty-annotations-8.1.2.v20120308.jar 1: 1.1.0.v201108011116 | ${jetty.home}/lib/annotations/javax.annotation-1.1.0.v201108011116.jar 2: 3.1.0.v200803061910 | ${jetty.home}/lib/annotations/org.objectweb.asm-3.1.0.v200803061910.jar </pre> <p class="vspace">从上一节中我们知道Q这些模块相当于那些组件加入classpath中,jetty在启动时也会装蝲q些模块? </p><pre class="escaped">$java -jar start.jar --dry-run|awk '{print $4}'|sed 's/:/\n/g' /opt/apps/jetty8/lib/jetty-xml-8.1.2.v20120308.jar /opt/apps/jetty8/lib/servlet-api-3.0.jar /opt/apps/jetty8/lib/jetty-http-8.1.2.v20120308.jar /opt/apps/jetty8/lib/jetty-continuation-8.1.2.v20120308.jar /opt/apps/jetty8/lib/jetty-server-8.1.2.v20120308.jar /opt/apps/jetty8/lib/jetty-security-8.1.2.v20120308.jar /opt/apps/jetty8/lib/jetty-servlet-8.1.2.v20120308.jar /opt/apps/jetty8/lib/jetty-webapp-8.1.2.v20120308.jar /opt/apps/jetty8/lib/jetty-deploy-8.1.2.v20120308.jar /opt/apps/jetty8/lib/jetty-servlets-8.1.2.v20120308.jar /opt/apps/jetty8/lib/jetty-annotations-8.1.2.v20120308.jar /opt/apps/jetty8/lib/annotations/javax.annotation-1.1.0.v201108011116.jar /opt/apps/jetty8/lib/annotations/org.objectweb.asm-3.1.0.v200803061910.jar /opt/apps/jetty8/lib/jetty-jmx-8.1.2.v20120308.jar /opt/apps/jetty8/lib/jsp/com.sun.el-2.2.0.v201108011116.jar /opt/apps/jetty8/lib/jsp/javax.el-2.2.0.v201108011116.jar /opt/apps/jetty8/lib/jsp/javax.servlet.jsp.jstl-1.2.0.v201105211821.jar /opt/apps/jetty8/lib/jsp/javax.servlet.jsp-2.2.0.v201112011158.jar /opt/apps/jetty8/lib/jsp/org.apache.jasper.glassfish-2.2.2.v201112011158.jar /opt/apps/jetty8/lib/jsp/org.apache.taglibs.standard.glassfish-1.2.0.v201112081803.jar /opt/apps/jetty8/lib/jsp/org.eclipse.jdt.core-3.7.1.jar /opt/apps/jetty8/lib/jetty-jndi-8.1.2.v20120308.jar /opt/apps/jetty8/lib/jetty-plus-8.1.2.v20120308.jar /opt/apps/jetty8/lib/jndi/javax.activation-1.1.0.v201105071233.jar /opt/apps/jetty8/lib/jndi/javax.mail.glassfish-1.4.1.v201005082020.jar /opt/apps/jetty8/resources /opt/apps/jetty8/lib/jetty-websocket-8.1.2.v20120308.jar /opt/apps/jetty8/lib/jetty-util-8.1.2.v20120308.jar /opt/apps/jetty8/lib/jetty-io-8.1.2.v20120308.jar </pre> <p class="vspace">在ȝ下,不同的OPTION军_了启动不同的模块Q也是不同的组件和classpathQ。另外,对于start.config里面的不同的OPTION可能有相同的模块依赖? </p> <p class="vspace">默认的test.war启动了如下模块: </p><ul><li>Server: 一个标准的servlet容器 </li><li>jsp: jsp模块 </li><li>jmx: jmx支持 </li><li>resources: 允许?{jetty.home}/resources中读取类资源Q实际上是配|log4j.properties) </li><li>websocket: 支持websocket的例? </li><li>ext: ׃${jetty.home}/lib/ext目录为空Q实际上什么都做。其实此Ҏ是Z装蝲自定义的lg依赖? </li><li>plus: 一些扩展支持,从上面classpath中猜,应该是jndi、java认证以及java mail的组件? </li><li>annotations: java注解以及字节码的支持? </li></ul><div id="wmqeeuq" class="vspace"></div><h2>test.war配置</h2> <p>再来看看加蝲jetty配置? test.war模块默认加蝲?个配|组件? </p><pre class="escaped">etc/jetty.xml etc/jetty-annotations.xml etc/jetty-deploy.xml etc/jetty-webapps.xml etc/jetty-contexts.xml etc/jetty-testrealm.xml </pre> <div id="wmqeeuq" class="vspace"></div><h3><a title="" href="http://www.aygfsteel.com/xylz/archive/2012/03/28/372923.html" target="_blank">Inside in Jetty</a>.xml</h3> <p>默认的jetty.xml负责配置讄服务器的参数Q包括绑定的地址、线E池大小以及一些默认的处理?HandlerQ等? </p><pre class="escaped"><Configure id="Server" class="org.eclipse.jetty.server.Server"> <Set name="ThreadPool"> <New class="org.eclipse.jetty.util.thread.QueuedThreadPool"> <Set name="minThreads">10</Set> <Set name="maxThreads">200</Set> <Set name="detailedDump">false</Set> </New> </Set> <Call name="addConnector"> <Arg> <New class="org.eclipse.jetty.server.nio.SelectChannelConnector"> <Set name="host"><Property name="<a title="" href="http://www.aygfsteel.com/xylz/archive/2012/03/28/372923.html" target="_blank">Inside in Jetty</a>.host" /></Set> <Set name="port"><Property name="<a title="" href="http://www.aygfsteel.com/xylz/archive/2012/03/28/372923.html" target="_blank">Inside in Jetty</a>.port" default="8080"/></Set> <Set name="maxIdleTime">300000</Set> <Set name="Acceptors">2</Set> <Set name="statsOn">false</Set> <Set name="confidentialPort">8443</Set> <Set name="lowResourcesConnections">20000</Set> <Set name="lowResourcesMaxIdleTime">5000</Set> </New> </Arg> </Call> <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> <Set name="stopAtShutdown">true</Set> <Set name="sendServerVersion">true</Set> <Set name="sendDateHeader">true</Set> <Set name="gracefulShutdown">1000</Set> <Set name="dumpAfterStart">false</Set> <Set name="dumpBeforeStop">false</Set> </Configure> </pre> <p class="vspace">可以看出默认的线E池大小是最线E?0个,最大线E?00个。绑定在所有网卡的8080端口。其它配|以后再分析? </p> <div id="wmqeeuq" class="vspace"></div><h3><a title="" href="http://www.aygfsteel.com/xylz/archive/2012/03/28/372923.html" target="_blank">Inside in Jetty</a>-annotation.xml</h3> <p><a title="" href="http://www.aygfsteel.com/xylz/archive/2012/03/28/372923.html" target="_blank">Inside in Jetty</a>-annotation.xml配置应该是描q支持哪些注解配|方式? </p><pre class="escaped"> <Call name="setAttribute"> <Arg>org.eclipse.jetty.webapp.configuration</Arg> <Arg> <Array type="java.lang.String"> <Item>org.eclipse.jetty.webapp.WebInfConfiguration</Item> <Item>org.eclipse.jetty.webapp.WebXmlConfiguration</Item> <Item>org.eclipse.jetty.webapp.MetaInfConfiguration</Item> <Item>org.eclipse.jetty.webapp.FragmentConfiguration</Item> <Item>org.eclipse.jetty.annotations.AnnotationConfiguration</Item> <Item>org.eclipse.jetty.webapp.JettyWebXmlConfiguration</Item> </Array> </Arg> </Call> </pre> <div id="wmqeeuq" class="vspace"></div><h3><a title="" href="http://www.aygfsteel.com/xylz/archive/2012/03/28/372923.html" target="_blank">Inside in Jetty</a>-deploy.xml</h3> <p><a title="" href="http://www.aygfsteel.com/xylz/archive/2012/03/28/372923.html" target="_blank">Inside in Jetty</a>-deploy.xml配置web发布方式? </p><pre class="escaped"> <Call name="addBean"> <Arg> <New id="DeploymentManager" class="org.eclipse.jetty.deploy.DeploymentManager"> <Set name="contexts"> <Ref id="Contexts" /> </Set> <Call name="setContextAttribute"> <Arg>org.eclipse.jetty.server.webapp.ContainerIncludeJarPattern</Arg> <Arg>.*/servlet-api-[^/]*\.jar$</Arg> </Call> </New> </Arg> </Call> </pre> <p>事实上这里没有定义要发布的目录或者应用位|,因此jetty-deploy依赖于jetty-contexts.xml或者jetty-webapps.xml? </p> <div id="wmqeeuq" class="vspace"></div><h3><a title="" href="http://www.aygfsteel.com/xylz/archive/2012/03/28/372923.html" target="_blank">Inside in Jetty</a>-webapps.xml</h3> <p><a title="" href="http://www.aygfsteel.com/xylz/archive/2012/03/28/372923.html" target="_blank">Inside in Jetty</a>-webapps.xml定义要发布的内容Q通常是要发布应用或者应用的定义。默认是存放?{jetty.home}/webapps下的应用以及${jetty.home}/contexts下的xml定义? </p><pre class="escaped"> <Ref id="DeploymentManager"> <Call id="webappprovider" name="addAppProvider"> <Arg> <New class="org.eclipse.jetty.deploy.providers.WebAppProvider"> <Set name="monitoredDirName"><Property name="<a title="" href="http://www.aygfsteel.com/xylz/archive/2012/03/28/372923.html" target="_blank">Inside in Jetty</a>.home" default="." />/webapps</Set> <Set name="defaultsDescriptor"><Property name="<a title="" href="http://www.aygfsteel.com/xylz/archive/2012/03/28/372923.html" target="_blank">Inside in Jetty</a>.home" default="."/>/etc/webdefault.xml</Set> <Set name="scanInterval">1</Set> <Set name="contextXmlDir"><Property name="<a title="" href="http://www.aygfsteel.com/xylz/archive/2012/03/28/372923.html" target="_blank">Inside in Jetty</a>.home" default="." />/contexts</Set> <Set name="extractWars">true</Set> </New> </Arg> </Call> </Ref> </pre> <div id="wmqeeuq" class="vspace"></div><h3><a title="" href="http://www.aygfsteel.com/xylz/archive/2012/03/28/372923.html" target="_blank">Inside in Jetty</a>-contexts.xml</h3> <p><a title="" href="http://www.aygfsteel.com/xylz/archive/2012/03/28/372923.html" target="_blank">Inside in Jetty</a>-contexts.xml定义一些预|规则。类g一些拦截器。例如可以讲某些URI rewrite或者静态资源cache配置{? </p> <p class="vspace">q会自动扫描${jetty.home}/contexts下面的xml配置? </p><pre class="escaped"> <Ref id="DeploymentManager"> <Call name="addAppProvider"> <Arg> <New class="org.eclipse.jetty.deploy.providers.ContextProvider"> <Set name="monitoredDirName"><Property name="<a title="" href="http://www.aygfsteel.com/xylz/archive/2012/03/28/372923.html" target="_blank">Inside in Jetty</a>.home" default="." />/contexts</Set> <Set name="scanInterval">1</Set> </New> </Arg> </Call> </Ref> </pre> <div id="wmqeeuq" class="vspace"></div><h3><a title="" href="http://www.aygfsteel.com/xylz/archive/2012/03/28/372923.html" target="_blank">Inside in Jetty</a>-testrealm.xml</h3> <p><a title="" href="http://www.aygfsteel.com/xylz/archive/2012/03/28/372923.html" target="_blank">Inside in Jetty</a>-testrealm.xml用于test.war的特定配|,用于配置一些认证信息? </p><pre class="escaped"> <Call name="addBean"> <Arg> <New class="org.eclipse.jetty.security.HashLoginService"> <Set name="name">Test Realm</Set> <Set name="config"><Property name="<a title="" href="http://www.aygfsteel.com/xylz/archive/2012/03/28/372923.html" target="_blank">Inside in Jetty</a>.home" default="."/>/etc/realm.properties</Set> <Set name="refreshInterval">0</Set> </New> </Arg> </Call> </pre> <div id="wmqeeuq" class="vspace"></div><h2>test.xml</h2> <p>事实上这么模块的配置都是?lt;Configure id="Server" class="org.eclipse.jetty.server.Server">节点配置下? 因此可以合ƈ成一个大的xml。这样做的好处是在一个xml包含所有配|,方便灉|定义。当Ӟ坏处是复用率低? </p><pre class="escaped"><?xml version="1.0"?> <!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure.dtd"> <Configure id="Server" class="org.eclipse.jetty.server.Server"> <Set name="ThreadPool"> <!-- Default queued blocking threadpool --> <New class="org.eclipse.jetty.util.thread.QueuedThreadPool"> <Set name="minThreads">10</Set> <Set name="maxThreads">200</Set> <Set name="detailedDump">false</Set> </New> </Set> <Call name="addConnector"> <Arg> <New class="org.eclipse.jetty.server.nio.SelectChannelConnector"> <Set name="host"><Property name="<a title="" href="http://www.aygfsteel.com/xylz/archive/2012/03/28/372923.html" target="_blank">Inside in Jetty</a>.host" /></Set> <Set name="port"><Property name="<a title="" href="http://www.aygfsteel.com/xylz/archive/2012/03/28/372923.html" target="_blank">Inside in Jetty</a>.port" default="8080"/></Set> <Set name="maxIdleTime">300000</Set> <Set name="Acceptors">2</Set> <Set name="statsOn">false</Set> <Set name="confidentialPort">8443</Set> <Set name="lowResourcesConnections">20000</Set> <Set name="lowResourcesMaxIdleTime">5000</Set> </New> </Arg> </Call> <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> <Set name="stopAtShutdown">true</Set> <Set name="sendServerVersion">true</Set> <Set name="sendDateHeader">true</Set> <Set name="gracefulShutdown">1000</Set> <Set name="dumpAfterStart">false</Set> <Set name="dumpBeforeStop">false</Set> <Call name="setAttribute"> <Arg>org.eclipse.jetty.webapp.configuration</Arg> <Arg> <Array type="java.lang.String"> <Item>org.eclipse.jetty.webapp.WebInfConfiguration</Item> <Item>org.eclipse.jetty.webapp.WebXmlConfiguration</Item> <Item>org.eclipse.jetty.webapp.MetaInfConfiguration</Item> <Item>org.eclipse.jetty.webapp.FragmentConfiguration</Item> <Item>org.eclipse.jetty.annotations.AnnotationConfiguration</Item> <Item>org.eclipse.jetty.webapp.JettyWebXmlConfiguration</Item> </Array> </Arg> </Call> <Call name="addBean"> <Arg> <New id="DeploymentManager" class="org.eclipse.jetty.deploy.DeploymentManager"> <Set name="contexts"> <Ref id="Contexts" /> </Set> <Call name="setContextAttribute"> <Arg>org.eclipse.jetty.server.webapp.ContainerIncludeJarPattern</Arg> <Arg>.*/servlet-api-[^/]*\.jar$</Arg> </Call> </New> </Arg> </Call> <Ref id="DeploymentManager"> <Call id="webappprovider" name="addAppProvider"> <Arg> <New class="org.eclipse.jetty.deploy.providers.WebAppProvider"> <Set name="monitoredDirName"><Property name="<a title="" href="http://www.aygfsteel.com/xylz/archive/2012/03/28/372923.html" target="_blank">Inside in Jetty</a>.home" default="." />/webapps</Set> <Set name="defaultsDescriptor"><Property name="<a title="" href="http://www.aygfsteel.com/xylz/archive/2012/03/28/372923.html" target="_blank">Inside in Jetty</a>.home" default="."/>/etc/webdefault.xml</Set> <Set name="scanInterval">1</Set> <Set name="contextXmlDir"><Property name="<a title="" href="http://www.aygfsteel.com/xylz/archive/2012/03/28/372923.html" target="_blank">Inside in Jetty</a>.home" default="." />/contexts</Set> <Set name="extractWars">true</Set> </New> </Arg> </Call> </Ref> <Ref id="DeploymentManager"> <Call name="addAppProvider"> <Arg> <New class="org.eclipse.jetty.deploy.providers.ContextProvider"> <Set name="monitoredDirName"><Property name="<a title="" href="http://www.aygfsteel.com/xylz/archive/2012/03/28/372923.html" target="_blank">Inside in Jetty</a>.home" default="." />/contexts</Set> <Set name="scanInterval">1</Set> </New> </Arg> </Call> </Ref> <Call name="addBean"> <Arg> <New class="org.eclipse.jetty.security.HashLoginService"> <Set name="name">Test Realm</Set> <Set name="config"><Property name="<a title="" href="http://www.aygfsteel.com/xylz/archive/2012/03/28/372923.html" target="_blank">Inside in Jetty</a>.home" default="."/>/etc/realm.properties</Set> <Set name="refreshInterval">0</Set> </New> </Arg> </Call> </Configure> </pre> <p class="vspace">我们test.xml攑օetc目录下面。这是保持start.ini文g不存在,也就是不使用start.ini里面的配|? </p> <p class="vspace">手动q行它? </p><pre class="escaped">java -jar start.jar OPTIONS=Server,jsp,jmx,resources,websocket,ext,plus,annotations etc/test.xml </pre> <p class="vspace">q时候的启动和默认启动是一L了? </p> <p class="vspace">q时候就可以讉K了? </p> <div id="wmqeeuq" class="vspace"></div><h2><a title="" href="http://www.aygfsteel.com/xylz/archive/2012/03/28/372923.html" target="_blank">Inside in Jetty</a> Statistics</h2> <p>q一部分Q我们利用学习到的只是来部v一个Jettyl计模块? </p> <div id="wmqeeuq" class="vspace"></div><h3>修改讄</h3> <p>连接计数参数打开Q? </p><pre class="escaped"> <Call name="addConnector"> <Arg> <New class="org.eclipse.jetty.server.nio.SelectChannelConnector"> <Set name="host"><Property name="<a title="" href="http://www.aygfsteel.com/xylz/archive/2012/03/28/372923.html" target="_blank">Inside in Jetty</a>.host" /></Set> <Set name="port"><Property name="<a title="" href="http://www.aygfsteel.com/xylz/archive/2012/03/28/372923.html" target="_blank">Inside in Jetty</a>.port" default="8080"/></Set> <Set name="maxIdleTime">300000</Set> <Set name="Acceptors">2</Set> <Set name="statsOn">true</Set><!-- modify this --> </New> </Arg> </Call> </pre> <div id="wmqeeuq" class="vspace"></div><h3>讄servlet</h3> <p>Z不媄响默认的test.war环境Q我们增加一个最单的WAR环境? </p> <p class="vspace">Ҏ前面学到的知识,只需要将war环境攑ֈwebapps目录下即可。可以是一个war包,也可以是一个以.warl尾的目录? </p><pre class="escaped">$tree webapps/demo.war/ webapps/demo.war/ `-- WEB-INF |-- <a title="" href="http://www.aygfsteel.com/xylz/archive/2012/03/28/372923.html" target="_blank">Inside in Jetty</a>-web.xml `-- web.xml 1 directory, 2 files </pre> <div id="wmqeeuq" class="vspace"></div><pre class="escaped">$cat webapps/demo.war/WEB-INF/jetty-web.xml </pre> <pre class="escaped"><?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN" "http://www.eclipse.org/jetty/configure.dtd"> <Configure class="org.eclipse.jetty.webapp.WebAppContext"> <Set name="contextPath">/demo</Set> </Configure> </pre> <div id="wmqeeuq" class="vspace"></div><pre class="escaped">$cat webapps/demo.war/WEB-INF/web.xml </pre> <pre class="escaped"><?xml version="1.0" encoding="ISO-8859-1"?> <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" metadata-complete="false" version="3.0"> <display-name>static demo</display-name> <servlet> <servlet-name>statistic</servlet-name> <servlet-class>org.eclipse.jetty.servlet.StatisticsServlet</servlet-class> <load-on-startup>1</load-on-startup> <init-param> <param-name>restrictToLocalhost</param-name><param-value>false</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>statistic</servlet-name> <url-pattern>/statistic/*</url-pattern> </servlet-mapping> </web-app> </pre> <p class="vspace">说明几点Q? </p><ul><li>Z不和test.war的contextPathhQ这里强制修改ؓ/demo? </li><li>增加一个jetty内置的统计servlet(org.eclipse.jetty.servlet.StatisticsServlet) </li><li>servlet的参数restrictToLocalhost修改为falseQ否则默认情况下只能通过本机讉KQ不能远E访? </li></ul><div id="wmqeeuq" class="vspace"></div><h3>q行demo</h3> <p>保持test.war不变增加一个统计配|? </p><pre class="escaped">$java -jar start.jar etc/jetty-stats.xml </pre> <div id="wmqeeuq" class="vspace"></div><h3>执行效果</h3> <p>使用览器访? </p><pre class="escaped">http://127.0.0.1:8080/demo/statistic/ </pre> <p class="vspace">效果如下Q? </p><div><img src="http://dev.imxylz.info/wiki/./wiki/upload/Jetty/statistic1.png" alt="" title="" /></div> <div><img src="http://dev.imxylz.info/wiki/./wiki/upload/Jetty/statistic2.png" alt="" title="" /></div> <p class="vspace">l计l果包含6个部分: </p><ol><li>l计l果攉旉 </li><li>h数详情(当前h数、最大请求数、dh数、请求时间等Q? </li><li>h分发详情Q和hC同的是,q是jetty内部分发h的数量,包括forward/include{) </li><li>响应状态详情(1xx/2xx/3xx/4xx/5xx以及d发送的字节敎ͼ </li><li>q接数详?Q当前连接数、最大连接数、连接持l时间等Q? </li><li>内存状况Q堆内存和非堆内存用状?非堆内存通常也称怹代内存) </li></ol><div id="wmqeeuq" class="vspace"></div><h2>结</h2> <p><a title="" href="http://www.aygfsteel.com/xylz/archive/2012/03/28/372923.html" target="_blank">Inside in Jetty</a> 8.x已经各个模块拆分非常详l了。每一个模块的命名都非常有规律。通常从名UCp够猜出模块的作用? </p> <p class="vspace">部分模块可能q需要对应的配置?{jetty.home}/etc下面有大量的配置Q这些零散的配置拆分是ؓ了可复用? 如果一个jetty要想启动多个javaq程Q那么只需要指定不同的配置卛_。甚至ؓ了方便定制化Q可能ؓ每一个javaq程创徏一个完整的jetty.xml配置Q而不需?{jetty.home}/etc下面的配|? </p> </div><img src ="http://www.aygfsteel.com/xylz/aggbug/372999.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/xylz/" target="_blank">imxylz</a> 2012-04-12 09:39 <a href="http://www.aygfsteel.com/xylz/archive/2012/04/12/372999.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[深入出Jetty] 文章索引http://www.aygfsteel.com/xylz/archive/2012/04/12/371612.htmlimxylzimxylzThu, 12 Apr 2012 01:38:00 GMThttp://www.aygfsteel.com/xylz/archive/2012/04/12/371612.htmlhttp://www.aygfsteel.com/xylz/comments/371612.htmlhttp://www.aygfsteel.com/xylz/archive/2012/04/12/371612.html#Feedback0http://www.aygfsteel.com/xylz/comments/commentRss/371612.htmlhttp://www.aygfsteel.com/xylz/services/trackbacks/371612.html
  1. [深入出Jetty 01] Jetty 8.x 安装
  2. [深入出Jetty 02] Jetty 8.x 单试?/a>
  3. [深入出Jetty 03] 单的RESTful入门
  4. [深入出Jetty 04] Jetty的启动方?/a>
  5. [深入出Jetty 05] Jetty 模块?/a>


imxylz 2012-04-12 09:38 发表评论
]]>
[深入出Jetty 04]Jetty的启动方?/title><link>http://www.aygfsteel.com/xylz/archive/2012/03/28/372923.html</link><dc:creator>imxylz</dc:creator><author>imxylz</author><pubDate>Wed, 28 Mar 2012 11:02:00 GMT</pubDate><guid>http://www.aygfsteel.com/xylz/archive/2012/03/28/372923.html</guid><wfw:comment>http://www.aygfsteel.com/xylz/comments/372923.html</wfw:comment><comments>http://www.aygfsteel.com/xylz/archive/2012/03/28/372923.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.aygfsteel.com/xylz/comments/commentRss/372923.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/xylz/services/trackbacks/372923.html</trackback:ping><description><![CDATA[Jetty提供了众多的参数和配|来保证满不同场景下的启动方式?br /> <br /> 除了极大方便嵌入式启动之外,从程序外部也非常好容易启动jetty?br /><br />[原文Qhttp://www.aygfsteel.com/xylz/archive/2012/03/28/372923.html]<br /> <h2>q行方式</h2> <h3>q行Ҏ1</h3> 首先我们以一个标准的jarE序启动来看待这个问? <br /> <div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->[adyliu<span style="color: #800080; ">@adyliu</span>-pc jetty8]<span style="color: #008000; ">$</span><span style="color: #008000; "> cat run.sh <br /> #!/bin/bash</span><span style="color: #008000; "><br /> </span><br /> JETTY_CLASSPATH=<span style="font-weight: bold; ">"</span><span style="font-weight: bold; ">./start.jar</span><span style="font-weight: bold; ">"</span><br /> <span style="color: #0000FF; ">for</span> f in `find ./lib -name <span style="font-weight: bold; ">"</span><span style="font-weight: bold; ">*.jar</span><span style="font-weight: bold; ">"</span>`<br /> <span style="color: #0000FF; ">do</span><br />     JETTY_CLASSPATH=<span style="color: #800080; ">$JETTY_CLASSPATH</span>:<span style="color: #800080; ">$f</span><br /> done<br /> <br /> <span style="color: #008000; ">#</span><span style="color: #008000; ">echo $JETTY_CLASSPATH</span><span style="color: #008000; "><br /> </span>java -cp <span style="color: #800080; ">$JETTY_CLASSPATH</span> $*</div> <br /> <div>然后q行查看?/div> <div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->[adyliu<span style="color: #800080; ">@adyliu</span>-pc jetty8]<span style="color: #008000; ">$</span><span style="color: #008000; "> sh run.sh org.eclipse.jetty.start.Main</span><span style="color: #008000; "><br /> </span><span style="color: #800000; ">2012</span>-<span style="color: #800000; ">03</span>-<span style="color: #800000; ">28</span> <span style="color: #800000; ">16</span>:<span style="color: #800000; ">00</span>:<span style="color: #800000; ">57.532</span>:INFO:oejs.Server:jetty-<span style="color: #800000; ">8.1</span>.<span style="color: #800000; ">2</span>.v20120308<br /> <span style="color: #800000; ">2012</span>-<span style="color: #800000; ">03</span>-<span style="color: #800000; ">28</span> <span style="color: #800000; ">16</span>:<span style="color: #800000; ">00</span>:<span style="color: #800000; ">57.578</span>:INFO:oejs.AbstractConnector:Started SelectChannelConnector@<span style="color: #800000; ">0.0</span>.<span style="color: #800000; ">0.0</span>:<span style="color: #800000; ">8080</span></div> <div><br /> ׃没有Mweb环境Q因此此时访问Q何地址应该都是404。测试一下:</div> <div style="font-size: 13px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: #cccccc; border-right-color: #cccccc; border-bottom-color: #cccccc; border-left-color: #cccccc; border-image: initial; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; padding-top: 4px; width: 98%; word-break: break-all; background-color: #eeeeee; "><!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->[adyliu<span style="color: #800080; ">@adyliu</span>-pc jetty8]<span style="color: #008000; ">$</span><span style="color: #008000; "> curl -v http://127.0.0.1:8080</span><span style="color: #008000; "><br /> </span>* About to <span style="color: #0000FF; ">connect</span>() to <span style="color: #800000; ">127.0</span>.<span style="color: #800000; ">0.1</span> port <span style="color: #800000; ">8080</span><br /> *   Trying <span style="color: #800000; ">127.0</span>.<span style="color: #800000; ">0.1</span><img src="http://www.aygfsteel.com/Images/dot.gif" alt="" /> connected<br /> * Connected to <span style="color: #800000; ">127.0</span>.<span style="color: #800000; ">0.1</span> (<span style="color: #800000; ">127.0</span>.<span style="color: #800000; ">0.1</span>) port <span style="color: #800000; ">8080</span><br /> > GET / HTTP/<span style="color: #800000; ">1.1</span><br /> > User-Agent: curl/<span style="color: #800000; ">7.15</span>.<span style="color: #800000; ">5</span> (x86_64-redhat-linux-gnu) libcurl/<span style="color: #800000; ">7.15</span>.<span style="color: #800000; ">5</span> OpenSSL/<span style="color: #800000; ">0.9</span>.8b zlib/<span style="color: #800000; ">1.2</span>.<span style="color: #800000; ">3</span> libidn/<span style="color: #800000; ">0.6</span>.<span style="color: #800000; ">5</span><br /> > Host: <span style="color: #800000; ">127.0</span>.<span style="color: #800000; ">0.1</span>:<span style="color: #800000; ">8080</span><br /> > <span style="color: #0000FF; ">Accept</span>: */*<br /> > <br /> < HTTP/<span style="color: #800000; ">1.1</span> <span style="color: #800000; ">404</span> Not Found<br /> < Date: Wed, <span style="color: #800000; ">28</span> Mar <span style="color: #800000; ">2012</span> <span style="color: #800000; ">08</span>:<span style="color: #800000; ">15</span>:<span style="color: #800000; ">27</span> GMT<br /> < Content-Type: text/html<br /> < Content-<span style="color: #0000FF; ">Length</span>: <span style="color: #800000; ">618</span><br /> < Server: Jetty(<span style="color: #800000; ">8.1</span>.<span style="color: #800000; ">2</span>.v20120308)<br /> <HTML><br /> <HEAD><br /> <TITLE>Error <span style="color: #800000; ">404</span> - Not Found</TITLE><br /> <BODY><br /> <H2>Error <span style="color: #800000; ">404</span> - Not Found.</H2></div> <h3>q行Ҏ2</h3> <div>另外上述q行{h于:</div> <div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->[adyliu<span style="color: #800080; ">@adyliu</span>-pc jetty8]<span style="color: #008000; ">$</span><span style="color: #008000; "> sh run.sh org.eclipse.jetty.xml.XmlConfiguration etc/jetty.xml</span><span style="color: #008000; "><br /> </span><span style="color: #800000; ">2012</span>-<span style="color: #800000; ">03</span>-<span style="color: #800000; ">28</span> <span style="color: #800000; ">16</span>:<span style="color: #800000; ">31</span>:<span style="color: #800000; ">16.481</span>:INFO:oejs.Server:jetty-<span style="color: #800000; ">8.1</span>.<span style="color: #800000; ">2</span>.v20120308<br /> <span style="color: #800000; ">2012</span>-<span style="color: #800000; ">03</span>-<span style="color: #800000; ">28</span> <span style="color: #800000; ">16</span>:<span style="color: #800000; ">31</span>:<span style="color: #800000; ">16.518</span>:INFO:oejs.AbstractConnector:Started SelectChannelConnector@<span style="color: #800000; ">0.0</span>.<span style="color: #800000; ">0.0</span>:<span style="color: #800000; ">8080</span></div> <h3>q行Ҏ3</h3> <div>W三U方法就是用封装好的start.jarQ这个jar包封装了一些常规的配置?/div> <div><br /> 在开始之前,我们先重命名下默认的start.iniQ因为默认的配置文g会启动一个test.war环境?/div> <div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->mv start.ini start.ini.default</div> <div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->[adyliu<span style="color: #800080; ">@adyliu</span>-pc jetty8]<span style="color: #008000; ">$</span><span style="color: #008000; "> java -jar start.jar</span><span style="color: #008000; "><br /> </span><span style="color: #800000; ">2012</span>-<span style="color: #800000; ">03</span>-<span style="color: #800000; ">28</span> <span style="color: #800000; ">16</span>:<span style="color: #800000; ">35</span>:<span style="color: #800000; ">21.941</span>:INFO:oejs.Server:jetty-<span style="color: #800000; ">8.1</span>.<span style="color: #800000; ">2</span>.v20120308<br /> <span style="color: #800000; ">2012</span>-<span style="color: #800000; ">03</span>-<span style="color: #800000; ">28</span> <span style="color: #800000; ">16</span>:<span style="color: #800000; ">35</span>:<span style="color: #800000; ">21.992</span>:INFO:oejs.AbstractConnector:Started SelectChannelConnector@<span style="color: #800000; ">0.0</span>.<span style="color: #800000; ">0.0</span>:<span style="color: #800000; ">8080</span></div> <div><br /> 可以看出q个方式和第一U、第二种完全相同?/div> <div></div> <div>另外start.jar提供了一U可以查看当前运行参数的命oQ?/div> <div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->java -jar start.jar --dry-run</div> <div><br /> 可能输出:</div> <div style="font-size: 13px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: #cccccc; border-right-color: #cccccc; border-bottom-color: #cccccc; border-left-color: #cccccc; border-image: initial; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; padding-top: 4px; width: 98%; word-break: break-all; background-color: #eeeeee; "><!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->/opt/apps/jdk/bin/java -Djetty.home=/opt/apps/jetty8 -cp /opt/apps/jetty8/resources:\<br /> /opt/apps/jetty8/lib/jetty-xml-<span style="color: #800000; ">8.1</span>.<span style="color: #800000; ">2</span>.v20120308.jar:/opt/apps/jetty8/lib/servlet-api-<span style="color: #800000; ">3.0</span>.jar:\<br /> /opt/apps/jetty8/lib/jetty-http-<span style="color: #800000; ">8.1</span>.<span style="color: #800000; ">2</span>.v20120308.jar:/opt/apps/jetty8/lib/jetty-continuation-<span style="color: #800000; ">8.1</span>.<span style="color: #800000; ">2</span>.v20120308.jar:\<br /> /opt/apps/jetty8/lib/jetty-server-<span style="color: #800000; ">8.1</span>.<span style="color: #800000; ">2</span>.v20120308.jar:/opt/apps/jetty8/lib/jetty-security-<span style="color: #800000; ">8.1</span>.<span style="color: #800000; ">2</span>.v20120308.jar:\<br /> /opt/apps/jetty8/lib/jetty-servlet-<span style="color: #800000; ">8.1</span>.<span style="color: #800000; ">2</span>.v20120308.jar:/opt/apps/jetty8/lib/jetty-webapp-<span style="color: #800000; ">8.1</span>.<span style="color: #800000; ">2</span>.v20120308.jar:\<br /> /opt/apps/jetty8/lib/jetty-deploy-<span style="color: #800000; ">8.1</span>.<span style="color: #800000; ">2</span>.v20120308.jar:/opt/apps/jetty8/lib/jetty-servlets-<span style="color: #800000; ">8.1</span>.<span style="color: #800000; ">2</span>.v20120308.jar:\<br /> /opt/apps/jetty8/lib/jetty-util-<span style="color: #800000; ">8.1</span>.<span style="color: #800000; ">2</span>.v20120308.jar:/opt/apps/jetty8/lib/jetty-io-<span style="color: #800000; ">8.1</span>.<span style="color: #800000; ">2</span>.v20120308.jar \<br /> org.eclipse.jetty.xml.XmlConfiguration /tmp/start1059041541723976621.properties /opt/apps/jetty8/etc/jetty.xml</div> <div><br /> 有意思的是这里有一个时文Ӟ/tmp/start1059041541723976621.propertiesQ里面记录了所有系l属性,也就是类似System.getProperties()?/div> <div>除非是嵌入式开发,否则我们都是用start.jar来启动jetty?/div> <h2>命o参数</h2> <div>start.jar提供了大量的参数来负责启动JVM?/div> <div>下面命o列出所有的命o行参敎ͼ</div> <div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->java -jar start.jar --help</div> <div><br /> 现在问题来了Q这些默认的参数都是哪来的?例如Q如果想改变<em>${jetty.home}</em>又怎样Q?/div> <div>jetty内部默认提供了一个默认的配置文g<a target="_blank">start.config</a>来解x问题?/div> <div>默认情况下start.jar里面带有一个默认的start.config文gQ这个文件有一些预|的定义?/div> <div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->[adyliu<span style="color: #800080; ">@adyliu</span>-pc jetty8]$ jar tvf start.jar | <span style="color: #0000FF; ">grep</span> start.config<br />   <span style="color: #800000; ">8669</span> Fri Mar <span style="color: #800000; ">09</span> <span style="color: #800000; ">00</span>:<span style="color: #800000; ">13</span>:<span style="color: #800000; ">12</span> CST <span style="color: #800000; ">2012</span> org/eclipse/jetty/start/start.config</div> <a target="_blank"><br /> start.config</a> 文g内容非常大,其中大部分是注释?br /> <p style="margin-top: 1.33em; margin-bottom: 0px; font-family: Arial, Helvetica, sans-serif; font-size: 15px; line-height: 19px; background-color: #ffffff; ">start.config的作用有以下几个Q?/p> <ul style="margin-top: 0px; margin-bottom: 0px; border-left-width: 5px; border-left-style: solid; border-left-color: #dddddd; font-family: Arial, Helvetica, sans-serif; font-size: 15px; line-height: 19px; background-color: #ffffff; "> <li>定义jetty.home属?/li> <li>定义jetty启动c?/li> <li>定义jetty启动的默认配|文?/li> <li>定义OPTIONS</li> <li>ҎOPTIONS来定义classpath</li> </ul> <p style="margin-top: 1.33em; margin-bottom: 0px; font-family: Arial, Helvetica, sans-serif; font-size: 15px; line-height: 19px; background-color: #ffffff; ">上面特别提到OPTIONS。什么是OPTIONSQ?/p> <div style="margin-top: 1.33em; font-family: Arial, Helvetica, sans-serif; font-size: 15px; line-height: 19px; background-color: #ffffff; "></div> <h3>OPTIONS</h3> <p style="margin-top: 0px; margin-bottom: 0px; font-family: Arial, Helvetica, sans-serif; font-size: 15px; line-height: 19px; background-color: #ffffff; ">׃jetty是高度可定制的,因此jetty各个模块拆分成各个非常l小的模块。每一个模块(实际上是一个个的jar包)Q我们可以简单的看出是一个OPTION。而每一个OPTION都会对应于实际的jarQ这决定了q些jar包是否需要加入classpathQƈ且在jetty启动的时候是否需要做一些额外的事情?/p> <p style="margin-top: 1.33em; margin-bottom: 0px; font-family: Arial, Helvetica, sans-serif; font-size: 15px; line-height: 19px; background-color: #ffffff; ">start.config文g的语法也挺有意思的。支持一些简单的逻辑判断Q例如文件是否存在、命令行参数是否存在{?/p> <p style="margin-top: 1.33em; margin-bottom: 0px; font-family: Arial, Helvetica, sans-serif; font-size: 15px; line-height: 19px; background-color: #ffffff; ">默认情况下有如下配置Q?/p> <ul style="margin-top: 0px; margin-bottom: 0px; border-left-width: 5px; border-left-style: solid; border-left-color: #dddddd; font-family: Arial, Helvetica, sans-serif; font-size: 15px; line-height: 19px; background-color: #ffffff; "> <li>path参数的值加入classpath</li> <li>lib参数的g为目录搜索jar包,其中的jar/zip包加入classpath</li> <li>默认的启动类是org.eclipse.jetty.xml.XmlConfiguration.classQ除非定义了start.class属?/li> <li>默认的jetty配置文g?(jetty.home)/etc/jetty.xmlQ除非传入的参数不ؓI?/li> <li>默认${jetty.home}目录是当前目录(不一定是start.jar所在\径)?{jetty.home}属性搜索顺序有Q? <ul style="margin-top: 0px; margin-bottom: 0px; border-left-width: 5px; border-left-style: solid; border-left-color: #dddddd; "> <li>$(jetty.home) 参数或者系l属性(包括环境变量Q?/li> <li>. 当前路径</li> <li>.. 当前路径的父路径</li> <li>jetty-distribution/src/main/resources 当前路径的发行版子\?/li> <li>../jetty-distribution/src/main/resources 当前路径的父路径的发行版子\?/li> </ul> </li> <li>默认的classpath有: <ul style="margin-top: 0px; margin-bottom: 0px; border-left-width: 5px; border-left-style: solid; border-left-color: #dddddd; "> <li>resources</li> <li>lib/jetty-xml-8.1.2.v20120308.jar</li> <li>lib/servlet-api-3.0.jar</li> <li>lib/jetty-http-8.1.2.v20120308.jar</li> <li>lib/jetty-continuation-8.1.2.v20120308.jar</li> <li>lib/jetty-server-8.1.2.v20120308.jar</li> <li>lib/jetty-security-8.1.2.v20120308.jar</li> <li>lib/jetty-servlet-8.1.2.v20120308.jar</li> <li>lib/jetty-webapp-8.1.2.v20120308.jar</li> <li>lib/jetty-deploy-8.1.2.v20120308.jar</li> <li>lib/jetty-servlets-8.1.2.v20120308.jar</li> <li>lib/jetty-util-8.1.2.v20120308.jar</li> <li>lib/jetty-io-8.1.2.v20120308.jar</li> </ul> </li> </ul> <div style="margin-top: 1.33em; font-family: Arial, Helvetica, sans-serif; font-size: 15px; line-height: 19px; background-color: #ffffff; "></div> <h3>start.jar参数</h3> <p style="margin-top: 0px; margin-bottom: 0px; font-family: Arial, Helvetica, sans-serif; font-size: 15px; line-height: 19px; background-color: #ffffff; ">我们再来看start.jar支持的参敎ͼ</p> <div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->[adyliu<span style="color: #800080; ">@adyliu</span>-pc jetty8]<span style="color: #008000; ">#</span><span style="color: #008000; "> java -jar start.jar --help</span><span style="color: #008000; "><br /> </span>Usage: java -jar start.jar [options<img src="http://www.aygfsteel.com/Images/dot.gif" alt="" />] [properties<img src="http://www.aygfsteel.com/Images/dot.gif" alt="" />] [configs<img src="http://www.aygfsteel.com/Images/dot.gif" alt="" />]</div> <br /> <h4>options</h4> <p style="margin-top: 0px; margin-bottom: 0px; font-family: Arial, Helvetica, sans-serif; font-size: 15px; line-height: 19px; background-color: #ffffff; ">其中options列表Q这指的是命令行参数Q不是模块,由此可见jetty内|的OPTIONS定义为模块多好)有:</p> <ul style="margin-top: 0px; margin-bottom: 0px; border-left-width: 5px; border-left-style: solid; border-left-color: #dddddd; font-family: Arial, Helvetica, sans-serif; font-size: 15px; line-height: 19px; background-color: #ffffff; "> <li>--version 列出版本?/li> <li>--list-options 列出当前start.config支持的所有OPTIONS</li> <li>--list-config 列出当前start.config内容Q文本内容)</li> <li>--dry-run 列出当前配置要启动的javaq程完整参数Q不启动jetty服务Q?/li> <li>--exec 启动子进E(只有启动子进E才能修?XQ?D{参敎ͼ因ؓstart.jar本n是依靠javaq程启动的,不能在运行时改变Q?/li> <li>--stop 停止q行的jetty实例</li> <li>--daemon 后台q行jettyQ启动将stdout/stderr记录?{jetty.log}/start.log中(好了Q这个变量jetty.log没有默认配置说明Q估计是${jetty.home}/logs目录Q?/li> <li>--config=<file> 指定特别的start.configQ以便覆盖内|的start.config.(l过试Q如果指定此文gQ那么内|的配置不再读取,q导致必d所有配|写全,包括mainclass/jetty config/OPTIONS{)</li> <li>--ini=<file> 从配|文件中装蝲命o行参数。上面参C及下面提到的参数是在太多Q可以从配置文g中一ơ性加载,默认的配|文件是${jetty.home}/start.ini?/li> <li>--pre=<file> 指定特别的jettyq行配置文gQ这个配|文件在后面提高的配|文件前面运行,相当于改变默认的装蝲机制?/li> </ul> <div style="margin-top: 1.33em; font-family: Arial, Helvetica, sans-serif; font-size: 15px; line-height: 19px; background-color: #ffffff; "></div> <h4>properties</h4> <p style="margin-top: 0px; margin-bottom: 0px; font-family: Arial, Helvetica, sans-serif; font-size: 15px; line-height: 19px; background-color: #ffffff; ">属性分成两U,一U是会传递给pȝ属性(java.lang.System#getProperty(String)),一U只是作为jetty的启动参数?/p> <p style="margin-top: 1.33em; margin-bottom: 0px; font-family: Arial, Helvetica, sans-serif; font-size: 15px; line-height: 19px; background-color: #ffffff; ">如果要传递给pȝ属性,则格式是Q?-Dname=valueQ和javaq程pȝ属性类伹{?/p> <p style="margin-top: 1.33em; margin-bottom: 0px; font-family: Arial, Helvetica, sans-serif; font-size: 15px; line-height: 19px; background-color: #ffffff; ">jetty也有一些默认的pȝ属性:</p> <table border="1" width="80%" style="font-size: 15px; line-height: 19px; border-color: initial; background-image: none; background-attachment: scroll; background-origin: initial; background-clip: initial; background-color: #ffffff; border-collapse: collapse; color: #000000; font-family: Arial, Helvetica, sans-serif; background-position: 0px 0px; background-repeat: repeat repeat; "> <tbody> <tr> <th>属?/th><th>cd</th><th>描述</th> </tr> <tr> <td>org.eclipse.jetty.util.log.class</td> <td>class</td> <td>jetty日志记录Q默认ؓQorg.eclipse.jetty.util.log.Slf4jLog</td> </tr> <tr> <td>org.eclipse.jetty.util.log.DEBUG</td> <td>boolean</td> <td>调试日志输出地方Q默认ؓstderr和java内置的LoggerQ如果是其他日志则需要设|ؓtrueQ默认ؓfalse</td> </tr> <tr> <td>org.eclipse.jetty.util.log.IGNORED</td> <td>boolean</td> <td>是否记录一些忽略的错误日志Q默认ؓfalse</td> </tr> <tr> <td>org.eclipse.jetty.util.log.SOURCE</td> <td>boolean</td> <td>记录错误日志行号Q位|?默认为false</td> </tr> <tr> <td>com.sun.management.jmxremote</td> <td> </td> <td>启动jmx理</td> </tr> </tbody> </table> <p style="margin-top: 1.33em; margin-bottom: 0px; font-family: Arial, Helvetica, sans-serif; font-size: 15px; line-height: 19px; background-color: #ffffff; ">jetty的启动参数属性,格式是: name=valueQ注意这里没?D了。这些参C会传递给pȝ属性?/p> <p style="margin-top: 1.33em; margin-bottom: 0px; font-family: Arial, Helvetica, sans-serif; font-size: 15px; line-height: 19px; background-color: #ffffff; ">所有参数列表:</p> <ul style="margin-top: 0px; margin-bottom: 0px; border-left-width: 5px; border-left-style: solid; border-left-color: #dddddd; font-family: Arial, Helvetica, sans-serif; font-size: 15px; line-height: 19px; background-color: #ffffff; "> <li>path=[directory]: 传递额外的classpathQ参考上面默认的start.config配置</li> <li>lib=[directory]: 传递额外classpath搜烦jar/zip的目?/li> <li>STOP.PORT=[number]: 停止jetty的端口(q程理Q?/li> <li>STOP.KEY=[alphanumeric]: 停止jetty的密码(q程理Q?/li> <li>DEBUG=true: 是否启动调试模式Q同时会讄org.eclipse.jetty.util.log.DEBUG属性ؓtrueQ默认ؓfalse</li> <li>OPTIONS=[option,option...]: OPTION列表Q也是要启动的模块列表?/li> </ul> <p style="margin-top: 1.33em; margin-bottom: 0px; font-family: Arial, Helvetica, sans-serif; font-size: 15px; line-height: 19px; background-color: #ffffff; ">在内|的start.config中默认的OPTIONS列表有:</p> <ul style="margin-top: 0px; margin-bottom: 0px; border-left-width: 5px; border-left-style: solid; border-left-color: #dddddd; font-family: Arial, Helvetica, sans-serif; font-size: 15px; line-height: 19px; background-color: #ffffff; "> <li>All</li> <li>Client</li> <li>Server</li> <li>ajp</li> <li>annotations</li> <li>client</li> <li>default</li> <li>deploy</li> <li>ext</li> <li>jmx</li> <li>jndi</li> <li>jsp</li> <li>jta</li> <li>monitor</li> <li>overlay</li> <li>overlays</li> <li>plus</li> <li>policy</li> <li>resources</li> <li>rewrite</li> <li>security</li> <li>server</li> <li>servlet</li> <li>servlets</li> <li>setuid</li> <li>webapp</li> <li>websocket</li> <li>xml</li> </ul> <div style="margin-top: 1.33em; font-family: Arial, Helvetica, sans-serif; font-size: 15px; line-height: 19px; background-color: #ffffff; "></div> <h4>configs</h4> <p style="margin-top: 0px; margin-bottom: 0px; font-family: Arial, Helvetica, sans-serif; font-size: 15px; line-height: 19px; background-color: #ffffff; ">jettyq行需要一些配|文Ӟq些配置文g对应于不同的OPTION所需要的配置?/p> <p style="margin-top: 1.33em; margin-bottom: 0px; font-family: Arial, Helvetica, sans-serif; font-size: 15px; line-height: 19px; background-color: #ffffff; ">默认的jetty配置存在都存在于${jetty.home}/etc中,所有配|文件列表有Q?/p> <ul style="margin-top: 0px; margin-bottom: 0px; border-left-width: 5px; border-left-style: solid; border-left-color: #dddddd; font-family: Arial, Helvetica, sans-serif; font-size: 15px; line-height: 19px; background-color: #ffffff; "> <li>etc/jetty-ajp.xml</li> <li>etc/jetty-annotations.xml</li> <li>etc/jetty-bio-ssl.xml</li> <li>etc/jetty-bio.xml</li> <li>etc/jetty-contexts.xml</li> <li>etc/jetty-debug.xml</li> <li>etc/jetty-deploy.xml</li> <li>etc/jetty-fileserver.xml</li> <li>etc/jetty-ipaccess.xml</li> <li>etc/jetty-jmx.xml</li> <li>etc/jetty-logging.xml</li> <li>etc/jetty-monitor.xml</li> <li>etc/jetty-overlay.xml</li> <li>etc/jetty-plus.xml</li> <li>etc/jetty-policy.xml</li> <li>etc/jetty-proxy.xml</li> <li>etc/jetty-requestlog.xml</li> <li>etc/jetty-rewrite.xml</li> <li>etc/jetty-ssl.xml</li> <li>etc/jetty-stats.xml</li> <li>etc/jetty-testrealm.xml</li> <li>etc/jetty-webapps.xml</li> <li>etc/jetty-xinetd.xml</li> <li>etc/jetty.xml</li> </ul> <p style="margin-top: 1.33em; margin-bottom: 0px; font-family: Arial, Helvetica, sans-serif; font-size: 15px; line-height: 19px; background-color: #ffffff; ">q么多配|,如何记得住?该用哪些配|?</p> <p style="margin-top: 1.33em; margin-bottom: 0px; font-family: Arial, Helvetica, sans-serif; font-size: 15px; line-height: 19px; background-color: #ffffff; ">下一个章节中介绍配置文g?br /> </p> <br /> 参考资源:<br /> <ul> <li><a href="http://www.aygfsteel.com/xylz/archive/2012/03/09/371598.html" target="_blank">[深入出Jetty 03] 单的RESTful入门</a></li> <li><a href="http://www.aygfsteel.com/xylz/archive/2012/01/29/368970.html" target="_blank">[深入出Jetty 02] Jetty 8.x 单试?/a></li> <li><a href="http://www.aygfsteel.com/xylz/archive/2012/01/29/368969.html" target="_blank">[深入出Jetty 01] Jetty 8.x 安装</a></li> </ul><img src ="http://www.aygfsteel.com/xylz/aggbug/372923.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/xylz/" target="_blank">imxylz</a> 2012-03-28 19:02 <a href="http://www.aygfsteel.com/xylz/archive/2012/03/28/372923.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[深入出Jetty 03]单的RESTful入门http://www.aygfsteel.com/xylz/archive/2012/03/09/371598.htmlimxylzimxylzFri, 09 Mar 2012 09:52:00 GMThttp://www.aygfsteel.com/xylz/archive/2012/03/09/371598.htmlhttp://www.aygfsteel.com/xylz/comments/371598.htmlhttp://www.aygfsteel.com/xylz/archive/2012/03/09/371598.html#Feedback0http://www.aygfsteel.com/xylz/comments/commentRss/371598.htmlhttp://www.aygfsteel.com/xylz/services/trackbacks/371598.html
目地址Q?a >https://github.com/adyliu/jetty-rest-demo 

文g列表


包含如下文gQ?/p>

  • git忽略文g
  • README文g
  • pom文g
  • 一个简单的Controller文g
  • 一个log4j的配|文?/li>
  • 一个简单的spring mvc配置
  • 一个简单的web.xml

Maven配置

Z能够方便从jetty:run来启动web容器Q用jetty的maven插g?br />需要特别注意的是,从jetty7.5.3开始就必须用maven 3了,以前使用的maven 2不能使用了,׃ؓ了这问题Q我跟踪了很久,大囧?br />q里使用jetty最新的maven插gQ同样会启动最新的jetty8.1.1 来测试?br />
<build>
    <plugins>
        <plugin>
            <groupId>org.mortbay.jetty</groupId>
            <artifactId>jetty-maven-plugin</artifactId>
            <version>8.1.1.v20120215</version>
        </plugin>
    </plugins>
</build>

web.xml

q是一个简单的web.xml配置Q主要配|spring servlet。当然这里也辅助配置了一个log4jQ方便查看日志输出,不配|也没关pR?br />另外也没有用servlet 3.0的配|?br />
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation
="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
    version
="2.4">
    <display-name>jetty-rest-demo</display-name>
    <context-param>
        <param-name>log4jConfigLocation</param-name>
        <param-value>classpath:log4j.properties</param-value>
    </context-param>
    <listener>
        <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
    </listener>
    <servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>
</web-app>

dispatcher-servlet.xml

接下来是spring mvc的配|?br />包含三部分:要扫描的住解包,mvc注解驱动以及jsp的渲染映(其实q个例子中没有用刎ͼ?br />
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context
="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc"
    xsi:schemaLocation
="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd
            http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd"
>
    <context:component-scan base-package="info.imxylz.study.jetty.rest" />
    <mvc:annotation-driven />
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/pages/"></property>
        <property name="suffix" value=".jsp"></property>
        <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"></property>
    </bean>
</beans>

Controller

下蝲开始写W一个ControllerQ当然这个ControllerE微有一点点别扭?br />直接q回字符Ԍ另外烦引页映射C个字W串上。(也不对中文进行处理)

package info.imxylz.study.jetty.rest.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

/**
 * a rest demo (spring 3.x)
 * 
 * 
@author adyliu (imxylz@gmail.com)
 * 
@since 2012-3-9
 
*/
@Controller
public class DemoController {

    @ResponseBody
    @RequestMapping("/index/{name}/")
    public String index(@PathVariable("name") String name) {
        return "Welcome, " + name;
    }
    @ResponseBody
    @RequestMapping("")
    public String index() {
        return "This is a rest demo";
    }
}

Access

现在该是打开览器显CZ了?br />
http://localhost:8080/index/Ady/
http://localhost:8080/index/Ady%20Liu/
http://localhost:8080/

好了Q这是一个最单的入门例子了?br />下面的参考资源中有git的源码?br />

Resources



imxylz 2012-03-09 17:52 发表评论
]]>
[深入出Jetty 02] Jetty 8.x 单试?/title><link>http://www.aygfsteel.com/xylz/archive/2012/01/29/368970.html</link><dc:creator>imxylz</dc:creator><author>imxylz</author><pubDate>Sun, 29 Jan 2012 08:41:00 GMT</pubDate><guid>http://www.aygfsteel.com/xylz/archive/2012/01/29/368970.html</guid><wfw:comment>http://www.aygfsteel.com/xylz/comments/368970.html</wfw:comment><comments>http://www.aygfsteel.com/xylz/archive/2012/01/29/368970.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.aygfsteel.com/xylz/comments/commentRss/368970.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/xylz/services/trackbacks/368970.html</trackback:ping><description><![CDATA[<h1>Jetty 8.x 单试?/h1><h2>q行</h2><p style="margin-top: 0px; margin-bottom: 0px; font-family: Arial, Helvetica, sans-serif; font-size: 15px; line-height: 19px; background-color: #ffffff; ">安装好了以后Q在jetty的主目录下,q行h?/p><pre style="font-size: 1.2em; font-family: 'Lucida Console', 'Andale Mono', 'Courier New', Courier, monospace; line-height: 1.2em; margin-top: 2px; margin-bottom: 2px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: dashed; border-right-style: dashed; border-bottom-style: dashed; border-left-style: dashed; border-color: initial; border-image: initial; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #f9f9f9; overflow-x: auto; overflow-y: auto; border-top-left-radius: 5px; border-top-right-radius: 5px; border-bottom-right-radius: 5px; border-bottom-left-radius: 5px; padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; margin-right: 2px; margin-left: 2px; ">java -jar start.jar </pre><p style="margin-top: 0px; margin-bottom: 0px; font-family: Arial, Helvetica, sans-serif; font-size: 15px; line-height: 19px; background-color: #ffffff; ">如果仔细看的话还有一个start.iniQ这是典型的eclipse启动方式。事实上jetty8是按照eclipse的OSGI启动模型来运行的?/p><div style="margin-top: 1.33em; font-family: Arial, Helvetica, sans-serif; font-size: 15px; line-height: 19px; background-color: #ffffff; "></div><h2>q程讉K</h2><p style="margin-top: 0px; margin-bottom: 0px; font-family: Arial, Helvetica, sans-serif; font-size: 15px; line-height: 19px; background-color: #ffffff; ">默认情况下jetty使用8080端口Q访问下看看?/p><pre style="font-size: 1.2em; font-family: 'Lucida Console', 'Andale Mono', 'Courier New', Courier, monospace; line-height: 1.2em; margin-top: 2px; margin-bottom: 2px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: dashed; border-right-style: dashed; border-bottom-style: dashed; border-left-style: dashed; border-color: initial; border-image: initial; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #f9f9f9; overflow-x: auto; overflow-y: auto; border-top-left-radius: 5px; border-top-right-radius: 5px; border-bottom-right-radius: 5px; border-bottom-left-radius: 5px; padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; margin-right: 2px; margin-left: 2px; ">http://adyliu-pc:8080 </pre><p style="margin-top: 0px; margin-bottom: 0px; font-family: Arial, Helvetica, sans-serif; font-size: 15px; line-height: 19px; background-color: #ffffff; ">出现了点问题。启动后居然是jetty7后的描述信息。看来jetty8发布的时候比较粗p,q些l节都没有处理好。事实上Q官方站点上的文章都是和jetty7.x有关的,没有更新?.x版本?br /><img src="http://www.aygfsteel.com/images/blogjava_net/xylz/jetty01.png" width="949" height="391" alt="" /><br /></p><p style="margin-top: 1.33em; margin-bottom: 0px; font-family: Arial, Helvetica, sans-serif; font-size: 15px; line-height: 19px; background-color: #ffffff; ">好在有一行提CQ如果要q程讉K的话Q需要开启一个设|。好吧,按照说明Q将默认test.war的远E访问模式打开?修改文g$JETTY_HOME/contexts/test.d/override-web.xml中的如下部分<br /></p><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->  <span style="color: #0000FF; "><</span><span style="color: #800000; ">filter</span><span style="color: #0000FF; ">></span><br />    <span style="color: #0000FF; "><</span><span style="color: #800000; ">filter-name</span><span style="color: #0000FF; ">></span>TestFilter<span style="color: #0000FF; "></</span><span style="color: #800000; ">filter-name</span><span style="color: #0000FF; ">></span><br />    <span style="color: #0000FF; "><</span><span style="color: #800000; ">filter-class</span><span style="color: #0000FF; ">></span>com.acme.TestFilter<span style="color: #0000FF; "></</span><span style="color: #800000; ">filter-class</span><span style="color: #0000FF; ">></span><br />    <span style="color: #0000FF; "><</span><span style="color: #800000; ">init-param</span><span style="color: #0000FF; ">></span><br />      <span style="color: #0000FF; "><</span><span style="color: #800000; ">param-name</span><span style="color: #0000FF; ">></span>remote<span style="color: #0000FF; "></</span><span style="color: #800000; ">param-name</span><span style="color: #0000FF; ">></span><br />      <span style="color: #0000FF; "><</span><span style="color: #800000; ">param-value</span><span style="color: #0000FF; ">></span>true<span style="color: #0000FF; "></</span><span style="color: #800000; ">param-value</span><span style="color: #0000FF; ">></span><br />    <span style="color: #0000FF; "></</span><span style="color: #800000; ">init-param</span><span style="color: #0000FF; ">></span><br />  <span style="color: #0000FF; "></</span><span style="color: #800000; ">filter</span><span style="color: #0000FF; ">></span></div><p style="margin-top: 0px; margin-bottom: 0px; font-family: Arial, Helvetica, sans-serif; font-size: 15px; line-height: 19px; background-color: #ffffff; "><br />q里已经默认remote的属性值false改ؓ了true。然后再试试?/p><div style="margin-top: 1.33em; font-family: Arial, Helvetica, sans-serif; font-size: 15px; line-height: 19px; background-color: #ffffff; "></div><div style="font-family: Arial, Helvetica, sans-serif; font-size: 15px; line-height: 19px; background-color: #ffffff; "><br /><img src="http://www.aygfsteel.com/images/blogjava_net/xylz/jetty02.png" width="959" height="485" alt="" /></div><p style="margin-top: 1.33em; margin-bottom: 0px; font-family: Arial, Helvetica, sans-serif; font-size: 15px; line-height: 19px; background-color: #ffffff; ">昄Q这样就已经支持q程讉K了?/p><div style="margin-top: 1.33em; font-family: Arial, Helvetica, sans-serif; font-size: 15px; line-height: 19px; background-color: #ffffff; "></div><h2>Servlet讉K</h2><p style="margin-top: 0px; margin-bottom: 0px; font-family: Arial, Helvetica, sans-serif; font-size: 15px; line-height: 19px; background-color: #ffffff; ">test.war模块里面有一个dump的ServletQ它可以查看当前h的Request/Session/Cookie信息。我们简单看一下Requesth?br /><br /></p><div style="margin-top: 1.33em; font-family: Arial, Helvetica, sans-serif; font-size: 15px; line-height: 19px; background-color: #ffffff; "></div><div style="font-family: Arial, Helvetica, sans-serif; font-size: 15px; line-height: 19px; background-color: #ffffff; "><img src="http://www.aygfsteel.com/images/blogjava_net/xylz/jetty03.png" width="900" height="609" alt="" /></div><p style="margin-top: 0px; margin-bottom: 0px; font-family: Arial, Helvetica, sans-serif; font-size: 15px; line-height: 19px; background-color: #ffffff; ">q里面的信息非常丰富Q这Z后调试当前请求信息提供了很方便的样例?/p><div style="margin-top: 1.33em; font-family: Arial, Helvetica, sans-serif; font-size: 15px; line-height: 19px; background-color: #ffffff; "></div><h2>Comet模型</h2><p style="margin-top: 0px; margin-bottom: 0px; font-family: Arial, Helvetica, sans-serif; font-size: 15px; line-height: 19px; background-color: #ffffff; ">Jetty8.x里面有两Ucomet模型Q一U是常见的长q接(Long Polling), 另一U就是HTML5支持的WebSocket模型?/p><p style="margin-top: 1.33em; margin-bottom: 0px; font-family: Arial, Helvetica, sans-serif; font-size: 15px; line-height: 19px; background-color: #ffffff; ">我们先来单看一下Long Polling模型。在q种方式下,览器定时发起一个长q接Q等待服务器q回。一ơ请求完了以后仍然会发v一个新的请求,L有一个连接保持双方的通讯?下图描述了此效果?br /><img src="http://www.aygfsteel.com/images/blogjava_net/xylz/jetty-long-polling.png" width="717" height="505" alt="" /><br /></p><p style="margin-top: 1.33em; margin-bottom: 0px; font-family: Arial, Helvetica, sans-serif; font-size: 15px; line-height: 19px; background-color: #ffffff; ">而WebSocket模型昄不是所有浏览器都支持的。高版本的Chrome支持,比如我的chrome 18.0的开发版本就能很好的支持WebSocket?br /><img src="http://www.aygfsteel.com/images/blogjava_net/xylz/jetty-websocket.png" width="721" height="380" alt="" /><br /></p><p style="margin-top: 1.33em; margin-bottom: 0px; font-family: Arial, Helvetica, sans-serif; font-size: 15px; line-height: 19px; background-color: #ffffff; ">有意思的是,q里的请求头和响应头有一些特D的标识。以后涉及到websocket的时候再来研I?br /><img src="http://www.aygfsteel.com/images/blogjava_net/xylz/jetty-websocket-headers.png" width="622" height="341" alt="" /><br /></p><p style="margin-top: 1.33em; margin-bottom: 0px; font-family: Arial, Helvetica, sans-serif; font-size: 15px; line-height: 19px; background-color: #ffffff; ">l测试,我机器上的chrome 18.0,firefox 8.0都支持websocket的,而IE9仍然不支持?br /><br /><img src="http://www.aygfsteel.com/images/blogjava_net/xylz/jetty-firefox.png" alt="" /><br /></p><img src ="http://www.aygfsteel.com/xylz/aggbug/368970.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/xylz/" target="_blank">imxylz</a> 2012-01-29 16:41 <a href="http://www.aygfsteel.com/xylz/archive/2012/01/29/368970.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[深入出Jetty 01] Jetty 8.x 安装http://www.aygfsteel.com/xylz/archive/2012/01/29/368969.htmlimxylzimxylzSun, 29 Jan 2012 08:34:00 GMThttp://www.aygfsteel.com/xylz/archive/2012/01/29/368969.htmlhttp://www.aygfsteel.com/xylz/comments/368969.htmlhttp://www.aygfsteel.com/xylz/archive/2012/01/29/368969.html#Feedback0http://www.aygfsteel.com/xylz/comments/commentRss/368969.htmlhttp://www.aygfsteel.com/xylz/services/trackbacks/368969.htmlJetty?.x已经q移到eclipse下了Q从eclipse的下载目录开始安装吧?/p>

最新的发布版本?.1.0.v20120127Q我们从q个版本开始?br />

JETTY_VERSION=8.1.0.v20120127
wget http://download.eclipse.org/jetty/$JETTY_VERSION/dist/jetty-distribution-$JETTY_VERSION.tar.gz
tar xfz jetty-distribution-$JETTY_VERSION.tar.gz
cd jetty-distribution-$JETTY_VERSION
java -jar start.jar

附录



imxylz 2012-01-29 16:34 发表评论
]]>
վ֩ģ壺 | | | ʡ| ³| | | ۩| | ɽ| | | °| | Ͱ| ϽϽ| ͨ| | ѷ| | | | Ϸ| | üɽ| ư| | ƽ| ½| | | | | ƽ| | | | ׳| Դ| IJ| |