`
king_tt
  • 浏览: 2329673 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Jetty使用入门

 
阅读更多

Jetty 是一个Web server/servletcontainer, 支持SPDY,WebSocket,OSGi,JMX,JNDI,JAAS。Jetty非常高效而且灵活,Google App Engine 选择了Jetty,而放弃了Tomcat,或是其他的服务器。

Jetty has a slogan, "Don't deploy your application in Jetty, deploy Jetty in your application." What this means is that, putting an HTTP module into your application, rather than putting your application into an HTTP server.

Jetty的口号是:“不要把你的程序部署到Jetty里,而是把Jetty部署到你的程序里”,意味着,你可以把Jetty当成程序的一个HTTP模块放到你的程序里。

本文先通过一个简单的HelloWorld示例,展示了java应用中的Jetty是如何启动的;接着详细分析了Jetty的整体架构;最后展示了用Jetty启动一个标准的Java web app。

Hello World 示例

需要的jar包:

jetty-server-8.1.11.v20130520.jar
javax.servlet-3.0.0.v201112011016.jar
jetty-continuation-8.1.11.v20130520.jar
jetty-http-8.1.11.v20130520.jar
jetty-io-8.1.11.v20130520.jar
jetty-util-8.1.11.v20130520.jar

HelloWorldHandler 类:

复制代码
package edu.shao.jetty.sample;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.eclipse.jetty.server.Request;
import org.eclipse.jetty.server.handler.AbstractHandler;

public class HelloWorldHandler extends AbstractHandler {
public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { response.setContentType("text/html;charset=utf-8"); response.setStatus(HttpServletResponse.SC_OK); baseRequest.setHandled(true); response.getWriter().println("<h1>Hello World</h1>"); } }
复制代码

MyServer 类:

复制代码
package edu.shao.jetty.sample;

import org.eclipse.jetty.server.Server;

public class MyServer {

    public static void main(String[] args) throws Exception {
        Server server = new Server(8081); 
        server.setHandler(new HelloWorldHandler()); 
        server.start(); 
        server.join();
    }
}
复制代码

运行main()函数,在浏览器内输入:http://localhost:8081/就可以看得结果。

Jetty架构

1、整体架构图:

The Jetty Server is the plumbing between a collection of Connectors that accept HTTP connections, and a collection of Handlers that service requests from the connections and produce responses, with the work being done by threads taken from a thread pool.(The concept of a Servlet itself is implemented by aServlet Handler. you can build a Jetty server using only connectors and handlers, without using Servlets.)

2、顶层类结构:

受JSR77规范的启发,Jetty的绝大多数的组件(Connector, Handler ,Buffer)都实现了LifeCycle接口。

3、Connectors:

The connectors represent the protocol handlers that accept connections, parse requests and generate responses. The different types of connectors available are based on the protocols, scheduling model and IO APIs used:

  1、SocketConnector - for few busy connections or when NIO is not available

  2、BlockingChannelConnector - for few busy connections when NIO is available

  3、SelectChannelConnector - for many mostly idle connections or asynchronous handling of Ajax requests

  4、SslSocketConnector - SSL without NIO

  5、SslSelectChannelConnector - SSL with non blocking NIO support

  6、AJPConnector - AJP protocol support for connections from apache mod_jk or mod_proxy_ajp

4、Handlers:

  

The Handler is the component that deals with received requests. Three styles of Handler:

  1、Coordinating Handlers - Handlers that route requests to other handlers (eg HandlerCollection, ContextHandlerCollection)
  2、Filtering Handlers - Handlers that augment a request and pass it on to other handlers (eg. HandlerWrapper, ContextHandler, SessionHandler)
  3、Generating Handlers - Handlers that produce content (eg ResourceHandler and ServletHandler)

重点Handler:

  1、The ServletHandler is a Handler that generates content by passing the request to any configured Filters and then to a Servlet mapped by a URI pattern.

  2、A WebAppContext combines handlers for security, session and servlets in a single unit that can be configured with aweb.xmldescriptor.

你可以顺序调用Handler,或者嵌套调用Handler,来处理请求的不同方面。

  

5、web应用

A WebAppContextsupports the standardized layout of a web application and configuration ofsession, security, listeners, filter, servlets and JSPvia aweb.xmldescriptor normally found in the WEB-INF directory of a webapplication.

把Jetty“部署”到Web应用中

1、开发时的部署示例:

这种部署方式还有一个诱人的特性:项目启动后,如果某个类没有被加载到内存中,对这个类的修改在下次该类被调用时就会生效,而不用重启动项目;对JSP的修改,任何时候都会在下次被调用时生效,而不用重启项目。这将给开发web应用带来极大的便利。

这是用Maven构件的Java Web App项目,项目结构如下:

  

WebappStart 类:

复制代码
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.webapp.WebAppContext;

public class WebappStart {

    public static void main(String[] args) throws Exception {
        Server server = new Server(8082);
         
        WebAppContext context = new WebAppContext();
        context.setResourceBase("./src/main/webapp");
        context.setDescriptor("./src/main/webapp/WEB-INF/web.xml");
        context.setContextPath("/test2");
        context.setParentLoaderPriority(true);
 
        server.setHandler(context);
 
        server.start();
        server.join();

    }

}
复制代码

启动main()函数,整个web项目就启动了。

我们可以体验到,把Jetty嵌入到Web项目中,作为Web Server,十分便利、灵活,并且相比其他服务器软件要高效,是开发Web应用的首选WebServer。

2、用Jetty部署war包

此部分稍后撰写。

分享到:
评论

相关推荐

    jetty快速入门与嵌入使用

    jetty快速入门与嵌入使用,简单、易懂,轻松学习!

    Jetty6入门教程

    资源名称:Jetty6入门教程资源截图: 资源太大,传百度网盘了,链接在附件中,有需要的同学自取。

    jetty 入门实例

    本文将深入探讨Jetty的入门实例,帮助你快速掌握如何使用Jetty来运行简单的Web应用。 首先,让我们理解什么是Servlet。Servlet是Java编程语言中的一个接口,由Java Servlet API提供,它允许开发人员扩展Web服务器的...

    jetty入门

    本篇文章将深入介绍Jetty的基础知识,包括其核心概念、工作原理以及如何入门使用。 首先,Jetty的核心特性之一是它的轻量化设计。与其他重量级的Web服务器(如Apache Tomcat)相比,Jetty没有繁重的依赖,这使得它...

    Jetty入门学习资料

    【Jetty入门学习资料】 Jetty是一个轻量级、高性能的开源Servlet容器,它由Java编写,以JAR包形式提供API,便于开发者将其轻松集成到Java应用中。Jetty自1995年创立以来,已被众多知名项目如Apache Geromino、JBoss...

    jetty入门使用

    本教程将引导你入门Jetty的使用,帮助你快速理解如何配置和运行Jetty服务器。 一、Jetty简介 Jetty是由Eclipse基金会维护的一个开源项目,它符合Java Servlet和JSP规范。与其他Web服务器相比,Jetty以其小型化、...

    jetty相关

    - 《Jetty6入门教程.doc》可能是关于如何安装、配置和使用Jetty 6版本的文档,涵盖了基础概念、启动流程、部署Web应用等内容。Jetty 6是较早的版本,尽管现在推荐使用更新的版本,但对于理解Jetty的基本工作原理和...

    Jetty中文手册

    Jetty入门(视频) 下载和安装Jetty 如何安装一个Jetty包 如何配置Jetty – 主要文档 如何运行Jetty 用JConsole监控Jetty 如何使用Jetty开发 Jetty HelloWorld教程 Jetty和Maven HelloWorld教程 Jetty(6)入门 ...

    Jetty Demo

    在这个简单的Jetty入门示例中,你可能会学到如何创建一个简单的Servlet,如何处理HTTP GET和POST请求,以及如何通过Jetty API或配置文件来启动和停止服务器。此外,还会涉及如何使用Jetty的嵌入式模式,即直接在应用...

    jetty-document

    #### 一、Jetty简介与入门 ##### 1.1 Jetty是什么? Jetty是一款开源的、轻量级的Java Web服务器和Java Servlet容器,由Eclipse基金会维护。它以其小巧、灵活、高性能的特点而著称,适用于开发测试环境和生产环境...

    jetty-6.1.22

    对于初学者,理解Jetty的基本结构和配置方式,以及如何通过它来部署和运行Servlet应用,是入门的关键。而对于有经验的开发者,深入研究Jetty的源码和模块化设计,可以帮助优化性能,实现更高效的应用服务。

    jetty-seed:使用 Maven、Jetty 和 Jersey 的入门代码

    使用 Maven、Jetty 和 Jersey 的入门代码 使用 maven-shade-plugin 构建一个带有依赖项的胖 jar 使用单一资源在 8080 上运行码头服务器 建造 安装 跑步 java -jar target/jetty-app-{{version}}.jar 测试资源

    Intellij Idea使用入门

    Intellij Idea使用入门,包括如何在web项目里集成maven、svn及使用jetty

    maven&struts2&jetty&tomcat

    该包适用于maven新手入门,因为作者本身也是一员maven新手,里面包括了maven的下载包,插件包,插件的配置,环境变量的设置,maven项目建立的详解及运行,里面集成了jetty,tomcat,struts2,当然还包括了直接运行jar包...

    maven的入门使用

    ### Maven 入门使用 #### 一、Maven 安装与配置 Maven 是一款自动化构建工具,它可以帮助开发者简化 Java 项目的构建过程。在使用 Maven 之前,首先需要安装并配置好 Maven 环境。 **1. Maven 安装** - 下载 ...

    maven+spring+jetty+logback简单项目源码

    这个"maven+spring+jetty+logback简单项目源码"提供了一个基础框架,方便新手快速入门并实践这些技术。 首先,`Maven`是Apache开发的一个项目管理和综合工具,它通过一个项目对象模型(Project Object Model, POM)...

    Maven的安装、配置及使用入门

    例如,Jetty是一个轻量级的Web服务器和Servlet容器,Maven中可以集成Jetty插件来快速启动和调试项目。在pom.xml文件的部分,添加Jetty插件的相关配置,包括版本信息和项目上下文路径。然后,通过Maven的构建命令,如...

    Maven使用实战-从入门到精通实践【张振华.Jack】

    Maven使用实战-从入门到精通实践【张振华.Jack】 Maven简介、Maven主要做什么用? 项目对象模型(POM) 坐标(Coordinates)、打包方式(Packaging)、项目描述 项目子父级关系(parent) 依赖管理(dependency),冲突了...

    Wicket 入门

    在给定的文件内容中,可以看到 Jetty 启动成功,且 Wicket 应用在 development 模式下运行,输出了警告信息提示开发者不要在生产环境中使用此模式。 4. **访问应用** 一旦服务器启动,可以通过浏览器访问 `...

Global site tag (gtag.js) - Google Analytics