woo*_*roo 34 javascript java ajax servlets web-applications
我正在尝试使用MVC设计模式创建Web应用程序.对于GUI部分,我想使用JavaScript.并为控制器Java Servlets.
现在我从未真正使用过JavaScript,因此我很难弄清楚如何从JavaScript调用Java Servlet以及如何从Servlet获取响应.
有人可以帮帮我吗?
Bal*_*usC 67
所以你想要激活对servlet的Ajax调用?为此,您需要XMLHttpRequest
JavaScript中的对象.这是Firefox兼容的示例:
<script>
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
if (xhr.readyState == 4) {
var data = xhr.responseText;
alert(data);
}
}
xhr.open('GET', 'myservlet', true);
xhr.send(null);
</script>
Run Code Online (Sandbox Code Playgroud)
然而,这是非常冗长的,并不是真正的交叉浏览器兼容.为了获得最佳的crossbrowser兼容方式来解决ajaxical请求和遍历HTML DOM树,我建议抓住jQuery.这是在jQuery中重写上面的内容:
<script src="http://code.jquery.com/jquery-latest.min.js"></script>
<script>
$.get('myservlet', function(data) {
alert(data);
});
</script>
Run Code Online (Sandbox Code Playgroud)
无论哪种方式,在服务器上的Servlet应该在一个被映射url-pattern
的/myservlet
(你可以将其更改为自己的口味),并至少doGet()
实现,如下数据写入响应:
String data = "Hello World!";
response.setContentType("text/plain");
response.setCharacterEncoding("UTF-8");
response.getWriter().write(data);
Run Code Online (Sandbox Code Playgroud)
这应该显示Hello World!
在JavaScript警报中.
你当然也可以使用doPost()
,但是你应该使用'POST'
in xhr.open()
或use $.post()
而不是$.get()
jQuery.
然后,要在HTML页面中显示数据,您需要操作HTML DOM.例如,你有一个
<div id="data"></div>
Run Code Online (Sandbox Code Playgroud)
在您要显示响应数据的HTML中,您可以这样做而不是alert(data)
第一个示例:
document.getElementById("data").firstChild.nodeValue = data;
Run Code Online (Sandbox Code Playgroud)
在jQuery示例中,您可以以更简洁和更好的方式执行此操作:
$('#data').text(data);
Run Code Online (Sandbox Code Playgroud)
为了更进一步,您希望有一种易于访问的数据格式来传输更复杂的数据.常见格式是XML和JSON.最后一个是最优选的,因为它更简洁,并且可以非常简单的方式在Java和JavaScript中使用.在Java中,您可以使用Google Gson将完整的Java对象转换为JSON,反之亦然.
List<Product> products = productDAO.list(); // Product is just a Javabean with properties `id`, `name` and `description`.
String json = new Gson().toJson(products);
response.setContentType("application/json");
response.setCharacterEncoding("UTF-8");
response.getWriter().write(json);
Run Code Online (Sandbox Code Playgroud)
在JavaScript中,您可以使用jQuery $.getJSON()
来"立即"获取它.让我们把它展示在一个<table>
.
$.getJSON('myservlet', function(data) {
var table = $('<table>').appendTo($('#data'));
$.each(data, function(i, product) {
var row = $('<tr>').appendTo(table);
$('<td>').text(product.id).appendTo(row);
$('<td>').text(product.name).appendTo(row);
$('<td>').text(product.description).appendTo(row);
});
});
Run Code Online (Sandbox Code Playgroud)
另见:
这里的代码将使用 AJAX 将文本动态打印到 HTML5 文档中(Ajax 代码类似于 book Internet & WWW (Deitel)):
var asyncRequest;
function start(){
try
{
asyncRequest = new XMLHttpRequest();
asyncRequest.addEventListener("readystatechange", stateChange, false);
asyncRequest.open('GET', '/Test', true); // /Test is url to Servlet!
asyncRequest.send(null);
}
catch(exception)
{
alert("Request failed");
}
}
function stateChange(){
if(asyncRequest.readyState == 4 && asyncRequest.status == 200)
{
var text = document.getElementById("text"); // text is an id of a
text.innerHTML = asyncRequest.responseText; // div in HTML document
}
}
window.addEventListener("load", start(), false);
Run Code Online (Sandbox Code Playgroud)
public class Test extends HttpServlet{
@Override
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws IOException{
resp.setContentType("text/plain");
resp.getWriter().println("Servlet wrote this! (Test.java)");
}
}
Run Code Online (Sandbox Code Playgroud)
<div id = "text"></div>
Run Code Online (Sandbox Code Playgroud)
当我刚接触网络编程时,我在上面写了答案。我让它站着,但 javascript 部分绝对应该在 jQuery 中,它比原始 javascript 容易 10 倍。
归档时间: |
|
查看次数: |
129909 次 |
最近记录: |