Jetty服务器的使用
Jetty 是一个开源的servlet容器,它为基于Java的web容器,例如JSP和servlet提供运行环境。Jetty是使用Java语言编写的,它的API以一组JAR包的形式发布。开发人员可以将Jetty容器实例化成一个对象,可以迅速为一些独立运行(stand-alone)的Java应用提供网络和web连接。
工作原理:链接https://www.ibm.com/developerworks/cn/java/j-lo-jetty/
和Tomcat比较
1)Jetty更轻量级。这是相对Tomcat而言的。
由于Tomcat除了遵循Java Servlet规范之外,自身还扩展了大量JEE特性以满足企业级应用的需求,所以Tomcat是较重量级的,而且配置较Jetty亦复杂许多。但对于大量普通互联网应用而言,并不需要用到Tomcat其他高级特性,所以在这种情况下,使用Tomcat是很浪费资源的。这种劣势放在分布式环境下,更是明显。换成Jetty,每个应用服务器省下那几兆内存,对于大的分布式环境则是节省大量资源。而且,Jetty的轻量级也使其在处理高并发细粒度请求的场景下显得更快速高效。
2)Jetty更灵活,体现在其可插拔性和可扩展性,更易于开发者对Jetty本身进行二次开发,定制一个适合自身需求的Web Server。
相比之下,重量级的Tomcat原本便支持过多特性,要对其瘦身的成本远大于丰富Jetty的成本。用自己的理解,即增肥容易减肥难。
3)然而,当支持大规模企业级应用时,Jetty也许便需要扩展,在这场景下Tomcat便是更优的。
总结:Jetty更满足公有云的分布式环境的需求,而Tomcat更符合企业级环境。
作为嵌入式服务器使用代码实例
Java代码
//代码:以嵌入模式启动Jetty import org.mortbay.http.HttpContext; import org.mortbay.http.HttpServer; import org.mortbay.http.SocketListener; import org.mortbay.http.handler.ResourceHandler; public class JettySample{ public static void main(String[]args)throws Exception{ //创建JettyHttpServer对象 HttpServer server=new HttpServer(); //在端口8080上给HttpServer对象绑上一个listener,使之能够接收HTTP请求 SocketListener listener=new SocketListener(); listener.setPort(8080); server.addListener(listener); //创建一个HttpContext,处理HTTP请求。 HttpContext context=new HttpContext(); //用setContextPath把Context映射到(/web)URL上。 context.setContextPath("/web"); //setResourceBase方法设置文档目录以提供资源 context.setResourceBase("C:\\j2sdk1.4.1_05"); //添加资源处理器到HttpContext,使之能够提供文件系统中的文件 context.addHandler(new ResourceHandler()); server.addContext(context); //启动服务器 server.start(); } }
需要的jar包:
commons-logging.jar
javax.servlet.jar
org.mortbay.jetty.jar
org.mortbay.jmx.jar
在eclipse的Maven中获取Jetty
第一步:(需要联外网)
在maven的pom.xml文件节点project引入Jetty Plugin配置即可:
<build> <finalName>basic_struts</finalName> -- 项目名 <plugins> <plugin> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-maven-plugin</artifactId> <version>9.4.7.v20170914</version> <configuration> <webApp> <contextPath>/${build.finalName}</contextPath> </webApp> <stopKey>CTRL+C</stopKey> <stopPort>8999</stopPort> <scanIntervalSeconds>10</scanIntervalSeconds> <scanTargets> <scanTarget> src/main/webapp/WEB-INF/web.xml </scanTarget> </scanTargets> </configuration> </plugin> </plugins> </build>
第二步:
右击项目名->run as -> run configurations
运行时候只要maven build…->输入jetty:run即可。
第三步:
点击run,将在控制台看到以下代码信息则服务器开启成功,在浏览器输入正确的访问地址将可访问maven构建的web项目中的文件资源。
[INFO] Logging initialized @534160ms to org.eclipse.jetty.util.log.Slf4jLog [INFO] Configuring Jetty for project: basic_struts Maven Webapp [INFO] webAppSourceDirectory not set. Trying src\main\webapp [INFO] Reload Mechanic: automatic ······ [INFO] Scavenging every 600000ms [INFO] Started o.e.j.m.p.JettyWebAppContext@15ac59c2{/basic_struts,file:///D:/JavaProject/basic_struts/src/main/webapp/,AVAILABLE}{file:///D:/JavaProject/basic_struts/src/main/webapp/} [INFO] Started ServerConnector@295bf2a{HTTP/1.1,[http/1.1]}{0.0.0.0:8080} [INFO] Started @538369ms [INFO] Started Jetty Server
自制Jetty服务类
这种方式可以支持websocket,如果项目中需要使用到可以试试这种。
首先pom.xml引入jetty的依赖:
<dependency> <groupId>org.eclipse.jetty.aggregate</groupId> <artifactId>jetty-all</artifactId> <version>9.2.14.v20151106</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> </dependency> <dependency> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-jsp</artifactId> <version>9.2.15.v20160210</version> </dependency>
接下来自己写一个JettyServer类:我自己的完整代码如下
import javax.websocket.server.ServerContainer; import org.eclipse.jetty.server.Server; import org.eclipse.jetty.webapp.WebAppContext; import org.eclipse.jetty.websocket.jsr356.server.deploy.WebSocketServerContainerInitializer; import org.json.JSONObject; import com.web.test.MyWebSocket; public class JettyServer { public static void main(String[] args) { int port = 8080; Server server = new Server(port); WebAppContext webAppContext = new WebAppContext("webapp","/web"); webAppContext.setDescriptor("webapp/WEB-INF/web.xml"); webAppContext.setResourceBase("src/main/webapp"); webAppContext.setDisplayName("web"); webAppContext.setClassLoader(Thread.currentThread().getContextClassLoader()); webAppContext.setConfigurationDiscovered(true); webAppContext.setParentLoaderPriority(true); server.setHandler(webAppContext); System.out.println(webAppContext.getContextPath()); System.out.println(webAppContext.getDescriptor()); System.out.println(webAppContext.getResourceBase()); System.out.println(webAppContext.getBaseResource()); try { ServerContainer wscontainer = WebSocketServerContainerInitializer.configureContext(webAppContext); // Add WebSocket endpoint to javax.websocket layer wscontainer.addEndpoint(MyWebSocket.class); //这行是如果需要使用websocket就加上,不需要就注释掉这行,mywebsocket是自己写的websocket服务类 server.start(); } catch (Exception e) { e.printStackTrace(); } System.out.println("server is start, port is "+port+"............"); } }
运行项目就只要运行这个main函数即可。
假如正式发布需要放到tomcat里运行,需要把下面这个依赖去掉,tomcat和下面的依赖不兼容,会报错(javax.servlet.ServletException: Not running on Jetty, JSR-356 support unavailable)
这种方式运行项目可以在开发的时候用来调试
<dependency>
<groupId>org.eclipse.jetty.aggregate</groupId>
<artifactId>jetty-all</artifactId>
<version>9.2.14.v20151106</version>
</dependency>
借鉴资源:
https://www.cnblogs.com/lylife/p/5670396.html
Jetty服务器的使用的更多相关文章
- Jetty 服务器的知识
Jetty 服务器的知识 也许你还没有听说过这个Jetty服务器,不过它确实是一种比较轻量级的Java服务器,和Tomcat一样,专门解释JavaWeb程序的服务器.因为在之前学习Java Web 的 ...
- jetty服务器的安装和部署、新增到开机启动服务
Jetty的首页地址是http://www.mortbay.org/jetty/,点击Downloads进入下载介绍页面,由于Jetty7之后,托管服务有Eclipse接替,所以jetty6.1之前( ...
- Jetty服务器jmx监控
Jetty服务器jmx监控 Jetty 服务器增加jmx,jmx-remote模块 1.修改对应jetty服务器的配置文件start.ini追加如下两行–module=jmx–module=jmx-r ...
- [solr] - solr5.2.1环境搭建 - 使用solr自带的jetty服务器
solr除了使用tomcat作为容器外,还可以使用其他的常用容器,比如jetty,jboos等,而且solr自身就自带jetty服务器,那么现在就solr自带的jetty服务器进行安装操作.由于sol ...
- (一)windows7下solr7.1.0默认jetty服务器环境搭建
windows7下solr7.1.0默认jetty服务器环境搭建 1.下载solr solr7官网地址:http://lucene.apache.org/solr/ jdk8官网地址:http://w ...
- 在CentOS 7中安装Jetty服务器
Jetty 是一款纯Java的HTTP (Web) 服务器和Java Servlet容器. 通常在更大的网络框架中,Jetty经常用于设备间的通信,而其他Web服务器通常给"人类" ...
- jetty服务器原理与maven集成
jetty服务器原理+MyEclipse下与Maven集成 Jetty 是一个开源的servlet容器,它为基于Java的web容器,例如JSP和servlet提供运行环境.Jetty是使用Java语 ...
- 【jetty】jetty服务器的使用
1.下载jetty服务器: http://www.eclipse.org/jetty/previousversions.html 2.下载后解压:
- 关于jetty服务器默认首页和端口设置
一.jetty服务器部署.启动成功后,在浏览器输入http://localhost:8080/ 可以直接访问到jetty欢迎首页. 这是因为在Jetty包中默认带了一个test.war的应用,在${J ...
- jetty服务器数据源配置JNDI-Oracle,MySQL,SQLServer,DB2等 (转)
下载jetty 下载jetty服务器(8.1.0.RC2),解压到任意目录下 http://dist.codehaus.org/jetty/jetty-hightide-8.1.0/jetty-hig ...
随机推荐
- keras调用预训练模型分类
在网上看到一篇博客,地址https://www.pyimagesearch.com/2017/03/20/imagenet-vggnet-resnet-inception-xception-keras ...
- 树莓派编译安装 EMQ 服务器
前言 EMQ 是一款开源的物联网 MQTT 消息服务器,使用 Erlang/OTP 语言平台设计,在 DIY 智能家居时可以作为网关,前几天摸索了一下在树莓派中安装 EMQ 的方法,记录一下. 步骤 ...
- Mineweep(扫雷)
题目描述: 每周一题之2 Mineweep(扫雷) Minesweeper (扫雷) PC/UVa IDs: 110102/10189, Popularity: A, Success rate: h ...
- Js 向json对象中添加新元素
即:var json={a:1,b:2} json.c=3 添加新元素直接使用赋值就行了
- maven 子父工程。。。
子工程module 父工程 主要是注意路径问题..否则会报错---
- P1147 连续自然数和(思维题)
题目描述 对一个给定的自然数MM,求出所有的连续的自然数段,这些连续的自然数段中的全部数之和为MM. 例子:1998+1999+2000+2001+2002 = 100001998+1999+2000 ...
- C#工具类之日期扩展类
/// <summary> /// DateTimeHelper /// </summary> public static class DateTimeHelper { /// ...
- Go语言基础之18--接口编程
一.接口介绍和定义 1.1 接口定义了一个对象的行为规范 A. 只定义规范,不实现 B. 具体的对象需要实现规范的细节 葵花宝典: 接口就是一层封装,1个例子,封装一个返还浏览器内容的接口.为什么不直 ...
- SoapUI性能测试
之前没发现SoapUI可以做性能测试,自己写了两个简单的例子,体验一下它的测试功能. 一.使用控件顺序执行 测试的框架如上图所示,一个TestCase包含Test Steps(具体的测试步骤),Loa ...
- 云数据库 Redis 缓存 PHP session 变量
1.安装 phpredis 扩展. wget https://github.com/nicolasff/phpredis/archive/master.zip unzip master.zip cd ...