HttpParams params = new BasicHttpParams();
params.setParameter(CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1);
HttpClient httpclient = new DefaultHttpClient(params);
HttpPost httppost = new HttpPost(address);
try {
// Execute HTTP Post Request
HttpResponse response = httpclient.execute(httppost);
} catch (IOException ex) {
logger.log(Level.SEVERE, null, ex);
}
我使用此代碼段發送一個HTTP POST請求在Apache一個servlet Tomcat駐留在本地主機上。到Tomcat地址的發佈請求(沒有任何參數),即http://127.0.0.1:8084
花費大約1000毫秒。雖然發送到地址爲http://127.0.0.1
的Apache(wamp服務器)的相同請求僅需要20ms。POST請求127.0.0.1:8084/(Tomcat)的需要〜1000毫秒,而到127.0.0.1/(WAMP)需要20毫秒〜
我已經嘗試過使用Http版本(1.0/1.1),但響應時間沒有影響。
任何可能出錯的線索?或者如何改善這種表現?還是Tomcat本身如此之慢,我對這個問題無能爲力? (但後來的瀏覽器是能夠加載的servlet沒有任何顯著網絡延遲!)
附加信息:
此代碼本身就是一個Servlet這基本上是什麼都不做,但只是提出這個要求內。應該處理請求的servlet也是「空白」的。而且,整個場景中不涉及JSP。時間記錄不適用於冷靜的tomcat。第一次和(有時)第二次調用需要超過2000毫秒。但連續的請求被標準化爲超過1000毫秒。所以,這當然不是一個冷靜的tomcat問題。
現在,這裏的人們也問我servlet代碼。這裏是我正在處理的基本設計:
Servlet A應該做一些工作並使用我編寫的AgniLogger類進行記錄。 該類在庫中,計劃從幾個組件使用。它反過來使用上面的書面代碼發送POST請求到servlet B. Servlet B將執行實際的日誌記錄。現在,這個servlet B還沒有實現。 Servlet A和B是不同Web應用程序的一部分。
的Servlet答:http://pastebin.com/tQjtvG3g
AgniLogger:http://pastebin.com/nGJypmCN
的Servlet B:http://pastebin.com/psCxLCYY
P.S:我使用NetBeans開發和存在的項目沒有web.xml中爲止。
解決方法(雖然很怪異!)
如果我改變的processRequest的定義()在Servlet的B,從{空白}功能,這一點:
PrintWriter out = response.getWriter();
try {
//do nothing
} finally {
out.close();
}
的問題得到解決。響應時間減少到20ms左右,就像80端口上的Apache(WAMP)服務器一樣。但是,我不知道爲什麼這個工作正常!
請將這些「空白」servlet也添加到問題中,以防萬一它們有相關性。另外,你是否嘗試過在另一端計算它們,在servlet完成處理之後還是在它之前需要時間?另外,你的web.xml怎麼樣?它是否有過濾器或其他?請張貼也。 – eis
發佈servlet。 – Subin
用servlet代碼和web.xml信息更新了問題。 –