首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 一个使用 AJAX servlet返回EXCEL 问题 [已结帖,结帖人:wudaoshengu]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • wudaoshengu
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 结帖率:
    发表于:2008-08-20 16:19:57 楼主
    AJAX function clickbtnmakeExcel()
    {
    var uri= "GeneratePreCard";
    xmlrequest.open("POST", uri, true);
    xmlrequest.setRequestHeader("Content-Type","application/x-www-form-urlencoded;charset=UTF-8");
    xmlrequest.send(null);
    }


    SERVLET protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    response.setContentType("application/vnd.ms-excel");

    response.setCharacterEncoding("UTF-8");

            HSSFWorkbook wbook = new HSSFWorkbook();
    HSSFSheet sheet = wbook.createSheet("new sheet");
    sheet.setDefaultColumnWidth((short)18);

    HSSFRow  row= sheet.createRow((short)0);
    HSSFCell cell= row.createCell((short)0);
    cell.setCellValue("卡的信息");
    sheet.addMergedRegion(new Region(0,(short)0,1,(short)4));

    row= sheet.createRow((short)2);
    row.createCell((short)0).setCellValue("序 号");
    row.createCell((short)1).setCellValue("序列号");
    row.createCell((short)2).setCellValue("卡 号");
    row.createCell((short)3).setCellValue("主持人密码");
    row.createCell((short)4).setCellValue("会员密码");


    OutputStream out = response.getOutputStream();
    wbook.write(out);
            out.close();
    }


    用ajax发送的请求 到服务端,服务端用的servlet处理的。(想直接生成Excel文件到客户端)调试过了,生成的文件没问题,就是没反应,没返回?
    望高手解惑!
    60  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • feng8008
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-20 16:39:351楼 得分:10
    1.检查路径对不?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • kokobox
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-21 23:10:482楼 得分:20
    因为你没有返回个ajax一个结果

    你要response给ajax一个结果,要么是Text的,要么是xml的

    这样ajax的回调函数接受到应答返回结果给客户

    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • wudaoshengu
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-22 09:42:233楼 得分:0
    那怎么返回Excel 那? 我要的是EXCEL 文件。text 和xml文件好做。关键是怎么返回Excel。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • lemon520
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-22 09:57:364楼 得分:10
    你的代码设置没有错,你可以用url或是form提交的方式来访问测试你的servlet,应该可以提示下载excel
    你也说了,text和xml文件好做,那么我们用text为例,假设你的servlet返回了"abc"三个字母,你的页面会刷新成只有"abc"吗?
    肯定不会,如果你不用javascript处理response中的"abc",则什么也不会发生。就跟你现在的excel文件一样
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • chenqi3166
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-22 10:16:515楼 得分:0
    OutputStream out = response.getOutputStream();
    wbook.write(out);
    out.print("???");
    out.close();
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • zhao_tk
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-22 10:50:586楼 得分:10
    前台:
    <script type="text/javascript">
            var xmlHttp = null;
           
            function createXMLHttpRequest(){
                if(window.ActiveXObject){
                    xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
                }else if(window.XMLHttpRequest){
                    xmlHttp = new XMLHttpRequest();
                }
            }
           
            function change(){
                createXMLHttpRequest();
                var url = "/AjaxServlet?" + Math.random(); //你的servlet
                xmlHttp.onreadystatechange = callback;
                xmlHttp.open("GET", url, true);
                xmlHttp.send(null);
            }
           
            function callback(){
                if (xmlHttp.readyState == 4){
                    if (xmlHttp.status == 200){
                        var str=xmlHttp.responseText;//后台返回的数据
                        div1.innerHTML = str;
                    }
                }
            }
           
         
            </script> 

    <body onload="init()">
            <div id="div1"> </div>
        </body>

    后台:
    PrintWriter out = response.getWriter();
    out.println("你在前台输出的数据!");
    out.flush();
    out.close();
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • youjianbo_han_87
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-22 10:52:547楼 得分:10
    都已经有生成excel的语句,干嘛还在页面里面生成?? 直接在form里面调用方法不就好了,这样调试也方便,比你在js里面方便多了吧
    public void WriteInReportByResponse(HttpServletResponse response, HSSFWorkbook wb)
    {
    try {
    OutputStream op = response.getOutputStream();
    wb.write(op);
    op.flush();
    op.close();
    } catch (IOException e) {
    log.error(e.getMessage());
    }
    }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • wudaoshengu
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-25 09:05:048楼 得分:0
    PrintWriter 没有 write方法吧
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • wudaoshengu
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-25 09:10:199楼 得分:0
    不好意思,说错了。

    我 是这么做的,有一个文件也要提交到服务器,不知道文件的大小,用form 或url提交的参数大小是不是有限制的?
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved