1

我有一个简单的 JSP 页面,其中包含 2 个按钮:查看和导出。单击查看按钮时,我将从数据库中获取数据,将副本保存到会话中,并将 HTML 代码写入带有数据的标签中。稍后当用户单击导出时,我想在服务器中生成一个 excel 文件(使用会话中的数据)并将其下载到客户端。

Excel 文件在服务器端成功创建。我正在使用来自客户端的 AJAX 请求从服务器下载 Excel 文件。

JSP代码:

 try{                           

                    String filepath=ExportToExcel(session.getAttribute("InvestmentDetails"));

                    //Setting file to download
                    response.setContentType( "application/x-download");

                    response.setHeader("Content-Disposition","attachment; filename=\"SIPInvestment_531.xls\"");                                                                             
                    response.setStatus(200);
                    InputStream in = null;
                    ServletOutputStream outs = response.getOutputStream();                        

                    try {                            
                        File filetodownload=new File(filepath);
                        response.setContentLength(Integer.parseInt(String.valueOf(filetodownload.length())));                                
                        in = new BufferedInputStream(new FileInputStream(filetodownload));                            
                        int ch;
                        while ((ch = in.read()) != -1) {
                            outs.print((char) ch);
                        }
                    }
                    finally {
                        if (in != null) in.close(); 
                    }
                    outs.flush();
                    outs.close();                                                

                }
                catch(Exception ex){
                    str=ex.getMessage();                                          
                }

这是Javascript:

 xmlhttp=new XMLHttpRequest();
            xmlhttp.onreadystatechange=function(){
                if (xmlhttp.readyState==4 && xmlhttp.status==200)
                    {


                    }
            }
            xmlhttp.open("POST","/SIP/rptClientInvestmentDetails.jsp?requesttype=export",false);
            xmlhttp.send();                          

请求到达 JSP 页面。并且无一例外地写入响应输出流。但是浏览器没有弹出下载。可能是什么问题?

4

2 回答 2

2

Ajax 应该用于元语言,而不是二进制文件。

一个简单的

 <a href="/SIP/rptClientInvestmentDetails.jsp?requesttype=export"
    target="_blank">Export</a>

是你所需要的全部。

如果您确定您说过,response.setHeader("Content-Disposition","attachment您应该按照 BalusC 的建议删除目标属性。

于 2012-10-29T14:13:38.310 回答
0

我认为您可以使用 location.href="Provide the java class function name"。这会将控制从 jsp 转移到 java 函数,而无需使用 ajax 调用

于 2014-07-16T17:45:49.730 回答