好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

Jetty架构解析及应用示例

Jetty架构解析及应用示例

Jetty架构解析及应用示例

Jetty 是一个  Web server/servlet  container, 支持  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 a  Servlet 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 a  web.xml  descriptor.

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

  

5、web应用

A WebAppContext supports the standardized layout of a web application and configuration of  session, security, listeners, filter, servlets and JSP  via a  web.xml  descriptor normally found in the WEB-INF directory of a webapplication.

把Jetty“部署”到Web应用中

1、开发时的部署示例:

这是用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项目就启动了。

2、用Jetty部署war包

此部分稍后撰写。

 

 

分类:  J2EE

标签:  jetty

作者: Leo_wl

    

出处: http://HdhCmsTestcnblogs测试数据/Leo_wl/

    

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

版权信息

查看更多关于Jetty架构解析及应用示例的详细内容...

  阅读:43次