Jetty不只是个性能优秀的web服务器,还能作为插件供我们开发使用,下面就简单接触一下,我下载的jetty版本是8.1.8版本。最新版9.0.0的api相比8.1.8有不小改动,出于了解学习的目的就随便找个来用。
“从一万里高空看Jetty”就是下面这个架构
Connector
|
|
Server — — ThreadPool
|
|
Handler
Connector负责前端请求的接受,handler负责后台处理,同时维持一个threadpool线程池供服务器调用。
Connector分下面几种
1,SelectChannelConnector
使用高效的NIO模型以及非阻塞线程模型接收request。
当使用coninuations时,线程不会阻塞等待,当一个filter或者servlet在continuation调用getEvent时,会抛出
一个运行时异常,Jetty捕获这个异常但并不响应给客户端,而是释放线程然后将continuation放回时间片队列。当continuation超时或者
有事件发生时,Jetty申请一个线程去继续处理改请求。
2,SocketConnector
传统的阻塞IO以及线程模型,为每个连接开启一个线程去处理,当环境不支持NIO时使用这个
3,SslSelectChannelConnector(支持ssl协议的NIO模型)
4,SslSocketConnector(支持ssl协议的阻塞IO模型)
5,Ajp13SocketConnector(支持AJP13协议,官方wiki上建议使用普通的HTTP connector)
Handler是Jetty的一个组件用来处理接收到的请求,核心api就是handle方法
public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException
target——请求的目标,一般是URI(某些场景下为资源名称或者资源URI)
baseRequest——原始的请求对象
request——request或者它的一个包装
response——response或者它的一个包装
只要实现这个方法,就可以处理请求,或者将请求传递给别的handler(or servlet),或者包装改请求,所以有三类handlers
1,Coordinating Handlers : HandlerCollection , ContextHandlerCollection
将请求路由到别的handlers。
2,Filtering Handlers : HandlerWrapper , ContextHandler , SessionHandler
包装补充请求并传递给别的handlers
如:
try { base_request.setSession(a_session); next_handler.handle(target,request,response,dispatch); } finally { base_request.setSession(old_session); }
3,Generating Handlers : ResourceHandler , ServletHandler
产生content内容
response.setContentType("text/html"); response.setStatus(HttpServletResponse.SC_OK); response.getWriter().println("<h1>Hello OneHandler</h1>"); //如果不想请求再被别的handler处理,则处理方式如下 base_request.setHandled(true);
handler的调用方法:顺序调用,嵌套调用
顺序调用(各个Handlers的行为不受调用顺序和下一个调用的影响,独立处理request产生response)
Caller --> Handler 1
Caller --> Handler 2
Caller --> User Code
Caller --> Handler 3
嵌套调用(更加常用)
Caller --> Handler 1
Handler 1 --> Handler 2
Handler 2 --> User Code
关于Jetty的架构更多参考 : http://wiki.eclipse.org/Jetty/Reference/Jetty_Architecture
下面写一个简单的程序测试,集成Jetty的步骤如下:
1,Create the server
2,Add/Configure Connectors(线程池的线程数目不可太小,不然会启动失败)
3,Add/Configure Handlers
4,Add/Configure Servlets/Webapps to Handlers
5,Start the server
6,Wait(join the server to prevent main exiting)
package test; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.eclipse.jetty.server.*; import org.eclipse.jetty.server.bio.SocketConnector; import org.eclipse.jetty.server.handler.*; import org.eclipse.jetty.server.nio.SelectChannelConnector; import org.eclipse.jetty.util.thread.QueuedThreadPool; public class PJetty 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>"); } public static void main(String[] args) throws Exception { //Set connectors SelectChannelConnector connector1 = new SelectChannelConnector(); connector1.setPort(1987); connector1.setThreadPool(new QueuedThreadPool(20)); //request per second : 4207.30 [#/sec] (mean) SocketConnector connector2 = new SocketConnector(); connector2.setPort(1988); connector2.setName("jetty"); //request per second : 4166.46 [#/sec] (mean) Server server = new Server(); server.setConnectors(new Connector[]{connector1,connector2}); //server.setHandler(new PJetty()); //Set handlers HandlerList handlers = new HandlerList(); handlers.setHandlers(new Handler[]{new PJetty(), new DefaultHandler()}); server.setHandler(handlers); server.start(); server.join(); } }
编译运行方法如下:
root # export CLASSPATH=$CLASSPATH:/pwd/to/jetty/lib/ root # javac -classpath .:* test/PJetty.java root # java -cp .:* test/PJetty 2012-12-18 14:09:51.789:INFO:oejs.Server:jetty-8.1.8.v20121106 2012-12-18 14:09:51.865:INFO:oejs.AbstractConnector:Started SelectChannelConnector@0.0.0.0:1987 2012-12-18 14:09:51.866:INFO:oejs.AbstractConnector:Started SocketConnector@0.0.0.0:1988
相关推荐
【描述】中的"安卓Android源码——i-jetty开源项目.zip"意味着这个压缩包包含了一个完整的源代码实现,开发者可以通过阅读和分析这些源代码来学习如何在Android环境中配置和运行Jetty服务器。 从【标签】"安卓 源码...
i-jetty开源项目就是专为Android平台设计的一个轻量级HTTP服务器,它基于Java的Jetty服务器,实现了在Android设备上运行HTTP服务的功能。本文将详细探讨这个项目的核心概念、工作原理以及如何在实际开发中应用。 1....
标题“maven工程在Jetty服务器上的自动化部署(开发者模式)”指出了本主题的核心——如何使用Maven构建工具配合Jetty轻量级服务器,实现Java Web项目的自动化部署,并且强调了这是针对开发者的模式,意味着会涉及到...
Jetty服务器的架构设计使其可以轻松地与其他Java库集成,例如Spring框架,这使得开发者能够在不增加太多复杂性的情况下构建复杂的Web应用。它的模块化特性意味着你可以根据需要选择安装和配置特定的服务,如...
- **嵌入式Servlet容器**:Spring Boot支持内嵌Tomcat、Jetty等Servlet容器,无需单独部署。 2. **Spring Boot的启动流程** - **SpringApplication.run()**:这是启动Spring Boot应用的入口,它会创建...
最后,启动Jetty服务器,代理服务器就会监听指定端口并等待客户端连接。你可以根据实际需求调整服务器配置,例如设置线程池大小、超时时间等。 5. **客户端使用** 客户端配置HTTP代理时,需要设置代理服务器的...
这使得开发者能够在自己的项目中直接启动和控制Jetty服务器,简化了部署流程。 4. **模块化设计**:Jetty的模块化架构允许用户根据需求选择安装和配置组件,如HTTP服务器、HTTP客户端、Servlet容器、WebSocket...
【标题】"jetty-distribution-9.1.0.v20131115"指的是Jetty服务器的一个发行版本,这个版本发布于2013年11月15日。Jetty是一个开源的、轻量级的Java Web服务器和HTTP服务器,它主要被设计用于快速开发和部署Web应用...
通过深入理解这些配置项,可以帮助开发者更好地优化Jetty服务器的性能,确保其在不同应用场景下稳定高效地运行。此外,Jetty还提供了丰富的文档资源和技术支持,开发者可以根据实际需求灵活配置Jetty的各项参数,以...
Java EE容器如Tomcat、Jetty、Glassfish等,它们负责管理Web应用的生命周期,提供Servlet和JSP的运行环境。容器自动处理线程安全、事务管理等问题,开发者只需关注业务逻辑。 六、数据库连接与JDBC Java Database ...
10. **部署与服务器**:项目上线涉及Tomcat或Jetty等应用服务器的配置,以及Nginx等反向代理和负载均衡服务器的使用。了解Docker容器化部署也是现代Web开发的趋势。 以上只是部分可能涉及的技术点,实际项目开发...
Eclipse Jetty插件是为Eclipse集成开发环境(IDE)设计的一款扩展...了解并熟练使用Eclipse Jetty插件,对于从事Java Web开发的工程师来说,能够提高开发效率,简化部署流程,同时也能更好地利用Jetty服务器的性能优势。
在部署使用Jetty Cometd时,首先需要在服务器端配置相应的类库,包括Jetty服务器核心库、Cometd API和实现库,以及Servlet API。接着,在`web.xml`中配置`ContinuationCometdServlet`,这个Servlet负责处理Cometd...
这份"java软件开发——顶岗实习周记25篇.pdf"文档,很可能是某个学生或初入职场的开发者在Java实习期间所记录的工作与学习心得,提供了宝贵的实战经验与反思。 首先,Java作为全球最流行的编程语言之一,其语法严谨...
Web服务器(如Nginx)、应用服务器(如Tomcat、Jetty、Undertow)以及中间件(如Redis、RabbitMQ、Kafka、Dubbo、gRPC、Thrift、Spring Cloud、Netty)都是需要了解和掌握的。 数据库层面,你需要熟悉ORM框架...
- **部署**:系统部署在服务器上,可选择Tomcat或Jetty等应用服务器。 - **监控**:使用日志系统记录运行情况,便于问题排查;监控工具如Prometheus和Grafana可实时监控系统性能。 - **更新与维护**:定期更新和...
此外,为了便于部署和维护,项目通常会采用Maven或Gradle等构建工具进行依赖管理,使用Eclipse、IntelliJ IDEA等IDE进行开发,使用Tomcat或Jetty等应用服务器运行Web应用。 总之,这个基于JSP、Struts2和MySQL的...
Java开发指南——Servlets与JSP篇,是Java开发者深入理解Web应用开发的重要参考资料。Servlets和JSP(JavaServer Pages)是Java EE平台中用于构建动态网站的关键技术。Servlets是Java编程语言中的服务器端应用程序...
在Jetty解压后的目录中,找到`start.jar`文件,通过命令行执行`java -jar start.jar`,这将启动Jetty服务器。如果一切顺利,你将在控制台看到Jetty成功启动的信息。 现在,我们创建第一个HelloWorld Web应用。在...
【Java Web项目案例——知识管理软件】是一款基于Java Web技术构建的应用,旨在提供一个高效、易用的知识管理和分享平台。这个项目涵盖了多个关键的技术点,是学习和提升Java Web技能的绝佳实例。以下是对该项目各个...