我正在尝试使用 MVC 设计模式创建 Web 应用程序。对于 GUI 部分,我想使用 JavaScript。而对于 Controller Java Servlets。
现在我从来没有真正使用过 JavaScript,所以我很难弄清楚如何从 JavaScript 调用 Java Servlet 以及如何从 Servlet 获得响应。
谁能帮帮我?
最佳答案
所以你想触发 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'
或使用 $.post()
而不是 jQuery 中的 $.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?
关于java - 从 javascript 调用 java servlet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3028490/