问题描述:
目前我是这样调用的: 从JSP页面提交到SERVLET , 在servlet中调用我的程序. 由于我的程序执行起来要比较长的时间,
所以在这个过程中 提交页面就僵在这里 一直等程序执行完了才跳转到结果页面 . 所以我觉得这样很不好, 很不人性化, 请各位给点建议 看怎么样可以在执行程序的过程中不要停留在提交的页面 . 或者转到另外的提示页面. 等程序完成了 再跳转到结果页面. 请高手们详细描述一下. 谢谢 各位了.
目前我是这样调用的: 从JSP页面提交到SERVLET , 在servlet中调用我的程序. 由于我的程序执行起来要比较长的时间,
所以在这个过程中 提交页面就僵在这里 一直等程序执行完了才跳转到结果页面 . 所以我觉得这样很不好, 很不人性化, 请各位给点建议 看怎么样可以在执行程序的过程中不要停留在提交的页面 . 或者转到另外的提示页面. 等程序完成了 再跳转到结果页面. 请高手们详细描述一下. 谢谢 各位了.
不过这样就成了2个请求了,可显示出来效果比较好看
给点具体的建议 ,
有代码参考的,
我现在用的只是JSP,
定时用AJAX请求来查询进度,如果后台执行完毕的话,就用提示框或者自动跳转到执行完毕页面来完成就可以了。定时AJAX查询进度可能会对服务器压力很大,我目前也只会这种方式了,希望后面有人提出更好的。代码等会编辑。
是啊 用纯粹的JSP 如何实现啊
<body>
<div></div>
</body>
</html>
当前提交页面用这样个模板,提交页面用js加载到div中,提交的时候,先用js ajax加载一个友好界面到div中,然后ajax提交数据,这样用户看到的就是友好界面了,而且数据也提交了.等到ajax执行回调函数时,再跳转到新的url.
我没怎么用ajax , 有些不太懂.
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'register.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
<script type="text/javascript">
//定义异步请求对象
var xmlHttp;
//创建异步请求对象的函数
function createXMLHttpRequest() {
if(window.ActiveXObject) {//如果是微软的浏览器
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
} else if(window.XMLHttpRequest) {//如果是其他类型的浏览器
xmlHttp = new XMLHttpRequest();
}
}
//向服务器发送异步请求的函数
function startRequest() {
document.myform.action="echo.jsp"; //想在提交的过程中提示到echo.jsp --- 提示页面
//window.location.href="echo.jsp";
var userName = document.getElementById("txtName").value; //得到登录名文本框的值
createXMLHttpRequest(); //调用创建异步请求的函数
xmlHttp.onreadystatechange = handleStateChange; //当状态发生改变时,调用处理函数
//以get方式向服务器发送请求
//请求的资源路径为servlet/CheckUserServlet,并且通过URL重写的方式向该Servlet传递了一个参数
//true表示此请求为异步请求,如果为false则表示不为异步请求
xmlHttp.open("get", "servlet/CheckUserServlet?name=" + userName, true);
xmlHttp.send(null); //开始向服务器发送请求
}
//处理服务器返回结果的函数
function handleStateChange() {
if(xmlHttp.readyState == 4) {//表明客户端已经成功地发送请求
if(xmlHttp.status == 200) { //返回200表明服务器成功处理客户端的请求
alert(xmlHttp.responseText); //responseText:获得服务器返回的字符串
}
}
}
</script> </head>
<body>
<form name="myform" method="get" action="./AjaxServlet.do">
<table>
<tr>
<td>请输入用户名:</td>
<td>
<input id="txtName" type="text" name="txtName" />
</td>
</tr>
<tr>
<td>请输入密码:</td>
<td><input type="password" name="txtPwd" /></td>
</tr>
<tr>
<td></td>
<td>
<input type="submit" value="注册" onclick="startRequest();/>
<input type="reset" value="重置" />
</td>
</tr>
</table>
</form>
</body>
</html>
只是将form表单的action设为echo.jsp,并不是跳转,
window.location.href="echo.jsp";
这一句才是跳转