包含簡單的http伺服器java的詞條

本文目錄一覽:

java http伺服器有哪些功能

HTTP是個大協議,完整功能的HTTP伺服器必須響應資源請求,將URL轉換為本地系統的資源名。響應各種形式的HTTP請求(GET、POST等)。處理不存在的文件請求,返回各種形式的狀態碼,解析MIME類型等。但許多特定功能的HTTP伺服器並不需要所有這些功能。例如,很多網站只是想顯示「建設中「的消息。很顯然,Apache對於這樣的網站是大材小用了。這樣的網站完全可以使用只做一件事情的定製伺服器。Java網路類庫使得編寫這樣的單任務伺服器輕而易舉。

定製伺服器不只是用於小網站。大流量的網站如Yahoo,也使用定製伺服器,因為與一般用途的伺服器相比,只做一件事情的伺服器通常要快得多。針對某項任務來優化特殊用途的伺服器很容易;其結果往往比需要響應很多種請求的一般用途伺服器高效得多。例如,對於重複用於多頁面或大流量頁面中的圖標和圖片,用一個單獨的伺服器處理會更好(並且還可以避免在請求時攜帶不必要的Cookie,因而可以減少請求/響應數據,從而減少下載帶寬,提升速度);這個伺服器在啟動時把所有圖片文件讀入內存,從RAM中直接提供這些文件,而不是每次請求都從磁碟上讀取。此外,如果你不想在包含這些圖片的頁面請求之外單獨記錄這些圖片,這個單獨伺服器則會避免在日誌記錄上浪費時間。

本篇為大家簡要演示三種HTTP伺服器:

(1) 簡單的單文件伺服器

(2) 重定向伺服器

(3) 完整功能的HTTP伺服器

java 如何搭建http伺服器

看你具體是想做什麼,現在現成的開源的java的http伺服器有很多,像tomcat之類的都有http伺服器功能,如果你只是單純的需要用的話,直接用tomcat就好了

但是如果你是做要自己用java實現一個http伺服器的話就要稍微麻煩一點

http伺服器,本質上還是基於tcpip協議的伺服器,首先用java的ServerSocket監聽一個埠(也可以使用開源的server組件,如quickserver之類的),然後對客戶端發上來的數據進行處理,這裡就需要了解一下http協議了,因為上來的數據,都是按照http協議來組織的,你需要將請求數據解析後,將響應數據組織成http的響應,發回給客戶端。這樣一個簡單的http伺服器就實現了。

但是這個請求和響應都有很多種類,一個完整的http伺服器應該要都能夠支持,所以這裡面的工作量還是有一點的。

另外,上面說的http伺服器只是一個靜態的伺服器,如果你想讓你寫的服務具有動態功能,那你的伺服器還得提供javaee的容器功能,這樣做下去,沒準你也能寫一個tomcat出來了……

使用Java開發一個HTTP伺服器,能夠處理POST,GET,PUT,DELETE請求。

使用Java開發一個HTTP伺服器,能夠處理POST,GET,PUT,DELETE請求。

1. 監聽埠可以配置;

2. 可以配置的一個工作目錄;

3. GET請求可以獲得相對於該工作目錄的靜態文件的內容,內容格式限定為html,css,js,json,xml,txt,jpg,gif,png,ico;

a) 例如 GET /f/test1.html返回工作目錄下f文件夾下test1.html內容;

b) 在GET請求的的應答中儘可能多的在HTTP頭中返回些能獲得的到的標準的頭信息;

4. POST請求可以在工作目錄中創建請求路徑對應的文件,文件內容為POST請求的內容;

a) 例如 POST /f/test2.html,在工作目錄下f文件夾下創建test2.html文件,並將POST內容作為test2.html的內容。

5. PUT請求可以替換對應路徑的文件,修改的內容為PUT請求的內容。注意與POST不同。

a) 例如 PUT /f/test2.html,在工作目錄下f文件夾替換test2.html文件的內容,並將PUT內容作為test2.html的內容。

6. DELET請求可以刪除對應路徑的文件。

a) 例如 PUT /f/test2.html,在工作目錄下f文件夾刪除test2.html文件。

7. POST,PUT,DELETE成功後返回200,出現找不到文件的情況返回404錯誤,出現讀寫文件錯誤返回500錯誤。

8. 特別的處理~路徑下的GET請求,其包含2個參數,一個是類名,一個是方法名,這些方法都是些無參數並且以字元串為返回值的方法,GET請求應返回這些方法的返回值。

a) 例如 GET /~?class=com.test.Testmethod=getTIme,則調用com.test.Test類中String getTIme()方法,將返回值作為GET請求的返回;

b) 若找不到類或方法返回404錯誤;

c) 若出錯返回500錯誤;

9. 特別的處理$路徑下的GET請求,能夠為瀏覽器添加cookie,key為sid,值為UUID的隨機字元串。

注意:不是在tomcat之類servlet容器上開發,而是要開發個類似servlet容器的東西。

如何寫一個簡單的HTTP伺服器

本Guide利用Eclipse及Ant建立簡單Web Service演示Web Service基本發程:

1.系統條件:

Eclipse Java EE IDE for Web Developers

Java SE 6

Windows XP

2.基本環境搭建:

1)Java SE6 JDK安裝:載Java SE6 JDK雙擊安裝默認選項進行安裝即

2)Eclipse安裝與配置:

安裝直接解壓

配置處兩點WindowPreferencesJavaInstalled JREs確保設置:

安裝路徑能略同

WindowPreferencesJavaCompiler 確保設置:

3.建立Server端工程相關包與類:

創建Java Project命名wsServerHelloWorld:

項目建立包:org.gnuhpc.wsServer

包邊建立類:SayHello

SayHello.java文件輸入代碼:

package org.gnuhpc.wsServer;

import javax.jws.WebService;

@WebService

public class SayHello {

private static final String SALUTATION = “Hello”;

public String getGreeting(String name) {

return SALUTATION + ” ” + name;

}

}

其注意@WebService 稱作annotation或者metadataJava SE 5Web Services Metadata Specification引入Java SE 6於Web Services規範升級及JAX-WS(Java API for XML Web Services)2.0規範些升級使我Web Services創建調用變更加容易使用些新功能我僅僅使用簡單Annotations注釋Java類創建Web Services發者其類前用該annotations指定類告訴runtime engineWeb Service式操作使能該類annotations產布署Web ServiceWSDL映射annotationsJava源代碼與代表Web ServiceWSDL元素連接起

4.使用Ant產Server端代碼:

首先項目新建文件:build.xml使用OpenWithAntEditor打輸入腳本代碼:

arg line=”-cp ./bin -keep -s ./src -d ./bin

org.gnuhpc.wsServer.SayHello”/

default指定默認執行Targetwsgen,wsgen創建能夠使用WebService類所用於WebService發布源代碼文件經編譯二進位類文件WSDL符合規範該類WebService

Target名稱wsgen具體執行命令參數:

-cp 類路徑

-keep產java文件

-s 產源文件放哪

-d 產輸問價放哪

使用Ant Build選項運行:

功執行提示我刷新Project

我Project區域看結:

5.布Web Service

org.gnuhpc.wsServer建立類RunService:

package org.gnuhpc.wsServer;

import javax.xml.ws.Endpoint;

public class RunService {

/**

*@paramargs

*/

public static void main(String[] args) {

System.out.println(“SayHello Web Service started.”);

Endpoint.publish(“” ,

new SayHello());

}

}

運行Run AsJava Application我結說明web serviceServer端已經啟

6.查看WSDL:

WindowShow ViewOtherGeneralInternal Web Browser其輸入:?wsdl

看看底WSDL都記錄哪些信息看完停止該Server

7.監測Server

我創建完Server用Eclipse Web Services Explorer監測Server

WindowOpen PerspectiveOther JavaEE

打Eclipse Web Services Explorer

點擊右角WSDL Page按鈕:

單擊WSDL MainURL輸入:?wsdl 按Go按鈕現視圖:

我觸發Web Service操作:點擊getGreetings添加參數比gnuhpc點擊Go按鈕:

8.創建Client端 工程相關包與類:

創建Java Project命名wsClientHelloWorld項目建立包:org.gnuhpc.wsClient

9.使用Ant產Client代碼框架:

編寫Web service使用工具利用WSDL進行調用客戶端樁;或者使用底層API手編寫Web service前者便者靈現我通前者做說明:

新建文件build.xml

NewFilebuild.xml

arg line=”-keep -s ./src -p org.gnuhpc.wsClient

-d ./bin ?wsdl”/

注意:wsgen 支持 Java class 創建 Web serviceswsimport 支持 WSDL 創建 Web services別應於 JAX-RPC 式 Java2WSDL WSDL2Java要根據發布WSDL進行創建要先運行RunServer原

運行ServerRunService : Run AsJava Application

運行該Ant腳本產Client代碼:Run AsAnt Build

運行功提示:

代碼:

步讀取WSDL並客戶端樁些樁我代碼所用Java類介面些樁給伺服器端功能提供客戶端介面例我伺服器提供Maths服務該服務帶叫做add我客戶端代碼調用樁樁實現該使用參數封裝Java調用變Webservice請求請求基於HTTP發送給伺服器且使用SOAP作RPC協議監聽伺服器接收該SOAP消息(十八九)其轉換伺服器處調用

java如何創建一個簡單的http介面?

1.修改web.xml文件

!– 模擬HTTP的調用,寫的一個http介面 — servlet servlet-nameTestHTTPServer/servlet-name servlet-classcom.atoz.http.SmsHTTPServer/servlet-class /servlet servlet-mapping servlet-nameTestHTTPServer/servlet-name url-pattern/httpServer/url-pattern /servlet-mapping

2.新建SmsHTTPServer.java文件

package com.atoz.http;

import java.io.IOException; import java.io.PrintWriter;

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

import com.atoz.action.order.SendSMSAction; import com.atoz.util.SpringContextUtil;

public class SmsHTTPServer extends HttpServlet { private static final long serialVersionUID = 1L;

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType(“text/html;charset=utf-8”); request.setCharacterEncoding(“utf-8”); response.setCharacterEncoding(“utf-8”); PrintWriter out = response.getWriter(); String content = request.getParameter(“content”); //String content = new String(request.getParameter(“content”).getBytes(“iso-8859-1”), “utf-8”); String mobiles = request.getParameter(“mobiles”); String businesscode = request.getParameter(“businesscode”); String businesstype = request.getParameter(“businesstype”); if (content == null || “”.equals(content) || content.length() = 0) { System.out.println(“http call failed,參數content不能為空,程序退出”); } else if (mobiles == null || “”.equals(mobiles) || mobiles.length() = 0) { System.out.println(“http call failed,參數mobiles不能為空,程序退出”); } else { /*SendSMSServiceImpl send = new SendSMSServiceImpl();*/ SendSMSAction sendSms = (SendSMSAction) SpringContextUtil.getBean(“sendSMS”); sendSms.sendSms(content, mobiles, businesscode, businesstype); System.out.println(“—http call success—“); } out.close(); }

public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doGet(request, response); } }

3.調用http介面

String content = “測試”; content = URLEncoder.encode(content, “utf-8”); String url = “” + content + “mobiles=15301895007”; URL httpTest; try { httpTest = new URL(url); BufferedReader in; try { in = new BufferedReader(new InputStreamReader( httpTest.openStream())); String inputLine = null; String resultMsg = null; //得到返回信息的xml字元串 while ((inputLine = in.readLine()) != null) if(resultMsg != null){ resultMsg += inputLine; }else { resultMsg = inputLine; } in.close(); } catch (MalformedURLException e) { e.printStackTrace(); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }

打字不易,望採納,謝謝

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/236402.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-12 11:59
下一篇 2024-12-12 12:00

相關推薦

  • Python簡單數學計算

    本文將從多個方面介紹Python的簡單數學計算,包括基礎運算符、函數、庫以及實際應用場景。 一、基礎運算符 Python提供了基礎的算術運算符,包括加(+)、減(-)、乘(*)、除…

    編程 2025-04-29
  • Python滿天星代碼:讓編程變得更加簡單

    本文將從多個方面詳細闡述Python滿天星代碼,為大家介紹它的優點以及如何在編程中使用。無論是剛剛接觸編程還是資深程序員,都能從中獲得一定的收穫。 一、簡介 Python滿天星代碼…

    編程 2025-04-29
  • 伺服器安裝Python的完整指南

    本文將為您提供伺服器安裝Python的完整指南。無論您是一位新手還是經驗豐富的開發者,您都可以通過本文輕鬆地完成Python的安裝過程。以下是本文的具體內容: 一、下載Python…

    編程 2025-04-29
  • Python海龜代碼簡單畫圖

    本文將介紹如何使用Python的海龜庫進行簡單畫圖,並提供相關示例代碼。 一、基礎用法 使用Python的海龜庫,我們可以控制一個小海龜在窗口中移動,並利用它的「畫筆」在窗口中繪製…

    編程 2025-04-29
  • STUN 伺服器

    STUN 伺服器是一個網路伺服器,可以協助網路設備(例如 VoIP 設備)解決 NAT 穿透、防火牆等問題,使得設備可以正常地進行數據傳輸。本文將從多個方面對 STUN 伺服器做詳…

    編程 2025-04-29
  • 解決docker-compose 容器時間和伺服器時間不同步問題

    docker-compose是一種工具,能夠讓您使用YAML文件來定義和運行多個容器。然而,有時候容器的時間與伺服器時間不同步,導致一些不必要的錯誤和麻煩。以下是解決方法的詳細介紹…

    編程 2025-04-29
  • Python櫻花樹代碼簡單

    本文將對Python櫻花樹代碼進行詳細的闡述和講解,幫助讀者更好地理解該代碼的實現方法。 一、簡介 櫻花樹是一種圖形效果,它的實現方法比較簡單。Python中可以通過turtle這…

    編程 2025-04-28
  • Python大神作品:讓編程變得更加簡單

    Python作為一種高級的解釋性編程語言,一直被廣泛地運用於各個領域,從Web開發、遊戲開發到人工智慧,Python都扮演著重要的角色。Python的代碼簡潔明了,易於閱讀和維護,…

    編程 2025-04-28
  • 用Python實現簡單爬蟲程序

    在當今時代,互聯網上的信息量是爆炸式增長的,其中很多信息可以被利用。對於數據分析、數據挖掘或者其他一些需要大量數據的任務,我們可以使用爬蟲技術從各個網站獲取需要的信息。而Pytho…

    編程 2025-04-28
  • 如何選擇MySQL伺服器文件許可權

    MySQL是一種流行的關係型資料庫管理系統。在安裝MySQL時,選擇正確的文件許可權是保證安全和性能的重要步驟。以下是一些指導您選擇正確許可權的建議。 一、許可權選擇 MySQL伺服器需…

    編程 2025-04-27

發表回復

登錄後才能評論