- 浏览: 447345 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
Luob.:
楼主 你这个问题怎么搞定的
奇异的 Spring WebApplicationContext 自动关闭 -
u013202238:
...
PDF和Java技术(PDFBox) -
u013202238:
...
PDF和Java技术(PDFBox) -
yuan1225:
您好请问 Discuz论坛的系统设置在哪里,登陆后台后没有 ...
Discuz!论坛通行证与JSP网站的整合 -
美妙人生:
,好,太好了,只是还是不太理解!
Discuz!论坛通行证与JSP网站的整合
好久没有更新BLog内容了。主要是一直解决工作中遇到的一个问题,即需要把定单的产品项名细 生成一个excel文件,其实问题本身没有什么特别的技术要求,如果是生成word表格或许要采用专门的控件(顺便介绍一下,国内有个比较好的office系统控件,http://www.ntko.com/ 我试用过很好用,但需要花钱的),随便在网上搜一下就会有很多解决方案,我选择了jxl,主要是有清晰的示例代码。下载了类库和一个例子后,马上开始修改,添加,拷贝之类的工作(说实话,我主要是做维护工作的,偶尔有新的需求也是模仿已有的代码,改改即可,几乎没有什么创新内容,很惭愧在技术圈里混),原以为一天完成,结果三天才调试完,主要卡在乱码问题上,虽然现在已经通过,还是没有从根本上理解为什么,我是通过各种方式组合测试才找到答案。为了给有类似需求的网友提供借鉴,我把问题及解决思路整理出来,同时也是对自己加深印象。
需求描述:
用户点击OrderItemsToExcel.jsp后,直接弹出下载保存对话框,下载到本地保存。
约束条件:
只能用JSP实现并且不要调用java Bean,所有的代码都在jsp里完成,并且下载的文件名一定是中文名称。
遇到的问题:
1、 文件名乱码
2、生成的excel文件中文内容乱码
程序运行的环境:
系统运行在weblogic5.1.0, jdk1.2.2, AIX 4.3.3,oracle817数据库
因为是编码问题所以分析与编码有关的设置:
数据库编码UTF-8
JSP文件本身是UTF-8编码
页面输出的charset也是UTF-8
AIX的环境变量 LANG=Zh_CN
在网上找了很多关于java系统的编码问题,也知道从jsp到页面显示过程中要涉及几个编码转换的过程,JSP----->java,java----->class,从数据库---java,从web服务器到浏览器,但是网上的一些方法不能用,因为我们使用的是JDK1.2.2, weblogic5.1 版本都很低,不支持新方法如:URLEncoder.encode() 只支持一个参数,不支持两个参数。现在想起来可能是网上的给出的解决方法太多把自己给搞乱了,看看我的原代码其实很简单,网上的东西只能作为参考,因为不同的运行环境可能会有不同的结果。比如说jsp参数pageEncoding不是所有的web服务器都支持的。
下面是代码,把数据库信息省略
<%@ page extends="tradeex.ec4.jsp.BaseJSPPage" import="java.util.*,java.text.*,java.sql.*,java.net.*" import="oracle.jdbc.driver.*,jxl.*,tradeex.ec4.util.*" contentType="text/html;charset=UTF8"%>
<%
String sorefitem=request.getParameter("SOREFITEM");
sorefitem = "24326";
String sheetname = "productsitems";
String excelsql = "select oi.sorefitem,po.psuppliercompany suppliername,oi.pname productname,oi.ivendpartnumber productcode,oi.oqty quantity,oi.osellprice price,oi.pricecurrefitem currency,po.ponumber "
+" from ecorders.orderitems oi,ecorders.purchaseorders po "
+" where (oi.ostatus>3 or oi.ostatus=3 and oi.osubstatus=4) AND oi.sorefitem="+sorefitem
+" AND oi.sorefitem=po.sorefitem and oi.osellerid=po.psupplierid" ;
int col_num = 0;
java.sql.Statement stm = null;
java.sql.ResultSet rs = null;
java.sql.Connection conn = null;try...{
Class.forName("oracle.jdbc.driver.OracleDriver");
}catch (ClassNotFoundException e)
...{ System.out.println ("no exist driver");
System.exit(0);
}
try
...{
response.reset();
response.setContentType("application/vnd.ms-excel;charset=UTF-8");
response.setHeader("Content-Disposition" ,"attachment;filename="+new String("导出采购商明细报表Excel.xls".getBytes(),"iso-8859-1"));
OutputStream os = response.getOutputStream();//将 WritableWorkbook 写入到输出流
jxl.write.WritableWorkbook wwb = jxl.Workbook.createWorkbook(os); //创建Excel工作表
jxl.write.WritableSheet ws = wwb.createSheet("sheet_1",0);
col_num = 7;
jxl.write.Label label_head;
label_head = new jxl.write.Label(0,0,"请购单号");
ws.addCell(label_head);
label_head = new jxl.write.Label(1,0,"供应商名");
ws.addCell(label_head);
label_head = new jxl.write.Label(2,0,"产品规格型号");
ws.addCell(label_head);
label_head = new jxl.write.Label(3,0,"产品编码");
ws.addCell(label_head);
label_head = new jxl.write.Label(4,0,"数量");
ws.addCell(label_head);
label_head = new jxl.write.Label(5,0,"单价");
ws.addCell(label_head);
label_head = new jxl.write.Label(6,0,"定单号");
ws.addCell(label_head);//结果集中的数据添加到excel中
jxl.write.Number label_num;
jxl.write.Label label_str;
jxl.write.WritableCellFormat floatFormat;
int numrow = 1;
System.out.println(System.currentTimeMillis()+" welcome to hehe!!!!!!!!!!!");
conn = java.sql.DriverManager.getConnection("jdbc:oracle:thin:@192.168.1.180:1521:DB","system","manager");
stm = conn.createStatement();
rs = stm.executeQuery(excelsql);
while(rs.next())
...{
System.out.println(System.currentTimeMillis()+" welcome to while!!!!!!!!!");
label_num = new jxl.write.Number(0,numrow,rs.getInt("sorefitem"));
ws.addCell(label_num);
label_str = new jxl.write.Label(1,numrow,rs.getString("suppliername"));
ws.addCell(label_str);
label_str = new jxl.write.Label(2,numrow,rs.getString("productname"));
ws.addCell(label_str);
label_str = new jxl.write.Label(3,numrow,rs.getString("productcode"));
ws.addCell(label_str);
floatFormat = new jxl.write.WritableCellFormat (jxl.write.NumberFormats.FLOAT);
label_num = new jxl.write.Number(4,numrow,rs.getDouble("quantity"),floatFormat);
ws.addCell(label_num);
label_num = new jxl.write.Number(5,numrow,rs.getDouble("price"),floatFormat);
ws.addCell(label_num);
label_str = new jxl.write.Label(6,numrow,rs.getString("ponumber"));
ws.addCell(label_str);
numrow ++;
}
wwb.write();
wwb.close();
os.flush();
os.close();
}
catch(java.sql.SQLException sqle)...{
System.out.println("sql error");
}
catch(Exception e)...{
System.out.println("catch error ------");
e.printStackTrace();
}
finally...{
System.out.println(System.currentTimeMillis()+ "welcome to finally!!!!!!!");
if(stm != null)
try...{
stm.close();
}catch(Exception fe) ...{ }
if(conn != null)
try...{
conn.close();
}
catch(Exception fe2)...{ }
}
%>
<%
String sorefitem=request.getParameter("SOREFITEM");
sorefitem = "24326";
String sheetname = "productsitems";
String excelsql = "select oi.sorefitem,po.psuppliercompany suppliername,oi.pname productname,oi.ivendpartnumber productcode,oi.oqty quantity,oi.osellprice price,oi.pricecurrefitem currency,po.ponumber "
+" from ecorders.orderitems oi,ecorders.purchaseorders po "
+" where (oi.ostatus>3 or oi.ostatus=3 and oi.osubstatus=4) AND oi.sorefitem="+sorefitem
+" AND oi.sorefitem=po.sorefitem and oi.osellerid=po.psupplierid" ;
int col_num = 0;
java.sql.Statement stm = null;
java.sql.ResultSet rs = null;
java.sql.Connection conn = null;try...{
Class.forName("oracle.jdbc.driver.OracleDriver");
}catch (ClassNotFoundException e)
...{ System.out.println ("no exist driver");
System.exit(0);
}
try
...{
response.reset();
response.setContentType("application/vnd.ms-excel;charset=UTF-8");
response.setHeader("Content-Disposition" ,"attachment;filename="+new String("导出采购商明细报表Excel.xls".getBytes(),"iso-8859-1"));
OutputStream os = response.getOutputStream();//将 WritableWorkbook 写入到输出流
jxl.write.WritableWorkbook wwb = jxl.Workbook.createWorkbook(os); //创建Excel工作表
jxl.write.WritableSheet ws = wwb.createSheet("sheet_1",0);
col_num = 7;
jxl.write.Label label_head;
label_head = new jxl.write.Label(0,0,"请购单号");
ws.addCell(label_head);
label_head = new jxl.write.Label(1,0,"供应商名");
ws.addCell(label_head);
label_head = new jxl.write.Label(2,0,"产品规格型号");
ws.addCell(label_head);
label_head = new jxl.write.Label(3,0,"产品编码");
ws.addCell(label_head);
label_head = new jxl.write.Label(4,0,"数量");
ws.addCell(label_head);
label_head = new jxl.write.Label(5,0,"单价");
ws.addCell(label_head);
label_head = new jxl.write.Label(6,0,"定单号");
ws.addCell(label_head);//结果集中的数据添加到excel中
jxl.write.Number label_num;
jxl.write.Label label_str;
jxl.write.WritableCellFormat floatFormat;
int numrow = 1;
System.out.println(System.currentTimeMillis()+" welcome to hehe!!!!!!!!!!!");
conn = java.sql.DriverManager.getConnection("jdbc:oracle:thin:@192.168.1.180:1521:DB","system","manager");
stm = conn.createStatement();
rs = stm.executeQuery(excelsql);
while(rs.next())
...{
System.out.println(System.currentTimeMillis()+" welcome to while!!!!!!!!!");
label_num = new jxl.write.Number(0,numrow,rs.getInt("sorefitem"));
ws.addCell(label_num);
label_str = new jxl.write.Label(1,numrow,rs.getString("suppliername"));
ws.addCell(label_str);
label_str = new jxl.write.Label(2,numrow,rs.getString("productname"));
ws.addCell(label_str);
label_str = new jxl.write.Label(3,numrow,rs.getString("productcode"));
ws.addCell(label_str);
floatFormat = new jxl.write.WritableCellFormat (jxl.write.NumberFormats.FLOAT);
label_num = new jxl.write.Number(4,numrow,rs.getDouble("quantity"),floatFormat);
ws.addCell(label_num);
label_num = new jxl.write.Number(5,numrow,rs.getDouble("price"),floatFormat);
ws.addCell(label_num);
label_str = new jxl.write.Label(6,numrow,rs.getString("ponumber"));
ws.addCell(label_str);
numrow ++;
}
wwb.write();
wwb.close();
os.flush();
os.close();
}
catch(java.sql.SQLException sqle)...{
System.out.println("sql error");
}
catch(Exception e)...{
System.out.println("catch error ------");
e.printStackTrace();
}
finally...{
System.out.println(System.currentTimeMillis()+ "welcome to finally!!!!!!!");
if(stm != null)
try...{
stm.close();
}catch(Exception fe) ...{ }
if(conn != null)
try...{
conn.close();
}
catch(Exception fe2)...{ }
}
%>
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1671508
发表评论
-
jquery 操作checkbox的例子(全选,反选,获取选取值)
2009-05-21 17:17 5288jquery 操作checkbox的例子(全选,反选,获取选取 ... -
struts2 捕获404错误
2008-11-28 22:04 5242当访问一个不存在页面时,一般显示404错误,这是一个很不友好的 ... -
mysql alter 语句用法,添加、修改、删除字段等
2008-11-06 12:15 1612mysql alter 语句用法,添加、修改、删除字段等 / ... -
mysql数据库自动定期备份的脚本
2008-07-30 15:51 2094说明: 保留每天备份的数据是件不太现实的事,做好的做 ... -
CVS的日常使用
2008-07-22 16:50 1486一个项目的首次导入 cvs ... -
Advanced SiteMesh
2008-07-14 11:40 1181假设你打算结合多种技 ... -
Discuz! 数据库结构参考(下)
2008-06-30 09:40 3149Discuz! 数据库结构参考 ... -
Discuz! 数据库结构参考(上)
2008-06-30 09:39 2048Discuz! 数据库结构参考(上) cdb_access-- ... -
mysql 外鍵約束
2008-06-24 10:43 37221. 什么是参照完整性? ... -
mysql4.1以上版本连接时出现Client does not support authentic
2008-06-18 14:05 1272mysql4.1以上版本连接时出现Client does no ... -
Linux下两个不同版本Mysql的安装实战
2008-06-17 12:42 2819http://www.iteye.com/topic/2039 ... -
查看文本文件的编码格式
2008-06-13 17:16 3839Ubuntu enca命令可以用来查看文件的编码格式 安装 ... -
redhat9上用rpm包方式升级gcc3.2到gcc3.4
2008-06-11 09:50 4335刚刚安了个redhat9,发现gcc是3.2版本的,看到有文章 ... -
PHP+apache+mysql编程中乱码问题的解决
2008-06-10 17:20 2252作者: 乐道 2007-11 ... -
修改firefox 3的语言界面
2008-05-14 10:20 4769进入http://releases.mozilla.org/p ... -
Apache虚拟主机设置
2008-04-16 16:50 1885简介:这里说的虚拟主 ... -
Discuz!论坛通行证与JSP网站的整合
2008-04-11 16:43 5814最近做有关JSP与DISCUZ整合,搞了好久,还是搞不定,后来 ... -
PDF和Java技术(PDFBox)
2008-04-10 17:06 14756原文标题:Making PDFs Port ... -
Discuz 通行证的制作方法和详细说明
2008-04-09 17:42 2338通行证是个大题目,说白了也就是如何维护客户的会话,在php中所 ... -
使用Lucene2.3构建搜索引擎
2008-04-03 20:06 2623Lucene不是一个完整的全文索引应用,而是是一个用Java写 ...
相关推荐
JAVA EXCEL API 简介 Java Excel 是一开放源码项目,通过它 Java 开发人员可以读取 Excel 文件的内容、...因为是使用 Java 编写的,所以我们在 Web 应用中可以通过 JSP、Servlet 来调用 API 实现对 Excel 数据表的访问
Java Excel API 是一个开源项目,专门用于在Java环境中处理Excel文件。这个API使得开发者无需依赖Windows操作系统,就能在任何平台上创建、读取和修改Excel文件。由于它是用Java编写的,因此非常适合在Web应用程序中...
通过使用Java Excel API,可以实现excel文件的读取、写入、编辑、格式化、打印等操作,从而满足企业和个人对excel文件的各种需求。 在本文中,我们将详细介绍基于Java Excel API的excel文件的操纵技术,包括excel...
在Web应用中,通过JSP或Servlet调用Java Excel API,可以方便地实现Excel数据的动态处理。例如,你可以创建一个Servlet,接收用户请求,根据请求参数从数据库获取数据,然后利用Java Excel API生成Excel文件并返回给...
在Web应用中,Java Excel API通常与JSP和Servlet结合使用,生成Excel文件供用户下载。例如,可以通过Servlet创建一个Workbook对象,填充数据,然后将其转换为OutputStream,返回给客户端浏览器,浏览器会自动触发...
本文将深入探讨如何使用JSP技术来实现Word和Excel文档的在线预览功能,这对于许多Web应用程序来说是一项非常实用的功能,能够极大地提升用户体验。 首先,要实现在线预览,我们需要理解JSP的基础工作原理。JSP是由...
### Java Excel API 使用详解 #### 一、Java Excel API 概览 Java Excel API 是一个开源项目,旨在帮助 Java 开发者轻松地处理 Excel 文件。它不仅能够读取 Excel 文件内容,还可以创建新文件和更新现有文件。由于...
使用Java Excel API,可以通过JSP或Servlet在Web应用中轻松操作Excel。例如,要从Excel文件读取数据表,首先需要创建一个Workbook对象。以下是一个简单的示例代码: ```java import java.io.*; import jxl.*; try ...
在Web应用中,可以通过JSP和Servlet调用Java Excel API,使得用户能够在线操作Excel文件。例如,可以生成CSV文件,然后让浏览器以Excel格式打开,或者直接使用API在服务器端进行复杂的Excel处理,然后将结果以下载...
Java Excel API是一个开源项目,允许开发者在Java环境中对Excel文件进行读取、创建、修改等操作,使得即使在非Windows操作系统上也能处理Excel数据。这个API适用于各种场景,包括Web应用,通过JSP和Servlet调用来...
Java Excel API是一个开源项目,允许Java开发者通过编程方式对Excel文件进行读取、创建和更新等操作,即使在非Windows操作系统上也能实现。这个API基于Java编写,因此可以在Web应用程序中,如JSP和Servlet中方便地...
在Java Web开发中,JSP(JavaServer Pages)经常用于创建动态网页,而处理Excel文件的上传和下载是常见的需求,特别是在数据导入导出、报表生成等场景。本篇文章将详细探讨如何使用JSP实现Excel的上传和下载功能。 ...
标题中的“通用iframe下载excel的javascript和Java封装程序”指的是一个使用JavaScript和Java技术实现的通用文件下载解决方案,特别适用于处理Excel文件下载。这个方法利用了iframe的技术来规避浏览器的安全限制,...
标题 "JAVA使用EXCEL例程" 涉及的...综上所述,这个例程展示了Java如何利用Apache POI库来处理Excel文件,同时结合JSP和Tomcat服务器实现文件上传和数据库数据的导入,是学习Java Excel操作和Web应用开发的实用示例。
在Java与JSP环境下导出Excel表格,通过使用Apache POI库,我们可以轻松地创建、填充和导出Excel文件。无论是简单的数据导出还是复杂的报表生成,Apache POI都提供了强大的工具集来满足各种需求。掌握了这一技能,...
在JSP中,你可以使用类似的逻辑,只是需要考虑如何将生成的Excel文件响应给客户端。例如,你可以创建一个Servlet来处理请求并返回Excel文件: ```java import javax.servlet.*; import javax.servlet.http.*; ...
在Java编程环境中,读取Excel文件并将其内容在JSP(Java Server Pages)页面上以表格形式展示是一项常见的任务,特别是在处理数据导入、导出或数据可视化时。本篇文章将详细讲解如何实现这一功能,包括读取Excel文件...
下面将详细介绍如何使用Java Excel API进行Excel文件的基本操作。 ##### 1. 读取Excel文件数据表 首先,需要创建一个`Workbook`对象,这是Java Excel API中的核心类之一,用于表示Excel文件。可以从本地文件系统...