当前位置:编程学习 > JAVA >>

用response.setHeader导出csv文件,当数据稍多的时候就直接在页面打印出来了,不会弹出另存为的窗口

求助啊,少量的话可以导出,超过50行就无法导出了。

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

request.setCharacterEncoding("gbk"); 
response.setCharacterEncoding("gbk");
PrintWriter out = response.getWriter();
//FileWriter out =null;


String ks=noNull(request.getParameter("ks"));
String js=noNull(request.getParameter("js"));
String cljg=noNull(request.getParameter("cljg"));
String lbid=noNull(request.getParameter("lbid"));
String cpid=noNull(request.getParameter("cpid"));
String khzh=noNull(request.getParameter("khzh"));
String djczy=new String(noNull(request.getParameter("djczy")).getBytes("ISO-8859-1"),"GBK");
String khxm=new String(noNull(request.getParameter("khxm")).getBytes("ISO-8859-1"),"GBK");
String azdz=new String(noNull(request.getParameter("azdz")).getBytes("ISO-8859-1"),"GBK");

out.write
//out.println
("姓名," +
"安装详细地址," +
"预约类别," +
"产品名称," +
"联系电话," +
"移动电话," +
"数字电视证号," +
"登记时间," +
"登记操作员," +
"状态," +
"接单日期," +
"处理操作员"+"\n");

try {
connection = DriverManager.getConnection(connectionurl, dbouser,
dbopasswd);
statement = connection.createStatement();

strsql="select * from ipcc_kdyyaz aa left join ipcc_kdyyaz_yylb bb on aa.lbid=bb.idlb " +
"left join ipcc_kdyyaz_cpmc cc on aa.cpid=cc.idcp where to_char(CHRDATE,'yyyymmdd')>='"+ks+"' and to_char(CHRDATE,'yyyymmdd')<='"+js+"'";
if(!cljg.trim().equals("-1"))
{
strsql += " and status='"+cljg+"'";
}
if(!lbid.trim().equals("-1"))
{
strsql += " and LBID='"+lbid+"'";
}
if(!cpid.trim().equals("-1"))
{
strsql += " and CPID='"+cpid+"'";
}
if(!djczy.trim().equals(""))
{
strsql += " and CHRID like '%"+djczy+"%'";
}
if(!khxm.trim().equals(""))
{
strsql += " and UNAME like '%"+khxm+"%'";
}
if(!azdz.trim().equals(""))
{
strsql += " and ADDRESS like '%"+azdz+"%'";
}
if(!khzh.trim().equals(""))
{
strsql += " and TV='"+khzh+"'";
}
strsql += " order by CHRDATE";



resultset = statement.executeQuery(strsql);

while(resultset.next()) 
{
//证件名称(:01;:02;:03;:04;:05;:06;:07;:08;:09)

String ls_name="";
if(resultset.getString("IDNAME").trim().equals("1")) ls_name="身份证";
else if(resultset.getString("IDNAME").trim().equals("2")) ls_name="护照";
else if(resultset.getString("IDNAME").trim().equals("3")) ls_name="工作证";
else if(resultset.getString("IDNAME").trim().equals("4")) ls_name="学生证";
else if(resultset.getString("IDNAME").trim().equals("5")) ls_name="驾驶证";
else if(resultset.getString("IDNAME").trim().equals("6")) ls_name="回乡证";
else if(resultset.getString("IDNAME").trim().equals("7")) ls_name="军官证";
else if(resultset.getString("IDNAME").trim().equals("8")) ls_name="户口本";
else if(resultset.getString("IDNAME").trim().equals("9")) ls_name="其他";
else if(resultset.getString("IDNAME").trim().equals("10")) ls_name="武警警官证";
else if(resultset.getString("IDNAME").trim().equals("11")) ls_name="士兵证";
else if(resultset.getString("IDNAME").trim().equals("12")) ls_name="军校学生证";
else if(resultset.getString("IDNAME").trim().equals("13")) ls_name="残疾证";
else if(resultset.getString("IDNAME").trim().equals("14")) ls_name="营业执照";
else if(resultset.getString("IDNAME").trim().equals("15")) ls_name="政府执照";
else if(resultset.getString("IDNAME").trim().equals("16")) ls_name="无证件类型";
else if(resultset.getString("IDNAME").trim().equals("17")) ls_name="非签约虚拟证件";
else if(resultset.getString("IDNAME").trim().equals("18")) ls_name="社保卡";
else if(resultset.getString("IDNAME").trim().equals("19")) ls_name="企业代码证";
else if(resultset.getString("IDNAME").trim().equals("20")) ls_name="工商登记证";
else if(resultset.getString("IDNAME").trim().equals("21")) ls_name="图书证";
else if(resultset.getString("IDNAME").trim().equals("22")) ls_name="组织机构代码证";
else if(resultset.getString("IDNAME").trim().equals("23")) ls_name="税务登记证";



String ls_jg="";
if(resultset.getString("STATUS").trim().equals("0")) ls_jg="未处理";
else if(resultset.getString("STATUS").trim().equals("1")) ls_jg="已安装";
else if(resultset.getString("STATUS").trim().equals("2")) ls_jg="不安装";
else if(resultset.getString("STATUS").trim().equals("3")) ls_jg="处理中";


String CHRDATE="";
if(!(resultset.getString("CHRDATE")==null))
{
CHRDATE=resultset.getString("CHRDATE").substring(0,19);
}

out.write
//out.println
(noNull(resultset.getString("UNAME"))+","

+ noNull(resultset.getString("ADDRESS"))+","

+ noNull(resultset.getString("LBNAME"))+","

+ noNull(resultset.getString("CPNAME"))+","

+ noNull(resultset.getString("TEL"))+","

+ noNull(resultset.getString("MTEL"))+","

+ noNull(resultset.getString("TV"))+","

+ CHRDATE+","

+ noNull(resultset.getString("CHRID"))+","

+ ls_jg+","

+ noNull(resultset.getString("RECVDATE"))+","

+ noNull(resultset.getString("OPERID"))+"\n"


);



}


if (resultset != null)
resultset.close();
if (statement != null)
statement.close();
if (connection != null)
connection.close();
} catch (SQLException ee) {
out.println(ee.getMessage());
}

response.setContentType("application/csv;charset=gbk");

response.setHeader("Content-Disposition","attachment;filename=\"yuyuetongji.csv\"");


}
response.setHeader 导出 直接在页面打开 --------------------编程问答-------------------- 文件名改成txt的试一试。。。 --------------------编程问答-------------------- 改成txt也不行 --------------------编程问答-------------------- 求助啊,在线等…… --------------------编程问答-------------------- 跟浏览器设置有关 --------------------编程问答--------------------
引用 4 楼 yjflinchong 的回复:
跟浏览器设置有关
能不能具体说下什么设置? --------------------编程问答-------------------- 唉,谁能帮帮忙啊 --------------------编程问答--------------------
引用 楼主 godpa110 的回复:
求助啊,少量的话可以导出,超过50行就无法导出了。

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

request.setCharacterEncoding("gbk"); 
response.setCharacterEncoding("gbk");
PrintWriter out = response.getWriter();
//FileWriter out =null;


String ks=noNull(request.getParameter("ks"));
String js=noNull(request.getParameter("js"));
String cljg=noNull(request.getParameter("cljg"));
String lbid=noNull(request.getParameter("lbid"));
String cpid=noNull(request.getParameter("cpid"));
String khzh=noNull(request.getParameter("khzh"));
String djczy=new String(noNull(request.getParameter("djczy")).getBytes("ISO-8859-1"),"GBK");
String khxm=new String(noNull(request.getParameter("khxm")).getBytes("ISO-8859-1"),"GBK");
String azdz=new String(noNull(request.getParameter("azdz")).getBytes("ISO-8859-1"),"GBK");

out.write
//out.println
("姓名," +
"安装详细地址," +
"预约类别," +
"产品名称," +
"联系电话," +
"移动电话," +
"数字电视证号," +
"登记时间," +
"登记操作员," +
"状态," +
"接单日期," +
"处理操作员"+"\n");

try {
connection = DriverManager.getConnection(connectionurl, dbouser,
dbopasswd);
statement = connection.createStatement();

strsql="select * from ipcc_kdyyaz aa left join ipcc_kdyyaz_yylb bb on aa.lbid=bb.idlb " +
"left join ipcc_kdyyaz_cpmc cc on aa.cpid=cc.idcp where to_char(CHRDATE,'yyyymmdd')>='"+ks+"' and to_char(CHRDATE,'yyyymmdd')<='"+js+"'";
if(!cljg.trim().equals("-1"))
{
strsql += " and status='"+cljg+"'";
}
if(!lbid.trim().equals("-1"))
{
strsql += " and LBID='"+lbid+"'";
}
if(!cpid.trim().equals("-1"))
{
strsql += " and CPID='"+cpid+"'";
}
if(!djczy.trim().equals(""))
{
strsql += " and CHRID like '%"+djczy+"%'";
}
if(!khxm.trim().equals(""))
{
strsql += " and UNAME like '%"+khxm+"%'";
}
if(!azdz.trim().equals(""))
{
strsql += " and ADDRESS like '%"+azdz+"%'";
}
if(!khzh.trim().equals(""))
{
strsql += " and TV='"+khzh+"'";
}
strsql += " order by CHRDATE";



resultset = statement.executeQuery(strsql);

while(resultset.next()) 
{
//证件名称(:01;:02;:03;:04;:05;:06;:07;:08;:09)

String ls_name="";
if(resultset.getString("IDNAME").trim().equals("1")) ls_name="身份证";
else if(resultset.getString("IDNAME").trim().equals("2")) ls_name="护照";
else if(resultset.getString("IDNAME").trim().equals("3")) ls_name="工作证";
else if(resultset.getString("IDNAME").trim().equals("4")) ls_name="学生证";
else if(resultset.getString("IDNAME").trim().equals("5")) ls_name="驾驶证";
else if(resultset.getString("IDNAME").trim().equals("6")) ls_name="回乡证";
else if(resultset.getString("IDNAME").trim().equals("7")) ls_name="军官证";
else if(resultset.getString("IDNAME").trim().equals("8")) ls_name="户口本";
else if(resultset.getString("IDNAME").trim().equals("9")) ls_name="其他";
else if(resultset.getString("IDNAME").trim().equals("10")) ls_name="武警警官证";
else if(resultset.getString("IDNAME").trim().equals("11")) ls_name="士兵证";
else if(resultset.getString("IDNAME").trim().equals("12")) ls_name="军校学生证";
else if(resultset.getString("IDNAME").trim().equals("13")) ls_name="残疾证";
else if(resultset.getString("IDNAME").trim().equals("14")) ls_name="营业执照";
else if(resultset.getString("IDNAME").trim().equals("15")) ls_name="政府执照";
else if(resultset.getString("IDNAME").trim().equals("16")) ls_name="无证件类型";
else if(resultset.getString("IDNAME").trim().equals("17")) ls_name="非签约虚拟证件";
else if(resultset.getString("IDNAME").trim().equals("18")) ls_name="社保卡";
else if(resultset.getString("IDNAME").trim().equals("19")) ls_name="企业代码证";
else if(resultset.getString("IDNAME").trim().equals("20")) ls_name="工商登记证";
else if(resultset.getString("IDNAME").trim().equals("21")) ls_name="图书证";
else if(resultset.getString("IDNAME").trim().equals("22")) ls_name="组织机构代码证";
else if(resultset.getString("IDNAME").trim().equals("23")) ls_name="税务登记证";



String ls_jg="";
if(resultset.getString("STATUS").trim().equals("0")) ls_jg="未处理";
else if(resultset.getString("STATUS").trim().equals("1")) ls_jg="已安装";
else if(resultset.getString("STATUS").trim().equals("2")) ls_jg="不安装";
else if(resultset.getString("STATUS").trim().equals("3")) ls_jg="处理中";


String CHRDATE="";
if(!(resultset.getString("CHRDATE")==null))
{
CHRDATE=resultset.getString("CHRDATE").substring(0,19);
}

out.write
//out.println
(noNull(resultset.getString("UNAME"))+","

+ noNull(resultset.getString("ADDRESS"))+","

+ noNull(resultset.getString("LBNAME"))+","

+ noNull(resultset.getString("CPNAME"))+","

+ noNull(resultset.getString("TEL"))+","

+ noNull(resultset.getString("MTEL"))+","

+ noNull(resultset.getString("TV"))+","

+ CHRDATE+","

+ noNull(resultset.getString("CHRID"))+","

+ ls_jg+","

+ noNull(resultset.getString("RECVDATE"))+","

+ noNull(resultset.getString("OPERID"))+"\n"


);



}


if (resultset != null)
resultset.close();
if (statement != null)
statement.close();
if (connection != null)
connection.close();
} catch (SQLException ee) {
out.println(ee.getMessage());
}

response.setContentType("application/csv;charset=gbk");

response.setHeader("Content-Disposition","attachment;filename=\"yuyuetongji.csv\"");


}

试试post提交
我昨天的那个就是get方式的,无反应,
或者你再试试 在响应头里加入强制下载的MIME类型: 
response.setContentType("application/force-download");//

参考 http://aguu125.iteye.com/blog/352314 --------------------编程问答-------------------- 搞定了,把response.setContentType("application/csv;charset=gbk");
 
        response.setHeader("Content-Disposition","attachment;filename=\"yuyuetongji.csv\"");
         放在printWriter前面就好了。谢谢楼上的回答。
补充:Java ,  Web 开发
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,