Я теряю рассудок, пытаясь решить эту проблему. У меня есть следующий сервлет развернут в Tomcat работает на локальном хосте: 8080-:servlet - Почему XMLHttpRequest responseText всегда пуст?
@WebServlet(urlPatterns = { "/createcon" }, asyncSupported = true)
public class CreateCon extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
ConcurrentHashMap<String, AsyncContext> map;
public CreateCon() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
public void init() {
map = new ConcurrentHashMap<>();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
AsyncContext context = request.startAsync(request,response);
context.setTimeout(10000);
if(!map.containsKey("Hello"))
map.put("Hello", context);
System.out.print("Inside GET");
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
AsyncContext context = map.get("Hello");
PrintWriter writer = context.getResponse().getWriter();
writer.write(request.getParameter("message"));
writer.flush();
System.out.print(request.getParameter("message"));
}
}
Как вы можете видеть, что я пытаюсь хранить AsyncContext, созданный в карте. Я код отлично работает в Eclipse с Tomcat. Как вы можете видеть выше, я добавил System.out.print
, чтобы проверить, работает ли код правильно или нет. И он работает точно так, как ожидалось.
Но проблема с яваскриптом цен ниже:
function postMessage(){
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange=function(){
if (xmlhttp.readyState==4 && xmlhttp.status==200) {
alert(xmlhttp.responseText);
}
}
xmlhttp.open("POST", "/SampleTest/createcon", true);
xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
var messageText = escape(document.getElementById("i1").value);
document.getElementById("i1").value = "";
xmlhttp.send("message="+messageText);
}
В onreadystatechange
пожарах точно, когда ожидается, но xmlhttp.responseText
всегда пусто.
Я знаю, что есть что-то известное как политика того же происхождения. Но я не понимаю, почему здесь проблема? Я запускаю все на localhost:8080
.
Почему это все еще происходит и как я могу это решить?
Что возвращает запрос в консоли? – Mouser
@Mouser Какой запрос вы говорите? Не могли бы вы быть более конкретными относительно того, о чем вы говорите? – Heidi
Я имею в виду ваш XmlHTTPRequest для '/ SampleTest/createcon' на сервере. Если вы посмотрите на вкладку в сети консоли в браузере, вы можете проверить, как был отправлен запрос и что он отправил обратно. – Mouser