跨域Servlet調用Servlet的實現
跨域後,Servlet容器之間彼此是未知的環境,也不能獲取到對方的ServetContext。因此使用內部跳轉和重定向(需要帶請求參數)調用都是錯誤的,也是無效的。
通過HttpClinet模擬發起請求,可以實現跨域Servlet調用Servlet。
實現方法:在Servlet的service方法中創建httpclient對象,來發起第二次請求。將請求轉發個另一個域的servlet。
public void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//todo:執行第一個請求的處理
....... //發出第二次請求,調用第二個Servert:postRemotetUrl
//建立HTTP請求
HttpClient httpClient = new DefaultHttpClient();
//注冊證書
httpClient.getConnectionManager().getSchemeRegistry().register(sch);
//設置請求超時時間
httpClient.getParams().setIntParameter(HttpConnectionParams.SO_TIMEOUT, 20000);
//設置連接超時時間
httpClient.getParams().setIntParameter(HttpConnectionParams.CONNECTION_TIMEOUT, 30000);
//建立POST請求
HttpPost httpPost = new HttpPost(postRemotetUrl);
httpPost.setEntity(new StringEntity(msg));
//提交httppost請求
HttpResponse httpResp = httpClient.execute(httpPost);
httpClient.getConnectionManager().shutdown();
.......
}