本文目錄一覽:
- 1、java http伺服器有哪些功能
- 2、java 如何搭建http伺服器
- 3、使用Java開發一個HTTP伺服器,能夠處理POST,GET,PUT,DELETE請求。
- 4、如何寫一個簡單的HTTP伺服器
- 5、java如何創建一個簡單的http介面?
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