




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、下面是apache官網(wǎng)例子服務(wù)器端接受請求,實現(xiàn)接收文件請求處理器import java.io.File;import java.io.IOException;import java.io.InterruptedIOException;import .ServerSocket;import .Socket;import .URL;import .URLDecoder;import java.nio.charset.Charset;import java.security.KeyStore;import java.util.Locale;import org.apache.http.Connec
2、tionClosedException;import org.apache.http.HttpConnectionFactory;import org.apache.http.HttpEntity;import org.apache.http.HttpEntityEnclosingRequest;import org.apache.http.HttpException;import org.apache.http.HttpRequest;import org.apache.http.HttpResponse;import org.apache.http.HttpServerConnection
3、;import org.apache.http.HttpStatus;import org.apache.http.MethodNotSupportedException;import org.apache.http.entity.ContentType;import org.apache.http.entity.FileEntity;import org.apache.http.entity.StringEntity;import org.apache.http.impl.DefaultBHttpServerConnection;import org.apache.http.impl.Def
4、aultBHttpServerConnectionFactory;import tocol.BasicHttpContext;import tocol.HttpContext;import tocol.HttpProcessor;import tocol.HttpProcessorBuilder;import tocol.HttpRequestHandler;import org.apache.http.p
5、rotocol.HttpService;import tocol.ResponseConnControl;import tocol.ResponseContent;import tocol.ResponseDate;import tocol.ResponseServer;import tocol.UriHttpRequestHandlerMapper;import org.apache.http.util.
6、EntityUtils;import .ssl.KeyManager;import .ssl.KeyManagerFactory;import .ssl.SSLContext;import .ssl.SSLServerSocketFactory;/* * Basic, yet fully functional and spec compliant, HTTP/1.1 file server. */public class ElementalHttpServer public static void main(String args) throws Exception if (args.leng
7、th < 1) System.err.println("Please specify document root directory"); System.exit(1); / Document root directory String docRoot = args0; int port = 8080; if (args.length >= 2) port = Integer.parseInt(args1); / Set up the HTTP protocol processor HttpProcessor httpproc = HttpProcessorBu
8、ilder.create() .add(new ResponseDate() .add(new ResponseServer("Test/1.1") .add(new ResponseContent() .add(new ResponseConnControl().build(); / Set up request handlers UriHttpRequestHandlerMapper reqistry = new UriHttpRequestHandlerMapper(); reqistry.register("*", new HttpFileHan
9、dler(docRoot); / Set up the HTTP service HttpService httpService = new HttpService(httpproc, reqistry); SSLServerSocketFactory sf = null; if (port = 8443) / Initialize SSL context ClassLoader cl = ElementalHttpServer.class.getClassLoader(); URL url = cl.getResource("my.keystore"); if (url
10、= null) System.out.println("Keystore not found"); System.exit(1); KeyStore keystore = KeyStore.getInstance("jks"); keystore.load(url.openStream(), "secret".toCharArray(); KeyManagerFactory kmfactory = KeyManagerFactory.getInstance( KeyManagerFactory.getDefaultAlgorithm(
11、); kmfactory.init(keystore, "secret".toCharArray(); KeyManager keymanagers = kmfactory.getKeyManagers(); SSLContext sslcontext = SSLContext.getInstance("TLS"); sslcontext.init(keymanagers, null, null); sf = sslcontext.getServerSocketFactory(); Thread t = new RequestListenerThread
12、(port, httpService, sf); t.setDaemon(false); t.start(); static class HttpFileHandler implements HttpRequestHandler private final String docRoot; public HttpFileHandler(final String docRoot) super(); this.docRoot = docRoot; public void handle( final HttpRequest request, final HttpResponse response, f
13、inal HttpContext context) throws HttpException, IOException String method = request.getRequestLine().getMethod().toUpperCase(Locale.ENGLISH); if (!method.equals("GET") && !method.equals("HEAD") && !method.equals("POST") throw new MethodNotSupportedExcept
14、ion(method + " method not supported"); String target = request.getRequestLine().getUri(); if (request instanceof HttpEntityEnclosingRequest) HttpEntity entity = (HttpEntityEnclosingRequest) request).getEntity(); byte entityContent = EntityUtils.toByteArray(entity); System.out.println("
15、;Incoming entity content (bytes): " + entityContent.length); final File file = new File(this.docRoot, URLDecoder.decode(target, "UTF-8"); if (!file.exists() response.setStatusCode(HttpStatus.SC_NOT_FOUND); StringEntity entity = new StringEntity( "<html><body><h1>
16、;File" + file.getPath() + " not found</h1></body></html>", ContentType.create("text/html", "UTF-8"); response.setEntity(entity); System.out.println("File " + file.getPath() + " not found"); else if (!file.canRead() | file.isDir
17、ectory() response.setStatusCode(HttpStatus.SC_FORBIDDEN); StringEntity entity = new StringEntity( "<html><body><h1>Access denied</h1></body></html>", ContentType.create("text/html", "UTF-8"); response.setEntity(entity); System.out.pri
18、ntln("Cannot read file " + file.getPath(); else response.setStatusCode(HttpStatus.SC_OK); FileEntity body = new FileEntity(file, ContentType.create("text/html", (Charset) null); response.setEntity(body); System.out.println("Serving file " + file.getPath(); static class
19、RequestListenerThread extends Thread private final HttpConnectionFactory<DefaultBHttpServerConnection> connFactory; private final ServerSocket serversocket; private final HttpService httpService; public RequestListenerThread( final int port, final HttpService httpService, final SSLServerSocket
20、Factory sf) throws IOException this.connFactory = DefaultBHttpServerConnectionFactory.INSTANCE; this.serversocket = sf != null ? sf.createServerSocket(port) : new ServerSocket(port); this.httpService = httpService; Override public void run() System.out.println("Listening on port " + this.s
21、erversocket.getLocalPort(); while (!Terrupted() try / Set up HTTP connection Socket socket = this.serversocket.accept(); System.out.println("Incoming connection from " + socket.getInetAddress(); HttpServerConnection conn = this.connFactory.createConnection(socket); / Start worker
22、thread Thread t = new WorkerThread(this.httpService, conn); t.setDaemon(true); t.start(); catch (InterruptedIOException ex) break; catch (IOException e) System.err.println("I/O error initialising connection thread: " + e.getMessage(); break; static class WorkerThread extends Thread private
23、 final HttpService httpservice; private final HttpServerConnection conn; public WorkerThread( final HttpService httpservice, final HttpServerConnection conn) super(); this.httpservice = httpservice; this.conn = conn; Override public void run() System.out.println("New connection thread"); H
24、ttpContext context = new BasicHttpContext(null); try while (!Terrupted() && this.conn.isOpen() this.httpservice.handleRequest(this.conn, context); catch (ConnectionClosedException ex) System.err.println("Client closed connection"); catch (IOException ex) System.err.println
25、("I/O error: " + ex.getMessage(); catch (HttpException ex) System.err.println("Unrecoverable HTTP protocol violation: " + ex.getMessage(); finally try this.conn.shutdown(); catch (IOException ignore) 客戶端get請求實現(xiàn)類import .Socket;import org.apache.http.ConnectionReuseStrategy;import
26、org.apache.http.HttpHost;import org.apache.http.HttpResponse;import org.apache.http.impl.DefaultBHttpClientConnection;import org.apache.http.impl.DefaultConnectionReuseStrategy;import org.apache.http.message.BasicHttpRequest;import tocol.HttpCoreContext;import t
27、ocol.HttpProcessor;import tocol.HttpProcessorBuilder;import tocol.HttpRequestExecutor;import tocol.RequestConnControl;import tocol.RequestContent;import tocol.RequestExpectContinue;import org.apache.http.p
28、rotocol.RequestTargetHost;import tocol.RequestUserAgent;import org.apache.http.util.EntityUtils;/* * Elemental example for executing multiple GET requests sequentially. */public class ElementalHttpGet public static void main(String args) throws Exception HttpProcessor httpproc = H
29、ttpProcessorBuilder.create() .add(new RequestContent() .add(new RequestTargetHost() .add(new RequestConnControl() .add(new RequestUserAgent("Test/1.1") .add(new RequestExpectContinue(true).build(); HttpRequestExecutor httpexecutor = new HttpRequestExecutor(); HttpCoreContext coreContext =
30、HttpCoreContext.create(); HttpHost host = new HttpHost("localhost", 8080); coreContext.setTargetHost(host); DefaultBHttpClientConnection conn = new DefaultBHttpClientConnection(8 * 1024); ConnectionReuseStrategy connStrategy = DefaultConnectionReuseStrategy.INSTANCE; try String targets = &
31、quot;/", "/servlets-examples/servlet/RequestInfoExample", "/somewhere%20in%20pampa" for (int i = 0; i < targets.length; i+) if (!conn.isOpen() Socket socket = new Socket(host.getHostName(), host.getPort(); conn.bind(socket); BasicHttpRequest request = new BasicHttpRequest
32、("GET", targetsi); System.out.println(">> Request URI: " + request.getRequestLine().getUri(); httpexecutor.preProcess(request, httpproc, coreContext); HttpResponse response = httpexecutor.execute(request, conn, coreContext); httpexecutor.postProcess(response, httpproc, core
33、Context); System.out.println("<< Response: " + response.getStatusLine(); System.out.println(EntityUtils.toString(response.getEntity(); System.out.println("="); if (!connStrategy.keepAlive(response, coreContext) conn.close(); else System.out.println("Connection kept ali
34、ve."); finally conn.close(); 客戶端post請求實現(xiàn)類import java.io.ByteArrayInputStream;import .Socket;import org.apache.http.ConnectionReuseStrategy;import org.apache.http.Consts;import org.apache.http.HttpEntity;import org.apache.http.HttpHost;import org.apache.http.HttpResponse;import org.apache.http.e
35、ntity.ByteArrayEntity;import org.apache.http.entity.ContentType;import org.apache.http.entity.InputStreamEntity;import org.apache.http.entity.StringEntity;import org.apache.http.impl.DefaultBHttpClientConnection;import org.apache.http.impl.DefaultConnectionReuseStrategy;import org.apache.http.messag
36、e.BasicHttpEntityEnclosingRequest;import tocol.HttpCoreContext;import tocol.HttpProcessor;import tocol.HttpProcessorBuilder;import tocol.HttpRequestExecutor;import tocol.RequestConnControl;import org.apach
37、tocol.RequestContent;import tocol.RequestExpectContinue;import tocol.RequestTargetHost;import tocol.RequestUserAgent;import org.apache.http.util.EntityUtils;/* * Elemental example for executing multiple POST requests sequentially. */
38、public class ElementalHttpPost public static void main(String args) throws Exception HttpProcessor httpproc = HttpProcessorBuilder.create() .add(new RequestContent() .add(new RequestTargetHost() .add(new RequestConnControl() .add(new RequestUserAgent("Test/1.1") .add(new RequestExpectConti
39、nue(true).build(); HttpRequestExecutor httpexecutor = new HttpRequestExecutor(); HttpCoreContext coreContext = HttpCoreContext.create(); HttpHost host = new HttpHost("localhost", 8080); coreContext.setTargetHost(host); DefaultBHttpClientConnection conn = new DefaultBHttpClientConnection(8 * 1024); ConnectionReuseStrategy connStrategy = DefaultConnectionReuseStrategy.INSTANCE; try HttpEntity requestBodies = new StringEntity( "This is the first test request", ContentType.create("text/p
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- Unit 1 Section B(1a-2b) 教學(xué)設(shè)計 2024-2025學(xué)年人教版(2024年)英語七年級上冊
- 辦公室主任2024個人工作計劃 一
- 五年級品德與社會上冊 與家人和諧相處教學(xué)實錄 泰山版
- 房地產(chǎn)冷餐會策劃方案
- 高中地理 第三章 海洋水體 3.2 海水的運(yùn)動教學(xué)實錄 中圖版選修2
- 端午節(jié)促銷活動方案
- 店長培訓(xùn)心得體會
- 九年級化學(xué)上冊 第六單元 碳和碳的化合物 課題3 二氧化碳和一氧化碳示范教學(xué)實錄 (新版)新人教版
- 音頻電影制作流程
- 第8課《裝扮我們的教室》 (教學(xué)設(shè)計)-2024-2025學(xué)年道德與法治二年級上冊統(tǒng)編版
- (正式版)JTT 421-2024 港口固定式起重機(jī)安全要求
- 2024屆浙江省名校新高考研究聯(lián)盟高三第三次聯(lián)考英語試題含答案
- 混凝土外加劑試驗原始記錄
- 華為5G認(rèn)證考試(H35-460)題庫及答案
- (正式版)JBT 14932-2024 機(jī)械式停車設(shè)備 停放客車通-用技術(shù)規(guī)范
- 第6課 學(xué)書有法 課件-2023-2024學(xué)年高中美術(shù)人教版(2019)選擇性必修2 中國書畫
- 貴州省初中《體育》學(xué)業(yè)水平考試參考題庫(含答案)
- 2024年天津?qū)I居嬎銠C(jī)考試真題試卷及答案
- 合同的變更和解除條款
- 青島版數(shù)學(xué)五年級下冊第二單元《分?jǐn)?shù)的意義和性質(zhì)》教學(xué)評一致性的單元整體備課
- 2023年6月新高考天津卷英語試題真題及答案解析(精校打印版)
評論
0/150
提交評論