Ajax效果,获取response.getWriter().println("");输出

我在深圳搬砖-Justin 2009-12-01 10:45:11
通过Ajax 发送请求到Servlet

function test() {

// 创建Ajax.Request对象,发起一个Ajax请求

var myAjax = new Ajax.Request(

'Upload', // 请求的URL

{
method: 'get', // 使用GET方式发送HTTP请求

onComplete: showResponse // 指定请求成功完成时需要执行的方法

}

);
}

function showResponse(response) {

$('divResult').innerHTML = response.responseText;

}

response.getWriter().println("1开始操作!<br>");
response.getWriter().close();
response.getWriter().println("1操作完毕!<br>");
response.getWriter().close();
response.getWriter().println("开始操作2!");
response.getWriter().close();

问题是:每个输出 要在页面显示,但是通过response.getWriter().println(""); 输出,如果不关闭会在所有输出完毕后一下全部显示,没有ajax效果
但是关闭第一个可以显示出来,后面的执行了但是不会显示在界面上。

需要在页面显示
1开始操作
1操作完毕
开始操作2


...全文
1464 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
小瑞 2010-10-12
  • 打赏
  • 举报
回复
貌似不行
fantasy2436 2009-12-01
  • 打赏
  • 举报
回复

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<script src="prototype.js" language="JavaScript"
type="text/javascript"></script>
<script type="text/javascript" language="JavaScript">
var updater = null;

function startStatusCheck()
{
//设置上传按钮为不可用状态,避免多次提交
$('submitButton').disabled = true;
//创建周期性发送请求的Ajax对象
updater = new Ajax.PeriodicalUpdater(
'status',
'Upload',
{asynchronous:true, frequency:1, method: 'get', parameters: 'c=status',onSuccess: showFilter,
onFailure: reportError,on});

}
function showResponse(response) {
alert(0);
$('divResult').innerHTML = response.responseText;

}
//出错时处理方法
function reportError(request)
{
$('submitButton').disabled = false;

$('status').innerHTML = '<div class="error"><b>Error communicating with server. Please try again.</b></div>';
}
//上传完毕后,取消周期性获取进度状态,将最终的状态显示在客户端
function killUpdate(message)
{
$('submitButton').disabled = false;
if(null!=updater)
{
//停止刷新获取进度
updater.stop();
}
if(message != '')//如果有错误信息,则显示出来
{
$('status').innerHTML = '<div class="error"><b>Error processing results: ' + message + '</b></div>';
}
else//如果没有错误信息
{
//获取上传文件的完成状态,显示到客户端
new Ajax.Updater('status',
'Upload',
{asynchronous:true, method: 'get', parameters: 'c=status', onFailure: reportError});
}
}
</script>
</head>

<body>
<!-- 这个是隐藏的<ifame>作为表单提交后处理的后台目标-->
<!-- 这个是隐藏的<ifame>作为表单提交后处理的后台目标-->
<iframe id='target_upload' name='target_upload' src=''
style='display: none'></iframe>
<!-- 当表单提交后,调用startStatusCheck()方法-->
<form enctype="multipart/form-data" name="fileform" method="post"
action="Upload" onsubmit="startStatusCheck();"
target="target_upload">
<BR>
请选择上传的文件:
<BR>
<input name="importFile" type="file">
<input id="button" type="button" value="上传" onclick="startStatusCheck()" />
</form>
<!-- 这里显示进度条 -->
<div id="status"></div>
<div id="divResult" >123</div>
</body>

</html>


package book.upload;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Iterator;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

public class UploadServlet extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {

doPost(request, response);
}

public void doPost(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
System.out.println("DoPost");
request.setCharacterEncoding("GBK");
response.setCharacterEncoding("GBK");
response.setContentType("text/html; charset=GBK");
// 创建HttpSession对象
HttpSession session = request.getSession();

if ("status".equals(request.getParameter("c"))) {// 如果请求中c的值为status
doStatus(session, response);// 调用doStatus方法
} else {// 否则,调用doFileUpload方法
doFileUpload(session, request, response);
}
}
private void doFileUpload(HttpSession session, HttpServletRequest request,
HttpServletResponse response) throws IOException {
System.out.println("doFileUpload");

try {

for(int i=0;i<200000;i++)
{
Thread.sleep(1000l);
session.setAttribute("aa", i);
}

} catch (Exception e) {
sendCompleteResponse(response, e.getMessage());
}
}


private void doStatus(HttpSession session, HttpServletResponse response)
throws IOException {

if(session.getAttribute("aa")!=null)
{
System.out.println(session.getAttribute("aa"));
response.getWriter().println(session.getAttribute("aa"));

}



}




}




  • 打赏
  • 举报
回复
[Quote=引用 3 楼 laker_914 的回复:]
楼主这是要做批量文件上传吗??还是?
[/Quote]
差不多的,我需要往数据库 插入数据

操作完一个表 给个提示
laker_914 2009-12-01
  • 打赏
  • 举报
回复
楼主这是要做批量文件上传吗??还是?
  • 打赏
  • 举报
回复
需要一个 jsp或html 发送请求到Servlet

在Servlet 有个 for循环
for(int i=0;i<200;i++)
{
//输出
}
然后在jsp或者 html显示 输出
需要Ajax效果
道光2008 2009-12-01
  • 打赏
  • 举报
回复
你的意思是持续给html、jsp,response输出?
这个当然不能实现,一个request只能对应一个response,服务端永远不会自动方式请求。
你可以在客户端采用setTimeout(ajax请求函数,2000);
这样循环执行ajax请求函数,检查服务端的一个状态标志(标志当前状态);然后response输出
xuexijava 2009-12-01
  • 打赏
  • 举报
回复
学习加顶

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧