一個簡易的java http伺服器
TTP是個大協議,完整功能的HTTP伺服器必須響應資源請求,將URL轉換為本地系統的資源名。響應各種形式的HTTP請求(GET、POST等)。處理不存在的檔案請求,返回各種形式的狀態碼,解析MIME型別等。但許多特定功能的HTTP伺服器並不需要所有這些功能。例如,很多網站只是想顯示“建設中“的訊息。很顯然,Apache對於這樣的網站是大材小用了。這樣的網站完全可以使用只做一件事情的定製伺服器。Java網路類庫使得編寫這樣的單任務伺服器輕而易舉。
定製伺服器不只是用於小網站。大流量的網站如Yahoo,也使用定製伺服器,因為與一般用途的伺服器相比,只做一件事情的伺服器通常要快得多。針對某項任務來優化特殊用途的伺服器很容易;其結果往往比需要響應很多種請求的一般用途伺服器高效得多。例如,對於重複用於多頁面或大流量頁面中的圖示和圖片,用一個單獨的伺服器處理會更好(並且還可以避免在請求時攜帶不必要的Cookie,因而可以減少請求/響應資料,從而減少下載頻寬,提升速度);這個伺服器在啟動時把所有圖片檔案讀入記憶體,從RAM中直接提供這些檔案,而不是每次請求都從磁碟上讀取。此外,如果你不想在包含這些圖片的頁面請求之外單獨記錄這些圖片,這個單獨伺服器則會避免在日誌記錄上浪費時間。
本篇為大家簡要演示三種HTTP伺服器:
(1) 簡單的單檔案伺服器
(2) 重定向伺服器
(3) 完整功能的HTTP伺服器
簡單的單檔案伺服器
該伺服器的功能:無論接受到何種請求,都始終傳送同一個檔案。這個伺服器命名為SingleFileHTTPServer,檔名、本地埠和內容編碼方式從命令列讀取。如果預設埠,則假定埠號為80。如果預設編碼方式,則假定為ASCII。[java] view plain copy print?
- import java.io.*;
-
import
- import java.net.Socket;
- publicclass SingleFileHTTPServer extends Thread {
- privatebyte[] content;
- privatebyte[] header;
- privateint port=80;
- private SingleFileHTTPServer(String data, String encoding,
-
String MIMEType, int port)
- this(data.getBytes(encoding), encoding, MIMEType, port);
- }
- public SingleFileHTTPServer(byte[] data, String encoding, String MIMEType, int port)throws UnsupportedEncodingException {
- this.content=data;
- this.port=port;
- String header="HTTP/1.0 200 OK\r\n"+
- "Server: OneFile 1.0\r\n"+
- "Content-length: "+this.content.length+"\r\n"+
- "Content-type: "+MIMEType+"\r\n\r\n";
- this.header=header.getBytes("ASCII");
- }
- publicvoid run() {
- try {
- ServerSocket server=new ServerSocket(this.port);
- System.out.println("Accepting connections on port "+server.getLocalPort());
- System.out.println("Data to be sent:");
- System.out.write(this.content);
- while (true) {
- Socket connection=null;
- try {
- connection=server.accept();
- OutputStream out=new BufferedOutputStream(connection.getOutputStream());
- InputStream in=new BufferedInputStream(connection.getInputStream());
- StringBuffer request=new StringBuffer();
- while (true) {
- int c=in.read();
- if (c=='\r'||c=='\n'||c==-1) {
- break;
- }
- request.append((char)c);
- }
- //如果檢測到是HTTP/1.0及以後的協議,按照規範,需要傳送一個MIME首部
- if (request.toString().indexOf("HTTP/")!=-1) {
- out.write(this.header);
- }
- out.write(this.content);
- out.flush();
- } catch (IOException e) {
- // TODO: handle exception
- }finally{
- if (connection!=null) {
- connection.close();
- }
- }
- }
- } catch (IOException e) {
- System.err.println("Could not start server. Port Occupied");
- }
- }
- publicstaticvoid main(String[] args) {
- try {
- String contentType="text/plain";
- if (args[0].endsWith(".html")||args[0].endsWith(".htm")) {
- contentType="text/html";
- }
- InputStream in=new FileInputStream(args[0]);
- ByteArrayOutputStream out=new ByteArrayOutputStream();
- int b;
- while ((b=in.read())!=-1) {
- out.write(b);
- }
- byte[] data=out.toByteArray();
- //設定監聽埠
- int port;
- try {
- port=Integer.parseInt(args[1]);
- if (port<1||port>65535) {
- port=80;
- }
- } catch (Exception e) {
- port=80;
- }
- String encoding="ASCII";
- if (args.length>2) {
-
相關推薦
編寫一個簡易的 HTTP 伺服器程式
好久沒輸出了,知識還是要寫下總結才能讓思路更加清晰。最近在學習計算機網路相關的知識,來聊聊如何編寫一個建議的HTTP伺服器。 HTTP 伺服器 HTTP伺服器,就是一個執行在主機上的程式。程式啟動了之後,會一直在等待其他所有客戶端的請求,接收到請求之後,處理請求,然
一個簡易的java http伺服器
TTP是個大協議,完整功能的HTTP伺服器必須響應資源請求,將URL轉換為本地系統的資源名。響應各種形式的HTTP請求(GET、POST等)。處理不存在的檔案請求,返回各種形式的狀態碼,解析MIME型別等。但許多特定功能的HTTP伺服器並不需要所有這些功能。例如,很多
用JAVA實現一個簡單地Http伺服器
SimpleHttpServer.java import java.io.FileInputStream; import java.io.IOException; import java.net.InetSocketAddress; import java.net.So
python3 使用http.server模塊 搭建一個簡易的http服務器
test class ont elf resp his local and height from http.server import HTTPServer, BaseHTTPRequestHandler import json data = {‘result‘:
在Android中實現一個簡易的Http服務器
.get json data ESS public 瀏覽器 顯示 getmethod blank 最近遇到一個需求需要在App中創建一個Http服務器供供瀏覽器調用,用了下開源的微型Htpp服務器框架:NanoHttpd,項目地址:https://github.com/Na
Qt Http QHttpMultiPart上傳檔案到java http伺服器
Qt Http QHttpMultiPart上傳檔案到java http伺服器 1.最近專案用到了Qt上傳檔案到HT
C實現的 簡易的http伺服器
#include <stdio.h> #include <ctype.h> #include <sys/types.h> #include <netinet/in.h> #include <sys/socket.h> #include &l
Node -- 使用express框架搭建一個簡易本機伺服器(純手打)
直接開擼,建立專案資料夾,在cmd中進入專案路徑或者直接在webstorm下點開Terminal,輸入命令 npm install nrm -g -g:全域性安裝 國內包對映庫,下載nrm的模組到專案中 nrm:切換映象地址的模組包 nrm-h:幫助 nrm ls:可以檢視所有
使用Node.js建立一個簡單的HTTP伺服器
1.建立一個名為test.js的檔案,內容為: // test.js // 請求http模組 var http = require('http'); // 建立伺服器 http.createServer(function (req, res) { res.writ
python實現一個簡單的http伺服器
1. HTTP伺服器的實現 實現一個http伺服器說白了就是實現一個監聽程式,當客戶端發來對應的http請求時,能夠解析請求,並且返回對應的資源給客戶端,客戶端解析顯示到瀏覽器上。這裡我使用python實現一個最簡單的http伺服器。 1.1初始化 定義一個初始化方法,建立套
使用ffmpeg和nginx搭建一個簡易的HLS伺服器(2)-參考
參考:http://idadu.org/wordpress/使用ffmpeg和nginx搭建一個簡易的hls伺服器/ 使用ffmpeg和nginx搭建一個簡易的HLS伺服器 0. HLS Intro HTTP Live Streaming (also known
用Python socket實現一個簡單的http伺服器(post 與get 的區別)、CGIHTTPServer 簡單應用
#!/usr/bin/env python #coding=utf-8import socketimport re HOST = '' PORT = 8000#Read index.html, put into HTTP response dataindex_content = '''HTTP/1.x 200
一個簡單的HTTP伺服器
應用程式的入口在HttpServer類中。main()方法建立一個HttpServer例項,然後呼叫await()方法。伺服器會在指定的埠上等待HTTP請求,對其進行處理,然後傳送響應資訊回客戶端。
爬蟲實戰:一個簡易 Java 爬蟲程式的實現
前面,我們分別介紹了爬蟲程式的 3 個部分:原始碼下載、內容解析、頁面連結提取。現在,讓我們把這些部分串起來,構建一個完整的簡易爬蟲程式。 爬蟲流程 構建程式前,我們首先需要了解爬蟲的具體流程。 一個簡易的爬蟲程式,具備以下流程: 若
如何寫一個簡單的HTTP伺服器(重做版)
最近幾天用C++重新寫了之前的HTTP伺服器,對以前的程式碼進行改進。新的HTTP伺服器採用Reactor模式,有多個執行緒並且每個執行緒有一個EventLoop,主程式將任務分發到每個執行緒,其中採用的是輪盤排程來均勻分配任務。 伺服器的原始碼放在Github。以前的舊版本也放在我的GitHub上,在Oh-
Tinywebserver:一個簡易的web伺服器
這是學習網路程式設計後寫的一個練手的小程式,可以幫助複習I/O模型,epoll使用,執行緒池,HTTP協議等內容。 首先回顧程式中的核心內容和主要問題,最後給出相關程式碼。 0. 功能和I/O模型 實現簡易的HTTP服務端,現僅支援GET方法,通過瀏覽器訪問可以返回相應內容。 I/O模型採用Reactor(
網路程式設計知識(5)--用Netty實現的一個簡單的HTTP伺服器
用Netty實現的一個簡單的HTTP伺服器,可以處理靜態檔案,例子中的註釋也比較全。 public class HttpServer { public static void main(String[] args) {
【go語言 socket程式設計系列】一個簡單的HTTP伺服器及func (srv *Server) Serve(l net.Listener) 方法
【簡單的HTTP伺服器】 原始檔server.go中 ListenAndServe()函式的註釋中有個簡單的HTTP服務實現程式碼,如下 package main import ( "io" "log" "net/http" ) func HelloServ
android 設計一個簡易的Http網路請求框架
一.開發初衷:最近專案中需要用到版本升級這一塊,需要用到一些基本的資料請求與檔案下載功能。之前做專案都是用別人的網路框架,類似retrofit 、 okhttp、 fresco等框架,用的多了,發現這幾個網路請求框架,無非都是 按解決以下幾個問題為導向的: 1
【Tomcat8.5原始碼分析】【3】一個簡單的HTTP伺服器
通過上面兩篇文章的學習,我們知道了HTTP\SOCK\TCP\IP之間的關係以及區別,接下來我們手寫一個HTTP伺服器 首先我們定義一個HttpServer類,該類主要用以建立一個ServerSocket,當有請求進入的時候會通過accept()方法生