java - 从 javascript 调用 java servlet

标签 java javascript ajax web-applications servlets

我正在尝试使用 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 都应该映射到 /myservleturl-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/

相关文章:

java - 在java中,有没有办法知道文件驻留在哪台物理计算机上?

javascript - 动态创建的 Div,外部 Div 的子级,在 Chrome 中位置错误,但在 IE 中正确

javascript - 如何使用 PHP、AJAX 和 AngularJS 创建实时聊天?

javascript - 仅使用 javascript 显示来自 Amazon S3 存储桶的图像

java - 从 servlet 启动 applet

java - 将 xml 解析为 DOM 时保留换行符的十进制值

java - 如何通过 Java 程序设置要使用的 dns 服务器?

javascript - 如何解决 chrome 自动完成与 vuetify 中标签重叠的问题?

javascript - 使用 Nodejs 进行网页抓取

javascript - 捕获 AJAX 响应失败