设为首页 收藏本站
查看: 707|回复: 0

[经验分享] 嵌入式服务器jetty,让你更快开发web

[复制链接]

尚未签到

发表于 2017-3-1 12:33:40 | 显示全部楼层 |阅读模式
概述
  jetty是什么?
  jetty是轻量级的web服务器和servlet引擎。
  它的最大特点是:可以很方便的作为嵌入式服务器
  它是eclipse的一个开源项目。不用怀疑,就是你常用的那个eclipse。
  它是使用Java开发的,所以天然对Java支持良好。
  官方网址
  github源码地址
  什么是嵌入式服务器?
  以jetty来说明,就是只要引入jetty的jar包,可以通过直接调用其API的方式来启动web服务。
  用过Tomcat、Resin等服务器的朋友想必不会陌生那一套安装、配置、部署的流程吧,还是挺繁琐的。使用jetty,就不需要这些过程了。
  jetty非常适用于项目的开发、测试,因为非常快捷。如果想用于生产环境,则需要谨慎考虑,它不一定能像成熟的Tomcat、Resin等服务器一样支持企业级Java EE的需要。

jetty的嵌入式启动
  我觉得嵌入式启动方式的一个好处在于:可以直接运行项目,无需每次部署都得再配置服务器。
  jetty的嵌入式启动使用有两种方式:
  API方式
  maven插件方式

API方式
  添加maven依赖
<dependency>  <groupId>org.eclipse.jetty</groupId>
  <artifactId>jetty-webapp</artifactId>
  <version>9.3.2.v20150730</version>
  <scope>test</scope>
  
</dependency>
  
<dependency>
  <groupId>org.eclipse.jetty</groupId>
  <artifactId>jetty-annotations</artifactId>
  <version>9.3.2.v20150730</version>
  <scope>test</scope>
  
</dependency>
  
<dependency>
  <groupId>org.eclipse.jetty</groupId>
  <artifactId>apache-jsp</artifactId>
  <version>9.3.2.v20150730</version>
  <scope>test</scope>
  
</dependency>
  
<dependency>
  <groupId>org.eclipse.jetty</groupId>
  <artifactId>apache-jstl</artifactId>
  <version>9.3.2.v20150730</version>
  <scope>test</scope>
  
</dependency>
  官方的启动代码
public>
{  public static void main( String[] args ) throws Exception
  {
  // 创建Server对象,并绑定端口
  Server server = new Server();
  ServerConnector connector = new ServerConnector(server);
  connector.setPort(8090);
  server.setConnectors(new Connector[] { connector });
  

  // 创建上下文句柄,绑定上下文路径。这样启动后的url就会是:http://host:port/context
  ResourceHandler rh0 = new ResourceHandler();
  ContextHandler context0 = new ContextHandler();
  context0.setContextPath(&quot;/&quot;);
  // 绑定测试资源目录(在本例的配置目录dir0的路径是src/test/resources/dir0)
  File dir0 = MavenTestingUtils.getTestResourceDir(&quot;dir0&quot;);
  context0.setBaseResource(Resource.newResource(dir0));
  context0.setHandler(rh0);
  

  // 和上面的例子一样
  ResourceHandler rh1 = new ResourceHandler();
  ContextHandler context1 = new ContextHandler();
  context1.setContextPath(&quot;/&quot;);
  File dir1 = MavenTestingUtils.getTestResourceDir(&quot;dir1&quot;);
  context1.setBaseResource(Resource.newResource(dir1));
  context1.setHandler(rh1);
  

  // 绑定两个资源句柄
  ContextHandlerCollection contexts = new ContextHandlerCollection();
  contexts.setHandlers(new Handler[] { context0, context1 });
  server.setHandler(contexts);
  

  // 启动
  server.start();
  

  // 打印dump时的信息
  System.out.println(server.dump());
  

  // join当前线程
  server.join();
  }
  
}
  直接运行Main方法,就可以启动web服务。
  注:以上代码在eclipse中运行没有问题,如果想在Intellij中运行还需要为它指定配置文件。
  如果想了解在Eclipse和Intellij都能运行的通用方法可以参考我的github代码示例。
  我的实现也是参考springside的方式。
  代码行数有点多,不在这里贴代码了。
  完整参考代码

Maven插件方式
  如果你熟悉maven,那么实在太简单了
  注: Maven版本必须在3.3及以上版本。
  (1) 添加maven插件
<plugin>  <groupId>org.eclipse.jetty</groupId>
  <artifactId>jetty-maven-plugin</artifactId>
  <version>9.3.12.v20160915</version>
  
</plugin>
  (2) 执行maven命令:
  

mvn jetty:run  

  讲真,就是这么简单。jetty默认会为你创建一个web服务,地址为127.0.0.1:8080。
  当然,你也可以在插件中配置你的webapp环境
<plugin>  <groupId>org.eclipse.jetty</groupId>
  <artifactId>jetty-maven-plugin</artifactId>
  <version>9.3.12.v20160915</version>
  <configuration>
  <webAppSourceDirectory>${project.basedir}/src/staticfiles</webAppSourceDirectory>
  <!-- 配置webapp -->
  <webApp>
  <contextPath>/</contextPath>
  <descriptor>${project.basedir}/src/over/here/web.xml</descriptor>
  <jettyEnvXml>${project.basedir}/src/over/here/jetty-env.xml</jettyEnvXml>
  </webApp>
  <!-- 配置classes -->
  <classesDirectory>${project.basedir}/somewhere/else</classesDirectory>
  <scanClassesPattern>
  <excludes>
  <exclude>**/Foo.class</exclude>
  </excludes>
  </scanClassesPattern>
  <scanTargets>
  <scanTarget>src/mydir</scanTarget>
  <scanTarget>src/myfile.txt</scanTarget>
  </scanTargets>
  <!-- 扫描target目录下的资源文件 -->
  <scanTargetPatterns>
  <scanTargetPattern>
  <directory>src/other-resources</directory>
  <includes>
  <include>**/*.xml</include>
  <include>**/*.properties</include>
  </includes>
  <excludes>
  <exclude>**/myspecial.xml</exclude>
  <exclude>**/myspecial.properties</exclude>
  </excludes>
  </scanTargetPattern>
  </scanTargetPatterns>
  </configuration>
  
</plugin>
  官方给的jetty-env.xml范例
<?xml version=&quot;1.0&quot;?>  <!DOCTYPE Configure PUBLIC &quot;-//Mort Bay Consulting//DTD Configure//EN&quot; &quot;http://jetty.mortbay.org/configure.dtd&quot;>

  <Configure>  <!-- Add an EnvEntry only valid for this webapp               -->

  <New>  <Arg>gargle</Arg>
  <Arg type=&quot;java.lang.Double&quot;>100</Arg>
  <Arg type=&quot;boolean&quot;>true</Arg>
  </New>
  <!-- Add an override for a global EnvEntry                           -->

  <New>  <Arg>wiggle</Arg>
  <Arg type=&quot;java.lang.Double&quot;>55.0</Arg>
  <Arg type=&quot;boolean&quot;>true</Arg>
  </New>
  <!-- an XADataSource                                                -->

  <New>  <Arg>jdbc/mydatasource99</Arg>
  <Arg>

  <New>  <Set name=&quot;xaDataSourceClassName&quot;>org.apache.derby.jdbc.EmbeddedXADataSource</Set>
  <Set name=&quot;xaDataSourceProperties&quot;>databaseName=testdb99;createDatabase=create</Set>
  <Set name=&quot;UniqueResourceName&quot;>mydatasource99</Set>
  </New>
  </Arg>
  </New>
  </Configure>

参考
  jetty wiki
  jetty官方文档
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-348834-1-1.html 上篇帖子: 使用Jetty搭建Java Websocket Server,实现图像传输 下篇帖子: Jetty 8长连接上的又一个坑
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表