本文简单介绍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
<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
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 的基本架构
Jetty 的主要组件的类图
Jetty 的启动流程
4. Jetty的配置
《jetty配置文件详解》可以了解更多的jetty的配置。
其他关于jetty的文档,写的不错的可以参考 https://www.cnblogs.com/yiwangzhibujian/category/876335.html