jetty 介绍以及小例子

Posted aspirant

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jetty 介绍以及小例子相关的知识,希望对你有一定的参考价值。

Jetty 是一个开源的servlet容器,它为基于Java的web容器,例如JSP和servlet提供运行环境。Jetty是使用Java语言编写的,它的API以一组JAR包的形式发布。开发人员可以将Jetty容器实例化成一个对象,可以迅速为一些独立运行(stand-alone)的Java应用提供网络和web连接。

 

特性

编辑

易用性

易用性是 Jetty 设计的基本原则,易用性主要体现在以下几个方面:
通过 XML 或者 API 来对Jetty进行配置;默认配置可以满足大部分的需求;将 Jetty 嵌入到应用程序当中只需要非常少的代码;

可扩展性

在使用了 Ajax 的 Web 2.0 的应用程序中,每个连接需要保持更长的时间,这样线程和内存的消耗量会急剧的增加。这就使得我们担心整个程序会因为单个组件陷入瓶颈而影响整个程序的性能。但是有了 Jetty:
即使在有大量服务请求的情况下,系统的性能也能保持在一个可以接受的状态。利用 Continuation 机制来处理大量的用户请求以及时间比较长的连接。 另外 Jetty 设计了非常良好的接口,因此在 Jetty 的某种实现无法满足用户的需要时,用户可以非常方便地对 Jetty 的某些实现进行修改,使得 Jetty 适用于特殊的应用程序的需求。

易嵌入性

Jetty 设计之初就是作为一个优秀的组件来设计的,这也就意味着 Jetty 可以非常容易的嵌入到应用程序当中而不需要程序为了使用 Jetty 做修改。从某种程度上,你也可以把 Jetty 理解为一个嵌入式的Web服务器。
Jetty 可以作为嵌入式服务器使用,Jetty的运行速度较快,而且是轻量级的,可以在Java中可以从test case中控制其运行。从而可以使自动化测试不再依赖外部环境,顺利实现自动化测试。

和Tomcat比较

编辑
原文地址:Jetty和Tomcat的选择:按场景而定 [1] 
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更符合企业级环境。
 
小例子:

本文介绍一个使用Jetty开发的Web的小例子。

Jetty是一个开源的servlet容器,它为基于Java的web容器(例如JSP和servlet)提供运行环境。可以把它理解为和Tomcat一样,不过Jetty更小更轻量级。如果想更深入学习Jetty推荐看:http://blog.sina.com.cn/s/blog_9ed7f0d70101ivsu.html,这里面的一系列的文章分别对jetty服务流程、对静态资源的访问方法、把servlet部署到jetty里面、ContextHandler 的使用,都做了非常简洁、通俗易懂的介绍,本文就“把servlet部署到jetty里面”做介绍

本文使用的Maven建工程,对Maven不熟悉的请看:http://blog.csdn.net/tiandixuanwuliang/article/details/78752881

下面开始介绍这个小例子:

1、在maven项目中配置jetty和servlet

 

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>testJetty</groupId>
    <artifactId>testJetty</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>war</packaging>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.compile.version>1.8</project.compile.version>
        <servlet.version>3.1.0</servlet.version>
        <jsp.version>2.2</jsp.version>
        <jstl.version>1.2.5</jstl.version>
        <jetty.version>8.1.10.v20130312</jetty.version>
    </properties>
    <dependencies>
        <!-- Web Dependencies start -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>${servlet.version}</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>jsp-api</artifactId>
            <version>${jsp.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.taglibs</groupId>
            <artifactId>taglibs-standard-compat</artifactId>
            <version>${jstl.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.taglibs</groupId>
            <artifactId>taglibs-standard-impl</artifactId>
            <version>${jstl.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.taglibs</groupId>
            <artifactId>taglibs-standard-jstlel</artifactId>
            <version>${jstl.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.taglibs</groupId>
            <artifactId>taglibs-standard-spec</artifactId>
            <version>${jstl.version}</version>
        </dependency>
        <!-- Web Dependencies end -->
 
        <!-- jetty start -->
        <dependency>
            <groupId>org.eclipse.jetty</groupId>
            <artifactId>jetty-server</artifactId>
            <version>9.0.0.v20130308</version>
        </dependency>
        <dependency>
            <groupId>org.eclipse.jetty</groupId>
            <artifactId>jetty-webapp</artifactId>
            <version>9.0.0.v20130308</version>
        </dependency>
        <dependency>
            <groupId>org.eclipse.jetty</groupId>
            <artifactId>jetty-continuation</artifactId>
            <version>9.0.0.v20130308</version>
        </dependency>
        <dependency>
            <groupId>org.eclipse.jetty</groupId>
            <artifactId>jetty-jsp</artifactId>
            <version>9.0.0.v20130308</version>
        </dependency>
        <!-- jetty end -->
    </dependencies>
</project>

 

2、写一个Servlet

 

import java.io.IOException;
 
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
@SuppressWarnings("serial")
public class MainServlet extends HttpServlet{
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        req.setCharacterEncoding("utf-8");
        resp.setCharacterEncoding("utf-8");
        resp.setHeader("content-type","text/html;charset=UTF-8");
        System.out.println("servlet运行起来了");
        resp.getWriter().write("servlet运行起来了");
        resp.getWriter().close(); 
    }
}

 

 

3、写Jetty启动文件(注意:不能加包名)

  

import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.servlet.ServletContextHandler;
import org.eclipse.jetty.servlet.ServletHolder;
 
import com.welljoint.MainServlet;
public class HelloJetty {
 
    /**
     * @throws Exception 
     * @Title: main 
     * @Description:启动jetty,程序入口
     * @param args
     * @throws 
     */
    public static void main(String[] args) throws Exception
    {
  Server server = new Server(8080);
  //servletContextHandler是把servlet部署到jetty里面的桥梁
  ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);  
  //所有请求都要经过jetty   
  context.setContextPath("/"); 
  server.setHandler(context);
  //配置servlet请求路径 
  context.addServlet(new ServletHolder(new MainServlet()), "/hello");  
       
        server.start();
        server.join();
    }
}

 

4、在Jetty的类的main方法上单击右键选择java项目运行方式(注意是像运行java项目一样运行)
 
参考:jetty

以上是关于jetty 介绍以及小例子的主要内容,如果未能解决你的问题,请参考以下文章

分享几个实用的代码片段(附代码例子)

Android课程---Android Studio使用小技巧:提取方法代码片段

VS中添加自定义代码片段——偷懒小技巧

Jetty 的工作原理以及与 Tomcat 的比较

JettyJetty 的工作原理以及与 Tomcat 的比较

TodoTomcat与Jetty的比较 以及Tomcat架构的学习