После HTML документа использует jQuery.post()
метод для отправки асинхронного запроса AJAX в сервлет:
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>click demo</title>
<style>
body {font-family: verdana;margin:20px; font-size: 14px;}
div.container {border: 1px solid black;
background-color: #f0ffff;padding:10px;width:460px;
}
p.result {color:red;font-weight:bold;}
h3 {color:blue;}
</style>
<script src="http://code.jquery.com/jquery-1.9.1.js"></script>
</head>
<script>
$(document).ready(function() {
$("#myAsyncBtn").click(function() {
$.post(
"async",
function(data) {
$(".result").html(data);
}
);
});
});
</script>
<body>
<div class="container">
<h3>Ajax Request Detection using Java</h3>
<p>Click this button to make a Asynchronous Request
<button id="myAsyncBtn"> Click Here</button>
</p>
<p>Now click a Link to make a synchronous request
<a href="async">Sync Call</a>
</p>
<p class="result"></p>
</div>
</body>
</html>
контроллер, который необходимо иметь дело с обоих типов запроса может использовать request.getHeader()
метод для определения типа запроса. Разработчик может использовать параметр заголовка x-requested-with
, чтобы получить тип запроса. В случае запроса Ajax request.getHeader('x-requested-with')
вернет XMLHttpRequest
как String else return null
.
package org.techzoo.async;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/async")
public class AsyncServlet extends HttpServlet {
public AsyncServlet() {
super();
}
@Override
protected void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
String headerName = request.getHeader("x-requested-with");
if(null == headerName){
PrintWriter out = response.getWriter();
String html = "<h3>Clinet send a Synchronous request</h3>" +
"<p><a href=\"index.jsp\">Go Back</a> to main page</p>";
out.write(html);
}
else {
ServletOutputStream out = response.getOutputStream();
out.print("Ajax Request Detected");
out.flush();
}
}
}
возможно дубликат [Как обнаружить, если запрос Ajax или нормально на стороне сервера] (http://stackoverflow.com/questions/2419223/how-to-detect-if-a-request-is -ajax-or-normal-on-server-side) – Ilya
Возможный дубликат [JSP/Servlet. Как определить, был ли HTTP-запрос отправлен с помощью запроса ajax] (http://stackoverflow.com/questions/14004877/jsp-servlet -how-to-ident-if-the-http-request-come-from-a-ajax-запрос) – icza
Нет другого надежного метода afaik. Но что случилось с методом, который вы опубликовали? – icza