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服务器的使用的更多相关文章

  1. Jetty 服务器的知识

    Jetty 服务器的知识 也许你还没有听说过这个Jetty服务器,不过它确实是一种比较轻量级的Java服务器,和Tomcat一样,专门解释JavaWeb程序的服务器.因为在之前学习Java Web 的 ...

  2. jetty服务器的安装和部署、新增到开机启动服务

    Jetty的首页地址是http://www.mortbay.org/jetty/,点击Downloads进入下载介绍页面,由于Jetty7之后,托管服务有Eclipse接替,所以jetty6.1之前( ...

  3. Jetty服务器jmx监控

    Jetty服务器jmx监控 Jetty 服务器增加jmx,jmx-remote模块 1.修改对应jetty服务器的配置文件start.ini追加如下两行–module=jmx–module=jmx-r ...

  4. [solr] - solr5.2.1环境搭建 - 使用solr自带的jetty服务器

    solr除了使用tomcat作为容器外,还可以使用其他的常用容器,比如jetty,jboos等,而且solr自身就自带jetty服务器,那么现在就solr自带的jetty服务器进行安装操作.由于sol ...

  5. (一)windows7下solr7.1.0默认jetty服务器环境搭建

    windows7下solr7.1.0默认jetty服务器环境搭建 1.下载solr solr7官网地址:http://lucene.apache.org/solr/ jdk8官网地址:http://w ...

  6. 在CentOS 7中安装Jetty服务器

    Jetty 是一款纯Java的HTTP (Web) 服务器和Java Servlet容器. 通常在更大的网络框架中,Jetty经常用于设备间的通信,而其他Web服务器通常给"人类" ...

  7. jetty服务器原理与maven集成

    jetty服务器原理+MyEclipse下与Maven集成 Jetty 是一个开源的servlet容器,它为基于Java的web容器,例如JSP和servlet提供运行环境.Jetty是使用Java语 ...

  8. 【jetty】jetty服务器的使用

    1.下载jetty服务器: http://www.eclipse.org/jetty/previousversions.html 2.下载后解压:

  9. 关于jetty服务器默认首页和端口设置

    一.jetty服务器部署.启动成功后,在浏览器输入http://localhost:8080/ 可以直接访问到jetty欢迎首页. 这是因为在Jetty包中默认带了一个test.war的应用,在${J ...

  10. jetty服务器数据源配置JNDI-Oracle,MySQL,SQLServer,DB2等 (转)

    下载jetty 下载jetty服务器(8.1.0.RC2),解压到任意目录下 http://dist.codehaus.org/jetty/jetty-hightide-8.1.0/jetty-hig ...

随机推荐

  1. 读经典——《CLR via C#》(Jeffrey Richter著) 笔记_类型的各种成员

    [Class中,可能包含的成员] 常量, 字段, 实例构造器, 类型构造器, 方法, 操作符重载, 转换操作符, 属性, 事件, 类型(Class)

  2. java Sprint boot 学习之一

    <properties> <project.build.sourceEncoding>UTF-</project.build.sourceEncoding> < ...

  3. python练习六十一:文件处理,读取文件内容

    python练习六十一:文件处理,读取文件内容 假设要读取text.txt文件中内容 写文件(如果有文件,那直接调用就行,我这里自己先创建的文件) list1 = ['python','jave',' ...

  4. thinkPHP5.0验证码不显示

    1.使用composer安装时,验证码无法正常显示 主要是因为验证码扩展库的版本安装不正常,官方的5.0版本的扩展库版本号都是1.*,默认安装的是2.0版本,2.0版本均为ThinkPHP5.1版本专 ...

  5. 在ubuntu中安装mysql及简单操作方式

    老规矩,ctrl+alt+t呼出终端, 输入 sudo apt-get update 更新源,否则在运行下面代码时会报出有几个包无法下载,你还是得回来执行这句代码, 输入 sudo apt-get i ...

  6. Mybatis学习笔记14 - 动态sql之foreach标签

    一.查询给定集合中员工id对应的所有员工信息 示例代码: 接口定义: package com.mybatis.dao; import com.mybatis.bean.Employee; import ...

  7. android Firebase中配置 Crashlytics

    首先登陆Google账号 https://firebase.google.com/ 创建项目 配置Android 1.注册应用 2.下载配置文件 3.添加firebaseSDk 配置后台分析的Cras ...

  8. eclipse 分屏显示同一文件

    某个类很大,可能有数千行.当你想要将类开头部分与中间或者靠后的部分进行对比时,请follow如下步骤: Window -> Editor -> Toggle Split Editor (C ...

  9. Android中的AlertDialog遇到的错误

    public void showAddIPCDialog() { Log.i("ssssssssss","wwwwwwwwww"); LayoutInflate ...

  10. 深入学习webpack(二)

    深入学习webpack(二) 在深入学习webpack(一)中,我通过一个例子介绍了webpack的基本使用方法,下面将更为系统的学习webpack的基本概念,对于一门技术的掌握我认为系统化还是很重要 ...