发布日期:2018-11-14 14:41:48

本文简单介绍jetty以及提供一个简单的嵌入部署jetty的java application.

jetty是一个portable,lightweight, robust, flexible, extensible and easy to integrate的servlet container. 它可以像tomcat一样部署为一个standalone web server,也可以嵌入到一个应用程序中去。它也支持SPDY, WebSocket, OSGi, JMX, JNDI, JAAS。目前很多平台和工具都使用jetty. 它是open source, hosted by Eclipse. jetty主页:http://www.eclipse.org/jetty/

1. Jetty as a Standalone server

1.1. 下载安装(省)

1.2 运行jetty

go to JETTY_HOME
java -jar start.jar

当成功运行时,会显示类似信息,默认端口是8080。 可以通过添加参数更改端口 -jetty.port=8081, 也可以修改 JETTY_HOME/start.ini文件中的jetty.port

2015-06-04 14:27:27.555:INFO:oejs.Server:main: Started @11245ms

1.3 部署web application

类似tomcat, 直接讲war文件放到JETTY_HOME/webapps即可,jetty实时监控,不需要重启。

JETTY_HOME/webapps是默认的实时监控的webapps的部署目录。可以通过start.ini来更改这个目录 jetty.deploy.monitoredDirName=yourPATH

 

2. Embedding Jetty in Your Application

jetty的座右铭:“Don’t deploy your application in Jetty, deploy Jetty in your application”. 就是说讲jetty可以很容易的嵌入到我们的applications中去,我们的applications可能是一个non-web application. 为此,jetty提供了非常方便的API供developers来使用。

2.1 一个简单的Maven project, 添加连个maven dependencies

  • jetty-server : Core Jetty Utilities
  • jetty-servlet: Jetty Servlet Utilities
<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>com.javacodegeeks.snippets.enterprise</groupId>
	<artifactId>embedded-jetty-example</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	
	<dependencies>

		<!--Jetty  dependencies start here-->
		<dependency>
			<groupId>org.eclipse.jetty</groupId>
			<artifactId>jetty-server</artifactId>
			<version>9.2.11.v20150529</version>
		</dependency>

		<dependency>
			<groupId>org.eclipse.jetty</groupId>
			<artifactId>jetty-servlet</artifactId>
			<version>9.2.11.v20150529</version>
		</dependency>
		<!--Jetty  dependencies end here-->

	</dependencies>
</project>

2.2 Creating Embedded Jetty Server Programmatically

  1. Create package com.javacodegeeks.snippets.enterprise.embeddedjetty.
  2. Create a class named EmbeddedJettyMain.
  3. Add a main method to this class.
package com.javacodegeeks.snippets.enterprise.embeddedjetty;

import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.servlet.ServletContextHandler;

import com.javacodegeeks.snippets.enterprise.embeddedjetty.servlet.ExampleServlet;

public class EmbeddedJettyMain {

	public static void main(String[] args) throws Exception {

		Server server = new Server(7070);
		ServletContextHandler handler = new ServletContextHandler(server, "/example");
		handler.addServlet(ExampleServlet.class, "/");
		server.start();

	}

}

ExampleServlet.java

package com.javacodegeeks.snippets.enterprise.embeddedjetty.servlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.eclipse.jetty.http.HttpStatus;

public class ExampleServlet extends HttpServlet {

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {

		resp.setStatus(HttpStatus.OK_200);
		resp.getWriter().println("EmbeddedJetty");
	}
}

运行EmbeddedJettyMain class后embedded jetty就运行在了7070端口,这时就可以访问 http://localhost:7070/example

 

3. jetty的架构,以及与tomcat的比较

这篇文章《Jetty 的工作原理以及与 Tomcat 的比较》对jetty的架构以及与tomcat的比较写的比较详细。可以参考。

https://www.ibm.com/developerworks/cn/java/j-lo-jetty/index.html

Jetty 的基本架构

图 1. Jetty 的基本架构

Jetty 的主要组件的类图

图 2. Jetty 的主要组件的类图

Jetty 的启动流程

图 4. Jetty 的启动流程

 

4. Jetty的配置

jetty配置文件详解》可以了解更多的jetty的配置。

 

其他关于jetty的文档,写的不错的可以参考 https://www.cnblogs.com/yiwangzhibujian/category/876335.html

发表评论