从 javascript 调用 java servletJavascript 代码:Servlet java code:文档编辑
我正在尝试使用MVC设计模式创建Web应用程序。对于GUI部分,我想使用JavaScript。对于控制器Java Servlets。
现在我从来没有真正使用过JavaScript,所以我很难弄清楚如何从JavaScript调用Java Servlet,以及如何从Servlet获得响应。
任何人都可以帮我吗?
我正在尝试使用MVC设计模式创建Web应用程序。对于GUI部分,我想使用JavaScript。对于控制器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 都应该映射到 一个 (你可以根据自己的喜好改变它),并且至少实现 doGet()
并将数据写入响应,如下所示:url-pattern
/myservlet
String data = "Hello World!";
response.setContentType("text/plain");
response.setCharacterEncoding("UTF-8");
response.getWriter().write(data);
这应该显示在 JavaScript 警报中。Hello World!
当然,您也可以使用doPost(),
但是您应该在jQuery中使用或使用而不是在jQuery中使用。'POST'
xhr.open()
$.post()
$.get()
然后,要在 HTML 页面中显示数据,您需要操作 HTML DOM。例如,您有一个
<div id="data"></div>
在要显示响应数据的 HTML 中,您可以执行此操作,而不是第一个示例:alert(data)
document.getElementById("data").firstChild.nodeValue = data;
在jQuery示例中,你可以用更简洁、更漂亮的方式做到这一点:
$('#data').text(data);
要更进一步,您希望使用一种易于访问的数据格式来传输更复杂的数据。常见的格式是 XML 和 JSON。有关它们的更多详细示例,请转到如何使用 Servlets 和 Ajax?
这里的代码将使用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);
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)");
}
}
<div id = "text"></div>
当我刚接触Web编程时,我在上面写了答案。我让它站起来,但javascript部分绝对应该在jQuery中,它比原始javascript容易10倍。