日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Jetty架构解析及应用示例

發布時間:2023/12/18 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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、開發時的部署示例:

這種部署方式還有一個誘人的特性:項目啟動后,如果某個類沒有被加載到內存中,對這個類的修改在下次該類被調用時就會生效,而不用重啟動項目;對JSP的修改,任何時候都會在下次被調用時生效,而不用重啟項目。這將給開發web應用帶來極大的便利。

1、這是用Maven構件的Java Web App項目,項目結構如下:

  

2、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();}}

WebappStart類是整個項目的入口,運行此類,整個web項目就啟動了。

我們可以體驗到,把Jetty嵌入到Web項目中,作為Web Server,十分便利、靈活,并且相比其他服務器軟件要高效,是開發Web應用的首選WebServer。

?

2、用Jetty部署war包

我們在此示例中部署上面web工程的war包:TestWebApp2.war

?1、文件目錄的組織形式如下:

2、StartWar.java

import java.io.File; import org.eclipse.jetty.server.Server; import org.eclipse.jetty.webapp.WebAppContext;public class StartWar {public static void main(String[] args) throws Exception {String warPath= "E:/jetty/myapp/TestWebApp2.war";//war包的絕對地址String tempDir=new File(warPath).getParent();//war包所在的目錄,我們使用此目錄為臨時目錄 Server server = new Server(8083);WebAppContext context = new WebAppContext();//構造Context Handler context.setWar(warPath);context.setTempDirectory(new File(tempDir));context.setContextPath("/test");server.setHandler(context);server.start();server.join();} }

3、start.bat

前面是設置必要的變量,最后兩行分別是編譯StartWar.java類、運行StarWar.class。

@echo off set directory=E:\jetty\ set java_dir=D:\Java\jdk1.6.0_35\ set classp=.;%java_dir%lib\dt.jar;%java_dir%lib\tools.jar;%directory%lib\*;%java_dir%bin\javac -classpath %classp% StartWar.java %java_dir%bin\java -classpath %classp% StartWar

4、此時控制臺會顯示如下信息

此時已經部署完了,就是這么簡單

?

參考:

http://wiki.eclipse.org/Jetty/Tutorial

http://wiki.eclipse.org/Jetty/Tutorial/Embedding_Jetty

轉載于:https://www.cnblogs.com/windlaughing/archive/2013/06/07/3125358.html

總結

以上是生活随笔為你收集整理的Jetty架构解析及应用示例的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 九九久久国产精品 | 欧美熟妇久久久久 | 黄色网免费看 | 免费在线黄| 少妇偷人精品无码人妻 | 美女被草出水 | 国偷自产av一区二区三区 | gay男互凵gay男同偷精 | 打开免费观看视频在线播放 | 色婷婷av一区二区三区麻豆综合 | 亚洲第一视频在线观看 | 波多野结衣在线 | 古代玷污糟蹋np高辣h文 | 久久最新精品 | 中文日韩字幕 | 天天舔天天干天天操 | 无遮挡边吃摸边吃奶边做 | 一级片一区二区三区 | 日本视频在线免费 | 久久99一区二区 | 成人av入口| 一本之道av | 欧美三级视频在线 | 污网站在线观看免费 | 欧美 日韩 综合 | いいなり北条麻妃av101 | 亚洲综合色婷婷 | 性久久久久久久久久久 | 中文字幕人妻伦伦 | 美女毛毛片 | 综合国产在线 | 日韩在线观看精品 | 91国内精品久久久 | 欧美一级黑人 | 少女情窦初开的第4集在线观看 | 秋霞福利视频 | 亚洲精品成人 | 亚洲黄色在线网站 | 国产在线你懂得 | 亚洲 欧美 日韩 综合 | 日本美女毛茸茸 | 99re视频在线播放 | 久久影院午夜理论片无码 | 亚洲欧美在线视频观看 | 俄罗斯美女av | 四虎在线免费 | 一区二区三区啪啪啪 | 欧美日韩一二区 | 日韩免费 | 午夜鲁鲁 | 国产乱色精品成人免费视频 | 日韩av一区二区三区在线 | 三级黄色短视频 | 色网址在线 | 亚洲成人黄色在线观看 | 国产精品11 | 日本黄色三级 | 二区在线视频 | 免费人成又黄又爽又色 | 欧美一区二区三区在线视频 | 制服丝袜天堂网 | 色悠悠网 | 91视频在线视频 | 中文字幕视频观看 | 中文字幕在线国产 | 97av在线| 制服丝袜亚洲色图 | 91视频地址 | 日日碰狠狠添天天爽无码av | 国产亚洲黄色片 | 日本黄视频网站 | 总裁憋尿呻吟双腿大开憋尿 | 国产性生活视频 | 亚洲乱码日产精品bd在线观看 | 日韩欧美网| 精品久久在线观看 | 日韩一级片免费在线观看 | 开心激情播播网 | 蜜桃在线一区 | 欧美大浪妇猛交饥渴大叫 | 国产精品国产三级国产专播精品人 | 欧色av | 三级自拍 | 久久美女免费视频 | 成片免费观看视频大全 | 熟妇人妻精品一区二区三区视频 | 春色网站 | 国产乱码精品一区二区三区忘忧草 | 欧美大片网站 | 亚洲网站在线看 | 国产精品亚洲а∨天堂免在线 | 美丽姑娘免费观看在线观看 | 国产精品香蕉在线 | 精品无码三级在线观看视频 | 欧美特黄一级视频 | 国产呦小j女精品视频 | 成人影片网址 | 色资源在线 | 色妹av |