所以你想触发Ajax 对servlet 的调用?为此,您需要 JavaScript 中的 XMLHttpRequest 对象。这是一个与 Firefox 兼容的示例:
<script>
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
if (xhr.readyState == 4) {
var data = xhr.responseText;
alert(data);
}
}
xhr.open('GET', '${pageContext.request.contextPath}/myservlet', true);
xhr.send(null);
</script>
然而,这非常冗长并且不是真正的跨浏览器兼容。对于触发 ajaxical 请求和遍历 HTML DOM 树的最佳跨浏览器兼容方式,我建议使用 jQuery。这是上面在 jQuery 中的重写:
<script src="http://code.jquery.com/jquery-latest.min.js"></script>
<script>
$.get('${pageContext.request.contextPath}/myservlet', function(data) {
alert(data);
});
</script>
无论哪种方式,服务器上的 Servlet 都应该映射到 /myservlet 的 url-pattern 上(您可以根据自己的喜好更改此设置)并至少实现 doGet() 并将数据写入响应,如下所示:
String data = "Hello World!";
response.setContentType("text/plain");
response.setCharacterEncoding("UTF-8");
response.getWriter().write(data);
这应该在 JavaScript 警报中显示 Hello World!。
当然你也可以使用doPost(),但是你应该在xhr.open()中使用'POST'或者在jQuery中使用$.post()而不是$.get()。
然后,要在 HTML 页面中显示数据,您需要操作 HTML DOM。例如,您有一个
<div id="data"></div>
在您想要显示响应数据的 HTML 中,您可以这样做,而不是第一个示例的 alert(data):
document.getElementById("data").firstChild.nodeValue = data;
在 jQuery 示例中,您可以以更简洁和更好的方式执行此操作:
$('#data').text(data);
要更进一步,您需要一种易于访问的数据格式来传输更复杂的数据。常见的格式是 XML 和 JSON。有关它们的更详细示例,请前往How to use Servlets and Ajax?