У меня возникла следующая проблема. В моем приложении мне нужно отправить файл XML на сервер и дождаться его ответа. Я достиг вышеуказанного, используя Apache HttpClient:
- , создайте xml
- , используя HttpClient и Post, чтобы отправить его на сервер
Сервер первоначально ответил 302 (Объект перемещен), поэтому я использовал LaxRedirectStrategy, чтобы иметь возможность следовать перенаправлению. Я помещаю ответ в StringBuffer, а затем помещаю sh в новую вкладку браузера. Все работает нормально, на вкладке отображается полный ответ от этого сервера, но каждое действие на этой странице связано не с URL-адресом ответа сервера, а с моим основным приложением. Так, например, если мое приложение на https://myapplication.com, а сервер на https://theotherserver.com (+ / редирект для перенаправления), каждое действие на странице (т.е. / действие) приводит к https://myapplication.com/action, а не к https://theotherserver.com/action.
На моей странице у меня есть кнопка, с которой начинается этот процесс. Когда вы щелкаете по нему, он выполняет:
jQuery('input#button').on
(
'click',
function ()
{
jQuery.ajax
(
{
url: 'myURL.do',
data: {data: mydata},
method: 'POST',
success: function(data)
{
if (data.success == 'true')
{
var w = window.open('tab', windowname');
w.document.write(data.result);
w.document.close();
w.focus();
}
else
{
alert(data.error);
}
}
});
});
.do выполняет следующее:
public ResponseEntity<Map<String, String>> myMethod(HttpServletRequest request, HttpServletResponse response) throws ParserConfigurationException
{
Map<String, String> respData = new HashMap<String, String>();
try
{
String myXML = prepareMyXMLFile();
String result = sendMyXMLFile(myXML);
respData.put("success", String.valueOf(true));
respData.put("result", result);
return new ResponseEntity<Map<String, String>>(respData, HttpStatus.OK);
}
catch (Exception e)
{
respData.put("success", String.valueOf(false));
respData.put("error", String.valueOf(e));
return new ResponseEntity<Map<String, String>>(respData, HttpStatus.INTERNAL_SERVER_ERROR);
}
}
и, наконец, sendMyXMLFile ():
private String sendMyXML(String myXML)
{
try
{
HttpClient client = HttpClientBuilder.create().setRedirectStrategy(new LaxRedirectStrategy()).build();
HttpPost post = new HttpPost("myURL");
List<NameValuePair> urlParameters = new ArrayList<NameValuePair>();
urlParameters.add(new BasicNameValuePair("xml", myXML));
post.setEntity(new UrlEncodedFormEntity(urlParameters));
HttpResponse response = client.execute(post);
BufferedReader rd = new BufferedReader(new
InputStreamReader(response.getEntity().getContent()));
StringBuffer responseResult = new StringBuffer();
String line = "";
while ((line = rd.readLine()) != null)
{
responseResult.append(line);
}
return responseResult.toString();
}
catch (IOException | TransformerException e)
{
//log error
}
return null;
}
Что делать Мне нужно сделать, чтобы использовать URL-адрес ответа в качестве базового URL-адреса на другой вкладке? Любая помощь приветствуется. Спасибо