欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

jetty 介紹之handler

系統(tǒng) 2206 0

文章參考

http://ipjmc.iteye.com/blog/1839999

http://blog.csdn.net/huangmin2050/article/details/7487922

?

? ? 嵌入一個(gè)jetty服務(wù)一般會(huì)有下面幾步, 創(chuàng)建Server,加載Connectors,加載handlers,加載Servlets等,啟動(dòng)服務(wù)start,最后加入服務(wù)器join 。

? ? 一個(gè)Jetty Server可以看成由一下幾部分組成, 其中Connector負(fù)責(zé)接收客戶端的HTTP請(qǐng)求,請(qǐng)求的處理是由Handler來(lái)完成的 。

jetty 介紹之handler

?

Handler在Jetty中是一個(gè)非常重要的東西,Jetty內(nèi)部實(shí)現(xiàn)了一些Handler,可以分為一下幾類:

? ? 1.協(xié)調(diào)Handler:負(fù)責(zé)將request路由到其他Handler的Handler(如:HandlerConnection, ContextHandlerConnection)

? ? 2.過(guò)濾Handler:負(fù)責(zé)向request中設(shè)置一些參數(shù),然后再把請(qǐng)求轉(zhuǎn)交給其他Handler(如:HandlerWapper, ContextHandler, SessionHandler)

? ? 3.生成Handler:負(fù)責(zé)生成響應(yīng)的內(nèi)容(如:ResourceHandler, ServletHandler)

?

? ? 當(dāng)jetty只起一個(gè)服務(wù),沒(méi)有任何handlers和Connectors等時(shí),瀏覽器訪問(wèn)會(huì)返回404 。很容易理解,就是有服務(wù),但是服務(wù)沒(méi)有返回response,所以會(huì)返回404。

      public static void main(String[] args) throws Exception
{
	Server server = new Server(8081);
   // server.setHandler(new HelloHandler());
 
	server.start();
	server.join();
}
    

?

? ? 該服務(wù)啟動(dòng)后,由于沒(méi)有任何針對(duì)服務(wù)的操作,會(huì)對(duì)所有request返回404。

?

再看一個(gè)簡(jiǎn)單HelloHandler的介紹和handle方法的參數(shù)介紹:

?

      public class HelloHandler 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 World2</h1>");
    }
}
    

?

target——request的目標(biāo),可以是一個(gè)url或者一個(gè)適配器。

baseRequest——jetty可變的request對(duì)象,可以不封裝。

request——不可變的request對(duì)象,可以被封裝。

response——response對(duì)象,可以被封裝

?

? ? 如上代碼handle設(shè)置response的狀態(tài),ContentType和標(biāo)記request是否被處理等。。復(fù)雜的處理可以用多個(gè)Handler結(jié)合使用,達(dá)到復(fù)雜的處理結(jié)果。jetty的一些handler可以在org.eclipse.jetty.server.handler中查找

?

? ? Handler的強(qiáng)大的地方是可以為Jetty Server設(shè)置若干Handler,每個(gè)Handler完成自己的功能,Handler的處理過(guò)程如下

jetty 介紹之handler

?

? ? HandlerList和HandlerConnection內(nèi)部都可以設(shè)置若干Handler,?Handler按順序一個(gè)接一個(gè)的執(zhí)行。對(duì)于 HandlerList 而言,只要有一個(gè)Handler將請(qǐng)求標(biāo)記為已處理, 或拋出異常 ,Handler的調(diào)用就到此結(jié)束。而 HandlerConnection 則不會(huì)結(jié)束,一直調(diào)用到最后一個(gè)Handler。

?

多個(gè)handler的處理:

      public static void main(String[] args) throws Exception
{
	Server server = new Server(8081);
	server.setHandler(new HelloHandler());//無(wú)效的
	server.setHandler(new HelloHandler());//兩次setHandler只有后面這次有用
	server.start();
	server.join();
}
    

?

server調(diào)用了兩次setHandler,但是只有最后一次setHandler有效,所以上面代碼是不行的。

?

針對(duì)多個(gè)handler的處理,如下方才是正道:

?

1、HandlerCollection會(huì)按照順序分別執(zhí)行每個(gè)handler,并把結(jié)果拼湊到response,返回。如下:

      public static void main(String[] args) throws Exception
{
	Server server = new Server(8081);
	HandlerCollection hc =new HandlerCollection();
	hc.setHandlers(new Handler[]{new HelloHandler(),new HelloHandlerScond()});
	server.setHandler(hc);
	server.start();
	server.join();
}
    

?

2、HandlerList順序執(zhí)行handler,如果拋出錯(cuò)誤才執(zhí)行下一個(gè)handler,否則不執(zhí)行。如:

      public static void main(String[] args) throws Exception
{
	Server server = new Server();
	SelectChannelConnector connector = new SelectChannelConnector();
	connector.setPort(8080);
	server.addConnector(connector);

	ResourceHandler resource_handler = new ResourceHandler();
	resource_handler.setDirectoriesListed(true);
	resource_handler.setWelcomeFiles(new String[]{ "index.html" });

	resource_handler.setResourceBase(".");

	HandlerList handlers = new HandlerList();
	handlers.setHandlers(new Handler[] { resource_handler, new DefaultHandler() });
	server.setHandler(handlers);

	server.start();
	server.join();
}
    

?

?

下面以一個(gè)具體的例子來(lái)說(shuō)明,需要注意HandlerList和HandlerConnection的區(qū)別,代碼里有注釋:

?

      package hb.jetty;

import java.io.File;
import java.io.IOException;
import java.util.Map;

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

import org.eclipse.jetty.server.NCSARequestLog;
import org.eclipse.jetty.server.Request;
import org.eclipse.jetty.server.Handler;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.handler.AbstractHandler;
import org.eclipse.jetty.server.handler.DefaultHandler;
import org.eclipse.jetty.server.handler.HandlerCollection;
import org.eclipse.jetty.server.handler.HandlerList;
import org.eclipse.jetty.server.handler.HandlerWrapper;
import org.eclipse.jetty.server.handler.RequestLogHandler;

public class ManyHandlers {
	public static void main(String[] args) throws Exception {
		Server server = new Server(8080);

		// create the handlers
		Handler param = new ParamHandler();
		HandlerWrapper wrapper = new HandlerWrapper() {
			@Override
			public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response)
					throws IOException, ServletException {
				request.setAttribute("welcome", "Wylazy");
				super.handle(target, baseRequest, request, response);
			}
		};
		
		Handler hello = new HelloHandler();
		wrapper.setHandler(hello);
		Handler dft = new DefaultHandler();

//HandlerList會(huì)依次調(diào)用每一個(gè)Handler,直到某個(gè)Handler將請(qǐng)求標(biāo)記為已處理,即setHandled(true);
		HandlerList list = new HandlerList();
		list.setHandlers(new Handler[] { param, wrapper, dft });
		server.setHandler(list);
		
		RequestLogHandler log = new RequestLogHandler();
		log.setRequestLog(new NCSARequestLog(File.createTempFile("demo", "log").getAbsolutePath()));
		
		//HandlerCollection會(huì)依次調(diào)用每一個(gè)Handler,即使請(qǐng)求已經(jīng)被處理了
//		HandlerCollection handlers = new HandlerCollection();
//		handlers.setHandlers(new Handler[] { list, log });
//		server.setHandler(handlers);

		server.start();
		server.join();
	}

	public static class ParamHandler extends AbstractHandler {
		public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response)
				throws IOException, ServletException {
			Map params = request.getParameterMap();
			if (params.size() > 0) {
				response.setContentType("text/plain");
				response.getWriter().println(params);
				baseRequest.setHandled(true);
			}
//			baseRequest.setHandled(true);
		}
	}
	
	public static class HelloHandler 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 World1</h1>");  
	        response.getWriter().println("Request url: " + target);  
	    }  
	}  

}

    
?

?

?備注:直接運(yùn)行代碼將handler處理后就不會(huì)繼續(xù)運(yùn)行了,如果想測(cè)試所有的handler都運(yùn)行,這里就使用HandlerCollection處理。

jetty 介紹之handler


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 午夜欧美 | 久久99精品国产99久久 | 国产乱色精品成人免费视频 | 色视频网站在线观看 | 免费午夜理论不卡 | 成人亚洲一区 | 蜜臀AV性色A片在线观看 | 久久就是精品 | 午夜性刺激小说 | 一级肉体aa电影 | 精品一区二区久久久久久久网站 | 特黄特色大片免费视频大全 | 国产一区二区欧美 | 亚洲一区二区三区免费在线观看 | 午夜影院试看 | 男女做www免费高清视频 | 免费成人高清 | 久久国产欧美日韩精品 | 欧美国产中文字幕 | 免费观看黄色小视频 | 污视频导航 | 狠狠色丁香婷婷久久综合考虑 | 免费一区二区三区 | 精品国产欧美 | 色婷婷综合网 | 五月激情综合婷婷 | 亚洲v日本v欧美v综合v | 丝袜捆绑调教视频免费区 | 偷拍自拍成人 | 国产一区二区在线免费观看 | 一二区 | 日韩艹 | 亚洲香蕉久久一区二区三区四区 | 国产在线aaa片一区二区99 | 欧美激情视频一区二区三区在线播放 | 久久久一区二区 | 日韩在线免费视频观看 | 午夜专区 | 亚洲第一视频 | 亚洲精品不卡 | 欧美aaa级片 |