A. java實現調用webserver
一、利用jdk web服務api實現,這里使用基於 SOAP message 的 Web 服務
1.首先建立一個Web services EndPoint:
Java代碼
package Hello;
import javax.jws.WebService;
import javax.jws.WebMethod;
import javax.xml.ws.Endpoint;
@WebService
public class Hello {
@WebMethod
public String hello(String name) {
return "Hello, " + name + "\n";
}
public static void main(String[] args) {
// create and publish an endpoint
Hello hello = new Hello();
Endpoint endpoint = Endpoint.publish("http://localhost:8080/hello", hello);
}
}
Java代碼
package Hello;
import javax.jws.WebService;
import javax.jws.WebMethod;
import javax.xml.ws.Endpoint;
@WebService
public class Hello {
@WebMethod
public String hello(String name) {
return "Hello, " + name + "\n";
}
public static void main(String[] args) {
// create and publish an endpoint
Hello hello = new Hello();
Endpoint endpoint = Endpoint.publish("http://localhost:8080/hello", hello);
}
}
2.使用 apt 編譯 Hello.java(例:apt -d [存放編譯後的文件目錄] Hello.java ) ,會生成 jaws目錄
3.使用java Hello.Hello運行,然後將瀏覽器指向http://localhost:8080/hello?wsdl就會出現下列顯示
4.使用wsimport 生成客戶端
使用如下:wsimport -p . -keep http://localhost:8080/hello?wsdl
5.客戶端程序:
Java代碼
class HelloClient{
public static void main(String args[]) {
HelloService service = new HelloService();
Hello helloProxy = service.getHelloPort();
String hello = helloProxy.hello("你好");
System.out.println(hello);
}
}
Java代碼
class HelloClient{
public static void main(String args[]) {
HelloService service = new HelloService();
Hello helloProxy = service.getHelloPort();
String hello = helloProxy.hello("你好");
System.out.println(hello);
}
}
B. HOST頭攻擊漏洞的解決: web應用使用SERVER_NAME而非host header。 請問具體如何實施呢(是java開發的)
host header,就是請求消息頭裡面的一個欄位,如下圖
SERVER_NAME應該是指Nginx或者tomcat裡面的一個白名單機制,意思是配置之後,只有白名單內的ip才被允許訪問,具體怎麼用不清楚。
解決這個漏洞,網上有這種方案,可以一試:
打開tomcat的conf目錄中的server.xml文件,在<Host>節點做如下配置:
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
<Alias>10.1.8.158</Alias><!--10.1.8.158 本地區域網-->
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log." suffix=".txt" resolveHosts="false" pattern="%a %A %b %B %h %H %l %m %p %s %S %t %u %U %v %D %T" />
</Host>
C. web server與app server有什麼不同
1、處理問題不同
Web伺服器處理HTTP請求,而app伺服器基於多種不同的協議,處理應用程序的邏輯問題
2、功能不同
當web伺服器接收到一個請求,它只是簡單的將請求交給處理該請求的最優程序。除了為伺服器程序簡單的提供一個運行環境之外,web伺服器不提供任何功能。不同於web伺服器主要發送用來展示在瀏覽器上的HTML頁面,app伺服器為客戶端程序處理應用邏輯方面問題。
3、提供的服務不同
web伺服器一般會提供諸如容錯機制,負載均衡、緩存、集群等。app伺服器通過元件API,比如基於j2ee app伺服器的EJB,來提供應用邏輯。而更多的情況下,app伺服器自己管理自己的資源。這些責任(gate-keeping)包括安全、進程交互、資源池、消息分發等。
(3)webserverjava擴展閱讀
主要web server產品
1、kangle
kangleweb伺服器(簡稱:kangle)是一款跨平台、功能強大、安全穩定、易操作的高性能web伺服器和反向代理伺服器軟體。除此:kangle也是一款專為做虛擬主機研發的web伺服器。實現虛擬主機獨立進程、獨立身份運行。
用戶之間安全隔離,一個用戶出問題不影響其他用戶。安全支持php、asp、net、java、ruby等多種動態開發語言。
2、nginx
Nginx(發音同 engine x)是一款輕量級的Web伺服器/反向代理伺服器及電子郵(IMAP/POP3)代理伺服器,並在一個BSD-like 協議下發行。由俄羅斯的程序設計師Igor Sysoev所開發,供俄國大型的入口網站及搜索引擎Rambler(俄文:Рамблер)使用。
其特點是佔有內存少,並發能力強,事實上nginx的並發能力確實在同類型的網頁伺服器中表現較好,中國大陸使用nginx網站用戶有:新浪、網易、騰訊等。
3、apache
Apache是世界使用排名第一的Web伺服器軟體。它可以運行在幾乎所有廣泛使用的計算機平台上,由於其跨平台和安全性被廣泛使用,是最流行的Web伺服器端軟體之一。
同時Apache音譯為阿帕奇,是北美印第安人的一個部落,叫阿帕奇族,在美國的西南部。也是一個基金會的名稱、一種武裝直升機等等。
app伺服器的功能。
場景1:web伺服器,而非app伺服器
在這個場景里,web伺服器獨自提供在線商店的功能。它接受用戶的請求,交給伺服器端程序處理。該伺服器端程序通過資料庫,或者純文本,查找到價格信息,然後生成HTML響應,通過web伺服器返回給用戶的瀏覽器。
總結來說,web伺服器僅需要接受HTTP請求,並響應HTML網頁。
場景2: web伺服器 + app伺服器
同場景1一樣,web伺服器仍然代理腳本生成的響應。但是你可以把業務邏輯部署在app伺服器上。
這樣,腳本就不需要去關注怎樣查詢和生成響應,而僅需要調用app伺服器提供查詢服務,從而利用其生成它的HTML響應。
在這個例子中,app伺服器提供了價格查詢的業務邏輯。這個邏輯不應該包含怎樣去展示,或者強迫客戶端使用這些數據。相反的是,客戶端和app伺服器進行交互,只有當客戶端調用了app伺服器的價格查詢服務的時候,該服務才查找到信息並返回。
同HTML代碼生成分離開後,價格查詢邏輯的復用性提高了。另外一個客戶端,比如收銀機,同樣可以調用這個介面。而場景1里,價格查詢服務就很難被重用,因為它和HTML頁面緊密聯系。
總結來說,第二個場景中,web伺服器處理HTTP請求,並返回HTML頁面,而app伺服器處理業務邏輯。