亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JSP > 正文

用jsp動態輸出excel文檔和中文亂碼問題的解決

2024-09-05 00:20:06
字體:
來源:轉載
供稿:網友
  最近在網上看到一個用java來操縱excel的open source,在weblogic上試用了一下,覺得很不錯,特此向大家推薦一下。

首先去http://www.andykhan.com/jexcelapi/index.html下載最新的jexcelapi,把jxl.jar置于你的classpath中。

寫一個javabean,利用jexcelapi來動態生成excel文檔,我這里寫一個最簡單的,示意性的。復雜的你可能還要查詢數據庫什么的。

///////////////////////////test.java///////////////////////////////////////////
package com.jagie.test;
import java.io.*;
import jxl.*;
import jxl.write.*;
import jxl.format.*;
import java.util.*;
import java.awt.color;
public class test{

public static void writeexcel(outputstream os) throws exception {
jxl.write.writableworkbook wwb = workbook.createworkbook(os);
jxl.write.writablesheet ws = wwb.createsheet("testsheet1", 0);
jxl.write.label labelc = new jxl.write.label(0, 0, "我愛中國");
ws.addcell(labelc);
jxl.write.writablefont wfc = new jxl.write.writablefont(writablefont.arial,
20, writablefont.bold, false,
underlinestyle.no_underline, jxl.format.colour.green);
jxl.write.writablecellformat wcffc = new jxl.write.writablecellformat(wfc);
wcffc.setbackground(jxl.format.colour.red);
labelc = new jxl.write.label(6, 0, "中國愛我",wcffc);
ws.addcell(labelc);
//寫入exel工作表
wwb.write();
//關閉excel工作薄對象
wwb.close();

}

//最好寫一個這樣的main方法來測試一下你的這個class是否寫好了。
public static void main(string[] args)throws exception{
file f=new file("kk.xls");
f.createnewfile();
writeexcel(new fileoutputstream(f));
}

}

寫一個jsp,來利用test這個javabean輸出excel文檔。

///////////////////////////test_excel.jsp//////////////////////////

<%@page import="com.jagie.test.test" %>
<%
response.reset();
response.setcontenttype("application/vnd.ms-excel");
test.writeexcel(response.getoutputstream());
%>

這樣就大功告成了,你用ie訪問test_excel.jsp就能在ie里面打開動態生成的excel文檔了。一點亂碼也沒有。

也許有人會問:response.reset();可不可以不要這一句,我的建議是一定要寫,除非你能保證response的buffer里面沒有別的東西。

還有人也許會問:我在jsp開頭加上<%@page contenttype="application/vnd.ms-excel;charset=gbk" %>這一句,去掉response.setcontenttype("application/vnd.ms-excel");行不行?回答這個問題很簡單,就是查看jsp服務器編譯jsp后生成的java代碼,如果改成這樣,我的welogic7編譯test_excel.jsp后生成的java文件的示意性代碼是這樣的:

public void _jspservice(javax.servlet.http.httpservletrequest request,
javax.servlet.http.httpservletresponse response) throws java.io.ioexception,
javax.servlet.servletexception {

// declare and set well-known variables:
javax.servlet.servletconfig config = getservletconfig();
javax.servlet.servletcontext application = config.getservletcontext();
javax.servlet.jsp.tagext.tag _activetag = null;
// variables for tag extension protocol

object page = this;
javax.servlet.jsp.jspwriter out;
javax.servlet.jsp.pagecontext pagecontext =
javax.servlet.jsp.jspfactory.getdefaultfactory().getpagecontext(this,
request, response, null, true, 8192, true);

response.setheader("content-type",
"application/vnd.ms-excel; charset=gbk");
out = pagecontext.getout();
jspwriter _originalout = out;

javax.servlet.http.httpsession session = request.getsession(true);

try { // error page try block

response.setcontenttype("application/vnd.ms-excel;charset=gbk");

out.print("/r/n/r/n/r/n/r/n");
out.print("/r/n");
//[ /test_excel.jsp; line: 6]
response.reset(); //[ /test_excel.jsp; line: 7]
//response.setcontenttype("application/vnd.ms-excel");
//[ /test_excel.jsp; line: 8]
test.writeexcel(response.getoutputstream()); //[ /test_excel.jsp; line: 9]
} catch (throwable __ee) {
while (out != null && out != _originalout) out = pagecontext.popbody();
((weblogic.servlet.jsp.pagecontextimpl)pagecontext).handlepageexception((throwable)__ee);
}

//before final close brace...
}

很明顯,屏蔽response.setcontenttype("application/vnd.ms-excel");后,在test.writeexcel(response.getoutputstream());之前,response.reset(); 之后沒有設置response contenttype的正確類型,當然輸出為亂碼了。而正確輸出excel的jsp的編譯后源碼是這樣的:

public void _jspservice(javax.servlet.http.httpservletrequest request,
javax.servlet.http.httpservletresponse response) throws java.io.ioexception,
javax.servlet.servletexception
{

// declare and set well-known variables:
javax.servlet.servletconfig config = getservletconfig();
javax.servlet.servletcontext application = config.getservletcontext();
javax.servlet.jsp.tagext.tag _activetag = null;
// variables for tag extension protocol

object page = this;
javax.servlet.jsp.jspwriter out;
javax.servlet.jsp.pagecontext pagecontext =
javax.servlet.jsp.jspfactory.getdefaultfactory().getpagecontext(
this, request, response, null, true, 8192, true);

out = pagecontext.getout();
jspwriter _originalout = out;

javax.servlet.http.httpsession session = request.getsession(true);

try { // error page try block

out.print("/r/n");
//[ /test_excel.jsp; line: 2]
response.reset(); //[ /test_excel.jsp; line: 3]
response.setcontenttype("application/vnd.ms-excel"); //[ /test_excel.jsp; line: 4]
test.writeexcel(response.getoutputstream()); //[ /test_excel.jsp; line: 5]
} catch (throwable __ee) {
while (out != null && out != _originalout) out = pagecontext.popbody();
((weblogic.servlet.jsp.pagecontextimpl)pagecontext).handlepageexception((throwable)__ee);
}

//before final close brace...
}

大家可以看到在response.reset();之后,test.writeexcel(response.getoutputstream());之前正確的設置了response的輸出內容。所以輸出就正常了。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品人成电影| 国产成人精品a视频一区www| 亚洲九九九在线观看| 国产精品久久久久久超碰| 亚洲人成网7777777国产| 97免费中文视频在线观看| 欧美精品情趣视频| 日韩av中文字幕在线| 在线日韩第一页| 精品欧美一区二区三区| 韩国精品久久久999| 亚洲欧美国产精品久久久久久久| 黄色一区二区三区| 久久精品电影一区二区| 亚洲国产精品va在线| 欧美性极品少妇精品网站| 中文字幕日韩精品在线观看| 久久精品亚洲94久久精品| 精品av在线播放| 久久97久久97精品免视看| 在线观看欧美www| 亚洲欧美中文日韩在线v日本| 日韩一区二区三区国产| 亚洲精品电影在线| 欧美成人网在线| 国产91在线高潮白浆在线观看| 成人午夜一级二级三级| 高清一区二区三区四区五区| 欧美国产日韩一区二区在线观看| 最近的2019中文字幕免费一页| 日日噜噜噜夜夜爽亚洲精品| 韩国精品久久久999| 中文字幕av一区二区三区谷原希美| 国产精品激情自拍| 亚洲国产欧美自拍| 九色精品美女在线| 日韩在线免费av| 免费97视频在线精品国自产拍| 欧美性生活大片免费观看网址| 国产精品人人做人人爽| 国产一区二区三区在线免费观看| 国产日韩欧美一二三区| 欧美日韩亚洲网| 成人亚洲激情网| 欧美电影在线观看完整版| 欧美大片在线免费观看| 国产精品免费一区| 久久综合九色九九| 欧美国产日韩精品| 一本色道久久综合亚洲精品小说| 亚洲精品自产拍| 日韩欧美精品中文字幕| 91视频-88av| 精品国产精品三级精品av网址| 亚洲国产欧美一区二区三区久久| 成人久久久久久久| 色综合色综合网色综合| 亚洲性线免费观看视频成熟| 日韩成人xxxx| 亚洲在线免费看| 国产欧美一区二区三区久久| 成人激情黄色网| 欧美精品18videosex性欧美| 96精品视频在线| 国产精品久久久久久久一区探花| 日韩av在线免费播放| 国产日韩欧美中文| 啪一啪鲁一鲁2019在线视频| 日韩电影免费在线观看| 亚洲国产美女久久久久| www.午夜精品| 丁香五六月婷婷久久激情| 色悠悠国产精品| 欧美一级视频一区二区| 国产不卡av在线| 日本精品中文字幕| 亚洲欧美另类在线观看| 日韩美女视频中文字幕| 欧美在线视频播放| 亚洲精品在线看| 亚洲国产古装精品网站| 欧美大片在线免费观看| 欧美中文字幕第一页| 亚洲色图综合久久| 欧美整片在线观看| 在线观看免费高清视频97| 亚洲香蕉av在线一区二区三区| 成人www视频在线观看| 成人有码在线播放| 午夜精品一区二区三区在线播放| 成人黄色免费在线观看| 欧美成人剧情片在线观看| 91久久精品日日躁夜夜躁国产| 午夜精品一区二区三区在线播放| 日韩av一区二区在线| 日本欧美一二三区| 北条麻妃99精品青青久久| 最近2019中文免费高清视频观看www99| 米奇精品一区二区三区在线观看| 日韩在线视频网站| 岛国av一区二区三区| 在线视频日韩精品| 日韩亚洲在线观看| 91精品国产高清自在线看超| 人人爽久久涩噜噜噜网站| 日韩电影大片中文字幕| 欧美激情手机在线视频| 日韩中文视频免费在线观看| 美日韩丰满少妇在线观看| 精品国产一区二区三区久久狼5月| 国产一区深夜福利| 91免费视频国产| 欧美大片网站在线观看| 中文字幕亚洲精品| 亚洲国产欧美一区二区三区久久| 91超碰caoporn97人人| 亚洲电影免费观看高清完整版在线观看| 国产美女精品视频| 亚洲国产精品高清久久久| 国产精品扒开腿做爽爽爽男男| 欧美日韩国产色| 国产精品第2页| 久久夜精品va视频免费观看| 韩国美女主播一区| 国产热re99久久6国产精品| 欧美视频在线观看免费| 国产美女直播视频一区| 91亚洲午夜在线| 97精品国产97久久久久久| 在线观看亚洲区| 上原亚衣av一区二区三区| 国产在线精品播放| 亚洲精品影视在线观看| 欧美成人午夜免费视在线看片| 成人精品视频在线| 亚洲人成自拍网站| 亚洲国产精品va| 久久综合免费视频影院| 欧美日韩不卡合集视频| 丰满岳妇乱一区二区三区| 性亚洲最疯狂xxxx高清| 久久免费视频这里只有精品| 日韩中文字幕在线| 国产丝袜一区二区三区| 日韩av电影院| 国产欧美一区二区白浆黑人| 亚洲网在线观看| 色悠悠久久88| 久久精品亚洲94久久精品| 久久亚洲欧美日韩精品专区| 亚洲国产精品久久久久秋霞不卡| 久久久97精品| 日本欧美中文字幕| 日日噜噜噜夜夜爽亚洲精品| 一本色道久久综合狠狠躁篇怎么玩| 欧洲成人在线观看| 日韩av影视在线| 国产精品露脸av在线| 美女啪啪无遮挡免费久久网站| 亚洲图片欧美日产| 91精品国产777在线观看| 精品国产欧美成人夜夜嗨| 69**夜色精品国产69乱| 国产精品一区专区欧美日韩|