文档章节

JETTY嵌入式Web容器的开发(一)---基础开发

叫啥名字
 叫啥名字
发布于 2013/08/26 23:28
字数 1074
阅读 727
收藏 6

<h4>qiuJETTY嵌入式Web容器的开发(一)---基础开发</h4> <p>JETTY嵌入式Web容器体积小,启动速度快,性能好,免费开源,是一款很适合开发调试和简单演示的轻量级Web容器.</p> <p>而且它的嵌入式的特点,使得开发者可以直接将容器的操作包含在程序逻辑里,得以摆脱TOMCAT,JBOSS等独立容器带来的安装,维护,部署等一系列令人头疼的问题.</p> <h5>JETTY嵌入式开发步骤</h5> <ul> <li><b>下载</b> </li> </ul> <p>本文采用的是2012年最新版本的JETTY8 (8.1.4版)</p> <p>jetty-hightide-8.1.4.v20120524.zip</p> <ul> <li><b>ECLIPSE</b><b>建立一个普通JAVA</b><b>项目testjetty</b> </li> </ul> <p>注意:</p> <p>是JAVA&#160; APPLICATION项目,不是WAR项目.</p> <p>JDK要1.6</p> <p>在项目里建立jetty目录</p> <p>目录下再建立etc目录</p> <p>将jetty-hightide-8.1.4.v20120524.zip包中etc目录下的jetty.xml和webdefault.xml文件拷贝入新建的 /jetty/etc目录下</p> <p>将jetty-hightide-8.1.4.v20120524.zip文件中lib/目录下的所有jar文件和lib/jsp子目录下的所有jar文件都加入项目的buildPath</p> <p><i>(</i><i>很多讨论JETTY</i><i>开发的文章总是在最小JAR</i><i>包数上做文章,</i><i>我觉得初学者还是应该将所有JAR</i><i>包都加入,</i><i>因为作为一款Web</i> <i>容器,JETTY</i><i>的JAR</i><i>容纳了大量的细节功能.</i> <b><i>有的JAR</i></b><b><i>包你没有加入,</i></b><b><i>也许测HELLOWORLD</i></b><b><i>这类功能能够通过,</i></b><b><i>但在真正的商用页面里,</i></b><b><i>就会针对各种HTTP</i></b><b><i>元素出问题</i></b><i>)</i></p> <p>在项目里建webRoot目录</p> <p>webRoot目录下建立WEB-INF目录,以后web.xml就放在这里</p> <p>建成的项目的结构如下:</p> <p><a href="http://photo.blog.sina.com.cn/showpic.html#blogid=6151984a01014zjz&amp;url=http://s1.sinaimg.cn/orignal/6151984agc40d513abd10"><img title="JETTY嵌入式Web容器的开发(一)---基础开发" alt="JETTY嵌入式Web容器的开发(一)---基础开发" src="http://s1.sinaimg.cn/middle/6151984agc40d513abd10&amp;690" width="346" height="239" /></a></p> <ul> <li><b>修改/jetty/etc/jetty.xml</b> </li> </ul> <p>我做了下面两处修改(粗体),以利于测试</p> <p>&lt;?xml version=<i>&quot;1.0&quot;</i>?&gt;</p> <p>&lt;!DOCTYPE Configure PUBLIC &quot;-//Jetty//Configure//EN&quot; &quot;http://www.eclipse.org/jetty/configure.dtd&quot;&gt;</p> <p>&lt;Configure id=<i>&quot;Server&quot;</i> class=<i>&quot;org.eclipse.jetty.server.Server&quot;</i>&gt;</p> <p>&lt;Set name=<i>&quot;ThreadPool&quot;</i>&gt;</p> <p>&lt;!-- Default queued blocking threadpool --&gt;</p> <p>&lt;New class=<i>&quot;org.eclipse.jetty.util.thread.QueuedThreadPool&quot;</i>&gt;</p> <p>&lt;Set name=<i>&quot;minThreads&quot;</i>&gt;<b>30</b>&lt;/Set&gt;</p> <p>&lt;Set name=<i>&quot;maxThreads&quot;</i>&gt;200&lt;/Set&gt;</p> <p>&lt;Set name=<i>&quot;detailedDump&quot;</i>&gt;false&lt;/Set&gt;</p> <p>&lt;/New&gt;</p> <p>&lt;/Set&gt;</p> <p>&lt;Call name=<i>&quot;addConnector&quot;</i>&gt;</p> <p>&lt;Arg&gt;</p> <p>&lt;New class=<i>&quot;org.eclipse.jetty.server.nio.SelectChannelConnector&quot;</i>&gt;</p> <p>&lt;Set name=<i>&quot;host&quot;</i>&gt;&lt;Property name=<i>&quot;jetty.host&quot;</i> /&gt;&lt;/Set&gt;</p> <p>&lt;Set name=<i>&quot;port&quot;</i>&gt;&lt;Property name=<i>&quot;jetty.port&quot;</i> default=<i>&quot;<b>8088</b>&quot;</i>/&gt;&lt;/Set&gt;</p> <p>&lt;Set name=<i>&quot;maxIdleTime&quot;</i>&gt;300000&lt;/Set&gt;</p> <p>&lt;Set name=<i>&quot;Acceptors&quot;</i>&gt;2&lt;/Set&gt;</p> <p>&lt;Set name=<i>&quot;statsOn&quot;</i>&gt;false&lt;/Set&gt;</p> <p>&lt;Set name=<i>&quot;confidentialPort&quot;</i>&gt;8443&lt;/Set&gt;</p> <p>&lt;Set name=<i>&quot;lowResourcesConnections&quot;</i>&gt;20000&lt;/Set&gt;</p> <p>&lt;Set name=<i>&quot;lowResourcesMaxIdleTime&quot;</i>&gt;5000&lt;/Set&gt;</p> <p>&lt;/New&gt;</p> <p>&lt;/Arg&gt;</p> <p>&lt;/Call&gt;</p> <ul> <li><b>JETTY&#160; Service</b><b>类</b> </li> </ul> <p>package org.jetty.demo;</p> <p>import java.io.FileInputStream;</p> <p>import java.io.FileNotFoundException;</p> <p>import java.io.IOException;</p> <p>import org.apache.commons.lang.StringUtils;</p> <p>import org.eclipse.jetty.server.Server;</p> <p>import org.eclipse.jetty.server.handler.ContextHandlerCollection;</p> <p>import org.eclipse.jetty.webapp.WebAppContext;</p> <p>import org.eclipse.jetty.xml.XmlConfiguration;</p> <p>import org.xml.sax.SAXException;</p> <p>public class JettyCustomServer extends Server {</p> <p>private String xmlConfigPath;</p> <p>private String contextPath;</p> <p>private String warPath;</p> <p>private String resourceBase = &quot;<b>./webRoot</b>&quot;;</p> <p>private String webXmlPath = <b>&quot;./webRoot/WEB-INF/web.xml</b>&quot;;</p> <p>public JettyCustomServer(String xmlConfigPath,String contextPath,String resourceBase,String webXmlPath) {</p> <p>this(xmlConfigPath,contextPath,resourceBase,webXmlPath,null);</p> <p>}</p> <p>public JettyCustomServer(String xmlConfigPath,String contextPath) {</p> <p>this(xmlConfigPath,contextPath,null,null,null);</p> <p>}</p> <p>public JettyCustomServer(String xmlConfigPath,String contextPath,String warPath) {</p> <p>this(xmlConfigPath,contextPath,null,null,warPath);</p> <p>}</p> <p>public JettyCustomServer(String xmlConfigPath,String contextPath,String resourceBase,String webXmlPath,String warPath) {</p> <p>super();</p> <p>if(StringUtils.isNotBlank(xmlConfigPath)){</p> <p>this.xmlConfigPath = xmlConfigPath;</p> <p><b>readXmlConfig();</b></p> <p>}</p> <p>if(StringUtils.isNotBlank(warPath)){</p> <p>this.warPath = warPath;</p> <p>if(StringUtils.isNotBlank(contextPath)){</p> <p>this.contextPath = contextPath;</p> <p><b>applyHandle(true);</b></p> <p>}</p> <p>}else{</p> <p>if(StringUtils.isNotBlank(resourceBase))</p> <p>this.resourceBase = resourceBase;</p> <p>if(StringUtils.isNotBlank(webXmlPath))</p> <p>this.webXmlPath = webXmlPath;</p> <p>if(StringUtils.isNotBlank(contextPath)){</p> <p>this.contextPath = contextPath;</p> <p><b>applyHandle(false);</b></p> <p>}</p> <p>}</p> <p>}</p> <p>private void readXmlConfig(){</p> <p>try {</p> <p><b>XmlConfiguration configuration =&#160; new XmlConfiguration(new FileInputStream(this.xmlConfigPath));</b></p> <p><b>configuration.configure(this);</b></p> <p>} catch (FileNotFoundException e1) {</p> <p>e1.printStackTrace();</p> <p>} catch (SAXException e1) {</p> <p>e1.printStackTrace();</p> <p>} catch (IOException e1) {</p> <p>e1.printStackTrace();</p> <p>} catch (Exception e) {</p> <p>e.printStackTrace();</p> <p>}</p> <p>}</p> <p>public void applyHandle(Boolean warDeployFlag){</p> <p>ContextHandlerCollection handler = new ContextHandlerCollection(); </p> <p>WebAppContext webapp = new WebAppContext(); </p> <p><b>webapp.setContextPath(contextPath);</b></p> <p>webapp.setDefaultsDescriptor(&quot;./jetty/etc/webdefault.xml&quot;);</p> <p>if(!warDeployFlag){</p> <p><b>webapp.setResourceBase(resourceBase);</b></p> <p><b>webapp.setDescriptor(webXmlPath);&#160; </b></p> <p>}else{</p> <p>webapp.setWar(warPath);</p> <p>}</p> <p>handler.addHandler(webapp); </p> <p>super.setHandler(handler);</p> <p>}</p> <p>public void startServer(){</p> <p>try {</p> <p>super.start();</p> <p>System.out.println(&quot;current thread:&quot;+super.getThreadPool().getThreads()+&quot;| idle thread:&quot;+super.getThreadPool().getIdleThreads());</p> <p>super.join();</p> <p>} catch (Exception e) {</p> <p>e.printStackTrace();</p> <p>}</p> <p>}</p> <p>public String getXmlConfigPath() {</p> <p>return xmlConfigPath;</p> <p>}</p> <p>public void setXmlConfigPath(String xmlConfigPath) {</p> <p>this.xmlConfigPath = xmlConfigPath;</p> <p>}</p> <p>public String getContextPath() {</p> <p>return contextPath;</p> <p>}</p> <p>public void setContextPath(String contextPath) {</p> <p>this.contextPath = contextPath;</p> <p>}</p> <p>public String getResourceBase() {</p> <p>return resourceBase;</p> <p>}</p> <p>public void setResourceBase(String resourceBase) {</p> <p>this.resourceBase = resourceBase;</p> <p>}</p> <p>public String getWebXmlPath() {</p> <p>return webXmlPath;</p> <p>}</p> <p>public void setWebXmlPath(String webXmlPath) {</p> <p>this.webXmlPath = webXmlPath;</p> <p>}</p> <p>public String getWarPath() {</p> <p>return warPath;</p> <p>}</p> <p>public void setWarPath(String warPath) {</p> <p>this.warPath = warPath;</p> <p>}</p> <p>}</p> <ul> <li><b>做一个简单的可执行的服务启动类</b> </li> </ul> <p><b>package</b> org.jetty.demo; </p> <p><b>public</b> <b>class</b> JettyServerStart { </p> <p><b>public</b> <b>static</b> <b>void</b> main(String[] args) {</p> <p>JettyCustomServer server = <b>new</b>JettyCustomServer(&quot;<b>.</b>/jetty/etc/jetty.xml&quot;,&quot;/testContext&quot;);</p> <p>server.startServer();</p> <p>}</p> <p>} </p> <ul> <li><b>/webRoot/</b><b>目录下做一个JSP</b><b>测试页面</b> </li> </ul> <p>&lt;%@ page language=<i>&quot;java&quot;</i> contentType=<i>&quot;text/html; charset=GBK&quot;</i></p> <p>pageEncoding=<i>&quot;GBK&quot;</i>%&gt;</p> <p>&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD HTML 4.01 Transitional//EN&quot; &quot;http://www.w3.org/TR/html4/loose.dtd&quot;&gt;</p> <p>&lt;html&gt;</p> <p>&lt;head&gt;</p> <p>&lt;meta http-equiv=<i>&quot;Content-Type&quot;</i> content=<i>&quot;text/html; charset=GBK&quot;</i>&gt;</p> <p>&lt;title&gt;Insert title here&lt;/title&gt;</p> <p>&lt;/head&gt;</p> <p>&lt;body&gt;</p> <p>hello jetty! 中国!</p> <p>&lt;/body&gt;</p> <p>&lt;/html&gt;</p> <ul> <li><b>做一个测试Servlet</b> </li> </ul> <p><b>package</b> org.jetty.demo; </p> <p><b>import</b> java.io.IOException; </p> <p><b>import</b> javax.servlet.ServletException; </p> <p><b>import</b> javax.servlet.http.HttpServlet; </p> <p><b>import</b> javax.servlet.http.HttpServletRequest; </p> <p><b>import</b> javax.servlet.http.HttpServletResponse;</p> <p><b></b></p> <p><b>public</b> <b>class</b> HelloWorldServlet <b>extends</b> HttpServlet{ </p> <p>@Override </p> <p><b>protected</b> <b>void</b> doGet(HttpServletRequest req, HttpServletResponse resp) </p> <p><b>throws</b> ServletException, IOException { </p> <p>System.<i>out</i>.println(&quot;doGet&quot;); </p> <p>resp.getWriter().write(&quot;hello world!&quot;); </p> <p>resp.getWriter().close(); </p> <p>} </p> <p>@Override </p> <p><b>protected</b> <b>void</b> doPost(HttpServletRequest req, HttpServletResponse resp) </p> <p><b>throws</b> ServletException, IOException { </p> <p>System.<i>out</i>.println(&quot;doPost&quot;); </p> <p><b>super</b>.doPost(req, resp); </p> <p>} </p> <p>}</p> <ul> <li><b>/webRoot/WEB-INF</b><b>目录下建立一个web.xml</b> </li> </ul> <p>&lt;?xml version=<i>&quot;1.0&quot;</i> encoding=<i>&quot;UTF-8&quot;</i>?&gt;</p> <p>&lt;web-app xmlns:xsi=<i>&quot;http://www.w3.org/2001/XMLSchema-instance&quot;</i>xmlns=<i>&quot;http://java.sun.com/xml/ns/javaee&quot;</i>xmlns:web=<i>&quot;http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd&quot;</i>xsi:schemaLocation=<i>&quot;http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd&quot;</i> version=<i>&quot;3.0&quot;</i>&gt;</p> <p>&lt;display-name&gt;&lt;/display-name&gt;</p> <p>&lt;servlet&gt;</p> <p>&lt;description&gt;This is the description of my J2EE component&lt;/description&gt;</p> <p>&lt;display-name&gt;This is the display name of my J2EE component&lt;/display-name&gt;</p> <p>&lt;servlet-name&gt;HelloWorldServlet&lt;/servlet-name&gt;</p> <p>&lt;servlet-class&gt;org.jetty.demo.HelloWorldServlet&lt;/servlet-class&gt;</p> <p>&lt;/servlet&gt;</p> <p>&lt;servlet-mapping&gt;</p> <p>&lt;servlet-name&gt;HelloWorldServlet&lt;/servlet-name&gt;</p> <p>&lt;url-pattern&gt;/servlet/HelloWorldServlet&lt;/url-pattern&gt;</p> <p>&lt;/servlet-mapping&gt;</p> <p>&lt;welcome-file-list&gt;</p> <p>&lt;welcome-file&gt;index.jsp&lt;/welcome-file&gt;</p> <p>&lt;/welcome-file-list&gt;</p> <p>&lt;/web-app&gt;</p> <p><a href="http://photo.blog.sina.com.cn/showpic.html#blogid=6151984a01014zjz&amp;url=http://s8.sinaimg.cn/orignal/6151984agc40d54265d77"><img title="JETTY嵌入式Web容器的开发(一)---基础开发" alt="JETTY嵌入式Web容器的开发(一)---基础开发" src="http://s8.sinaimg.cn/middle/6151984agc40d54265d77&amp;690" width="346" height="239" /></a></p> <ul> <li><b>启动服务</b> </li> </ul> <p>执行JettyServerStart</p> <p>CONSOLE日志:</p> <p>2012-06-27 15:49:35.250:INFO:oejs.Server:jetty-8.1.4.v20120524</p> <p>2012-06-27 15:49:35.484:INFO:oejsh.ContextHandler:started o.e.j.w.WebAppContext{/testContext,file:/D:/RND/javaathome/eclipsehelio/testjetty/webRoot/}</p> <p>2012-06-27 15:49:35.484:INFO:oejsh.ContextHandler:started o.e.j.w.WebAppContext{/testContext,file:/D:/RND/javaathome/eclipsehelio/testjetty/webRoot/}</p> <p>2012-06-27 15:49:35.703:INFO:oejs.AbstractConnector:Started SelectChannelConnector@0.0.0.0:<b>8088</b></p> <p>current thread:<b>30</b>| idle thread:26</p> <p><b>看红字部分,</b><b>记得我们在./jetty/etc/jetty.xml</b><b>文件中做的修改么?</b></p> <p><b>测试</b></p> <p>测试访问JSP页面</p> <p><a href="http://localhost:8088/testContext/index.jsp">http://localhost:8088/testContext/index.jsp</a></p> <p><a href="http://photo.blog.sina.com.cn/showpic.html#blogid=6151984a01014zjz&amp;url=http://s8.sinaimg.cn/orignal/6151984ag7a015563df77"><img title="JETTY嵌入式Web容器的开发(一)---基础开发" alt="JETTY嵌入式Web容器的开发(一)---基础开发" src="http://s8.sinaimg.cn/middle/6151984ag7a015563df77&amp;690" width="357" height="225" /></a></p> <p>测试访问SERVLET</p> <p><a href="http://localhost:8088/testContext/servlet/HelloWorldServlet">http://localhost:8088/testContext/servlet/HelloWorldServlet</a></p> <p><a href="http://photo.blog.sina.com.cn/showpic.html#blogid=6151984a01014zjz&amp;url=http://s8.sinaimg.cn/orignal/6151984ag7a015583e6a7"><img title="JETTY嵌入式Web容器的开发(一)---基础开发" alt="JETTY嵌入式Web容器的开发(一)---基础开发" src="http://s8.sinaimg.cn/middle/6151984ag7a015583e6a7&amp;690" width="395" height="170" /></a></p>

© 著作权归作者所有

叫啥名字
粉丝 9
博文 29
码字总数 15612
作品 0
西城
程序员
私信 提问
Jetty技术公开课

分享内容介绍 分享内容:Jetty公开课 Jetty简介 Jetty提供了一个Web server 和 Servlet 容器,并且支持HTTP/2,WebSocket,OSGi,JMX,JNDI,JAAS和诸多其他的集成插件。这些组件都是开源的并...

Sophie555
2017/09/13
10
0
Jetty技术公开课

分享内容介绍 分享内容:Jetty公开课 Jetty简介 Jetty提供了一个Web server 和 Servlet 容器,并且支持HTTP/2,WebSocket,OSGi,JMX,JNDI,JAAS和诸多其他的集成插件。这些组件都是开源的并...

Sophie555
2017/09/13
11
0
【广州】小码哥首届技术分享沙龙

先贤说,人生而自由。 刷完一遍朋友圈,小编觉得,这应该指的是人设自由。 越来越多的年轻人,动不动就说一些很不负责任的话,比如“我沉迷学习,无法自拔”、“不学习,吾宁死”云云。当然,...

leodrz
2017/09/07
6
0
【广州】小码哥首届技术分享沙龙

先贤说,人生而自由。 刷完一遍朋友圈,小编觉得,这应该指的是人设自由。 越来越多的年轻人,动不动就说一些很不负责任的话,比如“我沉迷学习,无法自拔”、“不学习,吾宁死”云云。当然,...

leodrz
2017/09/07
8
0
利用IntelliJ IDEA社区版开发servlet

在几个java IDE中,IntelliJ IDEA应该是最养眼的了,不过免费的社区版不能配置web服务器,所以拿来开发servlet感觉困难重重。经过一番探索,终于闯出了一条便捷的路。快速编码,运行,调试都...

lonewolf
2014/11/20
1K
1

没有更多内容

加载失败,请刷新页面

加载更多

最简单的获取相机拍照的图片

  import android.content.Intent;import android.graphics.Bitmap;import android.os.Bundle;import android.os.Environment;import android.provider.MediaStore;import andr......

MrLins
今天
6
0
说好不哭!数据可视化深度干货,前端开发下一个涨薪点在这里~

随着互联网在各行各业的影响不断深入,数据规模越来越大,各企业也越来越重视数据的价值。作为一家专业的数据智能公司,个推从消息推送服务起家,经过多年的持续耕耘,积累沉淀了海量数据,在...

个推
今天
9
0
第三方支付-返回与回调注意事项

不管是支付宝,微信,还是其它第三方支付,第四方支付,支付机构服务商只要涉及到钱的交易都要进行如下校验,全部成功了才视为成功订单 1.http请求是否成功 2.校验商户号 3.校验订单号及状态...

Shingfi
今天
5
0
简述Java内存分配和回收策略以及Minor GC 和 Major GC(Full GC)

内存分配: 1. 栈区:栈可分为Java虚拟机和本地方法栈 2. 堆区:堆被所有线程共享,在虚拟机启动时创建,是唯一的目的是存放对象实例,是gc的主要区域。通常可分为两个区块年轻代和年老代。更...

DustinChan
今天
7
0
Excel插入批注:可在批注插入文字、形状、图片

1.批注一直显示:审阅选项卡-------->勾选显示批注选项: 2.插入批注快捷键:Shift+F2 组合键 3.在批注中插入图片:鼠标右键点击批注框的小圆点【重点不可以在批注文本框内点击】----->调出批...

东方墨天
今天
7
1

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部